diff --git a/ChangeLog b/ChangeLog index d4cc80ade8..bb72d98e26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-05-09 Edward Hervey + + * ext/ffmpeg/gstffmpeg.c: (gst_ffmpeg_av_find_stream_info): + * ext/ffmpeg/gstffmpeg.h: + * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_open): + Protect calls to ffmpeg functions that will implicitly call + avcodec_open/close with the avcodec mutex. + Fixes #433245 + 2007-05-02 Edward Hervey * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init), diff --git a/ext/ffmpeg/gstffmpeg.c b/ext/ffmpeg/gstffmpeg.c index 6c74db2839..3430847851 100644 --- a/ext/ffmpeg/gstffmpeg.c +++ b/ext/ffmpeg/gstffmpeg.c @@ -63,6 +63,17 @@ gst_ffmpeg_avcodec_close (AVCodecContext *avctx) { return ret; } +int +gst_ffmpeg_av_find_stream_info(AVFormatContext *ic) { + int ret; + + g_static_mutex_lock (&gst_avcodec_mutex); + ret = av_find_stream_info (ic); + g_static_mutex_unlock (&gst_avcodec_mutex); + + return ret; +} + #ifndef GST_DISABLE_GST_DEBUG static void gst_ffmpeg_log_callback (void * ptr, int level, const char * fmt, va_list vl) diff --git a/ext/ffmpeg/gstffmpeg.h b/ext/ffmpeg/gstffmpeg.h index 50ebc379cb..e0f1c90f6f 100644 --- a/ext/ffmpeg/gstffmpeg.h +++ b/ext/ffmpeg/gstffmpeg.h @@ -53,6 +53,7 @@ extern gboolean gst_ffmpegdeinterlace_register (GstPlugin * plugin); int gst_ffmpeg_avcodec_open (AVCodecContext *avctx, AVCodec *codec); int gst_ffmpeg_avcodec_close (AVCodecContext *avctx); +int gst_ffmpeg_av_find_stream_info(AVFormatContext *ic); G_END_DECLS diff --git a/ext/ffmpeg/gstffmpegdemux.c b/ext/ffmpeg/gstffmpegdemux.c index d780e45293..c85f9c073f 100644 --- a/ext/ffmpeg/gstffmpegdemux.c +++ b/ext/ffmpeg/gstffmpegdemux.c @@ -1032,7 +1032,7 @@ gst_ffmpegdemux_open (GstFFMpegDemux * demux) if (res < 0) goto open_failed; - res = av_find_stream_info (demux->context); + res = gst_ffmpeg_av_find_stream_info (demux->context); GST_DEBUG_OBJECT (demux, "av_find_stream_info returned %d", res); if (res < 0) goto no_info;