[FFmpeg-devel] [PATCH] fftools/ffmpeg_mux: keep write_header and write_packet in the same thread
angus.chen at intel.com
angus.chen at intel.com
Wed Nov 1 11:01:15 EET 2023
From: "Chen, Angus" <angus.chen at intel.com>
sdl2_muxer(wayland):
In ffmpeg6, we create a separate thread for muxer after calling avformat_write_header().
It may generate EGL_BAD_ACCESS when we call write_packet. This is because egl_context
is bound to previous thread.
>From EGL spec: If ctx is current to some other thread, or if either draw or read are
bound to contexts in another thread, an EGL_BAD_ACCESS error is generated.
Signed-off-by: Chen, Angus <angus.chen at intel.com>
---
fftools/ffmpeg_mux.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c
index 7a924dba6c..d9eee3bb6d 100644
--- a/fftools/ffmpeg_mux.c
+++ b/fftools/ffmpeg_mux.c
@@ -215,12 +215,21 @@ static void *muxer_thread(void *arg)
OutputFile *of = &mux->of;
AVPacket *pkt = NULL;
int ret = 0;
+ AVFormatContext *fc = mux->fc;
pkt = av_packet_alloc();
if (!pkt) {
ret = AVERROR(ENOMEM);
goto finish;
}
+ ret = avformat_write_header(fc, &mux->opts);
+ if (ret < 0) {
+ av_log(mux, AV_LOG_ERROR, "Could not write header (incorrect codec "
+ "parameters ?): %s\n", av_err2str(ret));
+ goto finish;
+ }
+ //assert_avoptions(of->opts);
+ mux->header_written = 1;
thread_set_name(of);
@@ -599,15 +608,6 @@ int mux_check_init(Muxer *mux)
return 0;
}
- ret = avformat_write_header(fc, &mux->opts);
- if (ret < 0) {
- av_log(mux, AV_LOG_ERROR, "Could not write header (incorrect codec "
- "parameters ?): %s\n", av_err2str(ret));
- return ret;
- }
- //assert_avoptions(of->opts);
- mux->header_written = 1;
-
av_dump_format(fc, of->index, fc->url, 1);
nb_output_dumped++;
--
2.29.0
More information about the ffmpeg-devel
mailing list