ext/ffmpeg/: Protect calls to ffmpeg functions that will implicitly call avcodec_open...
authorEdward Hervey <bilboed@bilboed.com>
Wed, 9 May 2007 15:30:51 +0000 (15:30 +0000)
committerEdward Hervey <bilboed@bilboed.com>
Wed, 9 May 2007 15:30:51 +0000 (15:30 +0000)
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

ChangeLog
ext/ffmpeg/gstffmpeg.c
ext/ffmpeg/gstffmpeg.h
ext/ffmpeg/gstffmpegdemux.c

index d4cc80a..bb72d98 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),
index 6c74db2..3430847 100644 (file)
@@ -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)
index 50ebc37..e0f1c90 100644 (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_close (AVCodecContext *avctx);
+int gst_ffmpeg_av_find_stream_info(AVFormatContext *ic);
 
 G_END_DECLS
 
index d780e45..c85f9c0 100644 (file)
@@ -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;