ffmpegdec: Only restore default in AVCodecContext when needed.
authorEdward Hervey <bilboed@bilboed.com>
Mon, 9 Nov 2009 18:19:25 +0000 (19:19 +0100)
committerEdward Hervey <bilboed@bilboed.com>
Mon, 9 Nov 2009 18:21:35 +0000 (19:21 +0100)
Resetting default values is currently very complex in libavcodec, so
we only call it when needed (i.e. when a context was previously used).

Shaves off 10% of the setup of a decoder.

ext/ffmpeg/gstffmpegdec.c

index a294e18..b23c6c2 100644 (file)
@@ -714,11 +714,11 @@ gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps)
     GST_OBJECT_UNLOCK (ffmpegdec);
     gst_ffmpegdec_drain (ffmpegdec);
     GST_OBJECT_LOCK (ffmpegdec);
-  }
-  gst_ffmpegdec_close (ffmpegdec);
+    gst_ffmpegdec_close (ffmpegdec);
 
-  /* set defaults */
-  avcodec_get_context_defaults (ffmpegdec->context);
+    /* and reset the defaults that were set when a context is created */
+    avcodec_get_context_defaults (ffmpegdec->context);
+  }
 
   /* set buffer functions */
   ffmpegdec->context->get_buffer = gst_ffmpegdec_get_buffer;