ext/ffmpeg/: Protect calls to ffmpeg functions that will implicitly call avcodec_open/close with the avcodec mutex.

Original commit message from CVS:
* 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
This commit is contained in:
Edward Hervey 2007-05-09 15:30:51 +00:00
parent 0fcacdde8c
commit cc9a75adcb
4 changed files with 22 additions and 1 deletions

View file

@ -1,3 +1,12 @@
2007-05-09 Edward Hervey <edward@fluendo.com>
* 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 <edward@fluendo.com> 2007-05-02 Edward Hervey <edward@fluendo.com>
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init), * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),

View file

@ -63,6 +63,17 @@ gst_ffmpeg_avcodec_close (AVCodecContext *avctx) {
return ret; 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 #ifndef GST_DISABLE_GST_DEBUG
static void static void
gst_ffmpeg_log_callback (void * ptr, int level, const char * fmt, va_list vl) gst_ffmpeg_log_callback (void * ptr, int level, const char * fmt, va_list vl)

View file

@ -53,6 +53,7 @@ extern gboolean gst_ffmpegdeinterlace_register (GstPlugin * plugin);
int gst_ffmpeg_avcodec_open (AVCodecContext *avctx, AVCodec *codec); int gst_ffmpeg_avcodec_open (AVCodecContext *avctx, AVCodec *codec);
int gst_ffmpeg_avcodec_close (AVCodecContext *avctx); int gst_ffmpeg_avcodec_close (AVCodecContext *avctx);
int gst_ffmpeg_av_find_stream_info(AVFormatContext *ic);
G_END_DECLS G_END_DECLS

View file

@ -1032,7 +1032,7 @@ gst_ffmpegdemux_open (GstFFMpegDemux * demux)
if (res < 0) if (res < 0)
goto open_failed; 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); GST_DEBUG_OBJECT (demux, "av_find_stream_info returned %d", res);
if (res < 0) if (res < 0)
goto no_info; goto no_info;