diff options
author | Leo Liu <leo.liu@amd.com> | 2015-09-23 12:05:42 -0400 |
---|---|---|
committer | Leo Liu <leo.liu@amd.com> | 2015-09-23 13:41:14 -0400 |
commit | 90a062ee91a38bd0a4227b793e4592bbffe6fb48 (patch) | |
tree | eb75397bfaadbc00633f523d0f3291a21f46ca4d | |
parent | 6ca9d2dfd2822d2778c7b8359a29ba758ba92ced (diff) |
gstomxvideoenc: set the sync point for keyframe
Signed-off-by: Leo Liu <leo.liu@amd.com>
-rw-r--r-- | omx/gstomxvideoenc.c | 7 | ||||
-rw-r--r-- | omx/gstomxvideoenc.h | 1 |
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; }; |