summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Liu <leo.liu@amd.com>2015-09-23 12:05:42 -0400
committerLeo Liu <leo.liu@amd.com>2015-09-23 13:41:14 -0400
commit90a062ee91a38bd0a4227b793e4592bbffe6fb48 (patch)
treeeb75397bfaadbc00633f523d0f3291a21f46ca4d
parent6ca9d2dfd2822d2778c7b8359a29ba758ba92ced (diff)
gstomxvideoenc: set the sync point for keyframe
Signed-off-by: Leo Liu <leo.liu@amd.com>
-rw-r--r--omx/gstomxvideoenc.c7
-rw-r--r--omx/gstomxvideoenc.h1
2 files changed, 6 insertions, 2 deletions
diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c
index a6569a8..0c8162e 100644
--- a/omx/gstomxvideoenc.c
+++ b/omx/gstomxvideoenc.c
@@ -882,7 +882,7 @@ gst_omx_video_enc_handle_output_frame (GstOMXVideoEnc * self, GstOMXPort * port,
OMX_TICKS_PER_SECOND);
if ((klass->cdata.hacks & GST_OMX_HACK_SYNCFRAME_FLAG_NOT_USED)
- || (buf->omx_buf->nFlags & OMX_BUFFERFLAG_SYNCFRAME)) {
+ || (buf->omx_buf->nFlags & OMX_BUFFERFLAG_SYNCFRAME) || self->is_keyframe) {
if (frame)
GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
else
@@ -1778,8 +1778,11 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder,
/* do we need to force key frame ? */
if ((self->force_keyframe_period != 0xffffffff) &&
- (self->input_frame_count++ % self->force_keyframe_period == 0))
+ (self->input_frame_count++ % self->force_keyframe_period == 0)) {
+ self->is_keyframe = OMX_TRUE;
gst_omx_video_enc_force_keyframe (self, port);
+ } else
+ self->is_keyframe = OMX_FALSE;
if (port->tunneled) {
gst_video_codec_frame_unref (frame);
diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h
index bb8bff7..d348643 100644
--- a/omx/gstomxvideoenc.h
+++ b/omx/gstomxvideoenc.h
@@ -89,6 +89,7 @@ struct _GstOMXVideoEnc
guint32 force_keyframe_period;
guint64 input_frame_count;
+ gboolean is_keyframe;
GstFlowReturn downstream_flow_ret;
};