videoencoder: fix forwarding of GstForceKeyUnit events
authorAndoni Morales Alastruey <ylatuya@gmail.com>
Tue, 27 Aug 2013 13:03:54 +0000 (15:03 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Tue, 27 Aug 2013 13:11:33 +0000 (15:11 +0200)
Use the frame id to match the output forced keyframe with
the event that forced it.

https://bugzilla.gnome.org/show_bug.cgi?id=706885

gst-libs/gst/video/gstvideoencoder.c

index e1365cc..b0a278d 100644 (file)
@@ -174,6 +174,7 @@ struct _ForcedKeyUnitEvent
   gboolean pending;             /* TRUE if this was requested already */
   gboolean all_headers;
   guint count;
+  guint32 frame_id;
 };
 
 static void
@@ -1325,6 +1326,7 @@ gst_video_encoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
     }
 
     if (fevt) {
+      fevt->frame_id = frame->system_frame_number;
       GST_DEBUG_OBJECT (encoder,
           "Forcing a key unit at running time %" GST_TIME_FORMAT,
           GST_TIME_ARGS (running_time));
@@ -1792,6 +1794,12 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder,
       if (!tmp->pending)
         continue;
 
+      /* Exact match using the frame id */
+      if (frame->system_frame_number == tmp->frame_id) {
+        fevt = tmp;
+        break;
+      }
+
       /* Simple case, keyunit ASAP */
       if (tmp->running_time == GST_CLOCK_TIME_NONE) {
         fevt = tmp;