From 688505de8843db95b3bdeff4d7c09bb4755f53a2 Mon Sep 17 00:00:00 2001 From: Andoni Morales Alastruey Date: Tue, 27 Aug 2013 15:03:54 +0200 Subject: [PATCH] videoencoder: fix forwarding of GstForceKeyUnit events 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 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index e1365ccf73..b0a278d8bb 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -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;