]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gst-plugins-ugly0-10.git/commitdiff
x264enc: Re-send the received upstream event as-is downstream
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>
Sat, 9 Jan 2010 01:51:56 +0000 (20:51 -0500)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Mon, 10 May 2010 13:07:29 +0000 (15:07 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=606689

ext/x264/gstx264enc.c
ext/x264/gstx264enc.h

index 36284f9d93d04cf5c44ecc92398a1ae5a49279c4..9129aae174aec2cb7ae3db0394e4c9cbbfdf19a8 100644 (file)
@@ -517,7 +517,9 @@ gst_x264_enc_reset (GstX264Enc * encoder)
 
   GST_OBJECT_LOCK (encoder);
   encoder->i_type = X264_TYPE_AUTO;
-  encoder->send_forcekeyunit = FALSE;
+  if (encoder->forcekeyunit_event)
+    gst_event_unref (encoder->forcekeyunit_event);
+  encoder->forcekeyunit_event = NULL;
   GST_OBJECT_UNLOCK (encoder);
 }
 
@@ -925,7 +927,9 @@ gst_x264_enc_src_event (GstPad * pad, GstEvent * event)
         /* Set I frame request */
         GST_OBJECT_LOCK (encoder);
         encoder->i_type = X264_TYPE_I;
-        encoder->send_forcekeyunit = TRUE;
+        encoder->forcekeyunit_event = gst_event_copy (event);
+        GST_EVENT_TYPE (encoder->forcekeyunit_event) =
+            GST_EVENT_CUSTOM_DOWNSTREAM;
         GST_OBJECT_UNLOCK (encoder);
         forward = FALSE;
         gst_event_unref (event);
@@ -1057,7 +1061,7 @@ gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
   GstClockTime timestamp;
   GstClockTime duration;
   guint8 *data;
-  gboolean send_forcekeyunit;
+  GstEvent *forcekeyunit_event = NULL;
 
   if (G_UNLIKELY (encoder->x264enc == NULL))
     return GST_FLOW_NOT_NEGOTIATED;
@@ -1137,15 +1141,14 @@ gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
   }
 
   GST_OBJECT_LOCK (encoder);
-  send_forcekeyunit = encoder->send_forcekeyunit;
-  encoder->send_forcekeyunit = FALSE;
+  forcekeyunit_event = encoder->forcekeyunit_event;
+  encoder->forcekeyunit_event = NULL;
   GST_OBJECT_UNLOCK (encoder);
-  if (send_forcekeyunit)
-    gst_pad_push_event (encoder->srcpad,
-        gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
-            gst_structure_new ("GstForceKeyUnit",
-                "timestamp", G_TYPE_UINT64, GST_BUFFER_TIMESTAMP (out_buf),
-                NULL)));
+  if (forcekeyunit_event) {
+    gst_structure_set (forcekeyunit_event->structure,
+        "timestamp", G_TYPE_UINT64, GST_BUFFER_TIMESTAMP (out_buf), NULL);
+    gst_pad_push_event (encoder->srcpad, forcekeyunit_event);
+  }
 
   return gst_pad_push (encoder->srcpad, out_buf);
 }
index ad042876732ea63136362887afdb21f7a1f863cc..340067a18ba84f987523c79e2387bf8d84530542 100644 (file)
@@ -99,7 +99,7 @@ struct _GstX264Enc
   gulong buffer_size;
 
   gint i_type;
-  gboolean send_forcekeyunit;
+  GstEvent *forcekeyunit_event;
 };
 
 struct _GstX264EncClass