baseaudioencoder: simplify latency variable handling
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Thu, 10 Mar 2011 14:12:19 +0000 (15:12 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 27 Aug 2011 13:46:59 +0000 (14:46 +0100)
gst-libs/gst/audio/gstbaseaudioencoder.c
gst-libs/gst/audio/gstbaseaudioencoder.h

index 7426c65..87225d9 100644 (file)
@@ -208,9 +208,6 @@ struct _GstBaseAudioEncoderPrivate
   /* subclass currently being forcibly drained */
   gboolean force;
 
-  /* MT safe latency; taken from ctx */
-  GstClockTime min_latency;
-  GstClockTime max_latency;
   /* output bps estimatation */
   /* global in samples seen */
   guint64 samples_in;
@@ -971,23 +968,25 @@ gst_base_audio_encoder_sink_setcaps (GstPad * pad, GstCaps * caps)
     enc->ctx->lookahead = 0;
 
     /* element might report latency */
+    GST_OBJECT_LOCK (enc);
     old_min_latency = ctx->min_latency;
     old_max_latency = ctx->max_latency;
+    GST_OBJECT_UNLOCK (enc);
 
     if (klass->set_format)
       res = klass->set_format (enc, state);
 
     /* notify if new latency */
+    GST_OBJECT_LOCK (enc);
     if ((ctx->min_latency > 0 && ctx->min_latency != old_min_latency) ||
         (ctx->max_latency > 0 && ctx->max_latency != old_max_latency)) {
+      GST_OBJECT_UNLOCK (enc);
       /* post latency message on the bus */
       gst_element_post_message (GST_ELEMENT (enc),
           gst_message_new_latency (GST_OBJECT (enc)));
       GST_OBJECT_LOCK (enc);
-      enc->priv->min_latency = ctx->min_latency;
-      enc->priv->max_latency = ctx->max_latency;
-      GST_OBJECT_UNLOCK (enc);
     }
+    GST_OBJECT_UNLOCK (enc);
   } else {
     GST_DEBUG_OBJECT (enc, "new audio format identical to configured format");
   }
@@ -1460,9 +1459,9 @@ gst_base_audio_encoder_src_query (GstPad * pad, GstQuery * query)
         GST_OBJECT_LOCK (enc);
         /* add our latency */
         if (min_latency != -1)
-          min_latency += enc->priv->min_latency;
+          min_latency += enc->ctx->min_latency;
         if (max_latency != -1)
-          max_latency += enc->priv->max_latency;
+          max_latency += enc->ctx->max_latency;
         GST_OBJECT_UNLOCK (enc);
 
         gst_query_set_latency (query, live, min_latency, max_latency);
index 9b39ff6..a23a1b3 100644 (file)
@@ -117,7 +117,8 @@ typedef struct _GstAudioState {
  *   or will be handed all available if 0.
  * @frame_max: max number of frames of size @frame_bytes accepted at once
  *  (assumed minimally 1)
- * @latency: latency of element; should only be changed during configure
+ * @min_latency: min latency of element
+ * @max_latency: max latency of element
  * @lookahead: encoder lookahead (in units of input rate samples)
  *
  * Transparent #GstBaseAudioEncoderContext data structure.
@@ -129,9 +130,10 @@ struct _GstBaseAudioEncoderContext {
   /* output */
   gint  frame_samples;
   gint  frame_max;
+  gint  lookahead;
+  /* MT-protected (with LOCK) */
   GstClockTime min_latency;
   GstClockTime max_latency;
-  gint  lookahead;
 };
 
 /**