From 76c82843ccad11666603e3f1f6d9d9a36c780a32 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Wed, 21 Aug 2019 10:39:07 -0700 Subject: [PATCH] avcodec/omx: add support for -force_key_frames MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Aman Gupta Signed-off-by: Martin Storsjö --- libavcodec/omx.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libavcodec/omx.c b/libavcodec/omx.c index a1e5a46a54..8c722b573c 100644 --- a/libavcodec/omx.c +++ b/libavcodec/omx.c @@ -802,6 +802,26 @@ static int omx_encode_frame(AVCodecContext *avctx, AVPacket *pkt, // Convert the timestamps to microseconds; some encoders can ignore // the framerate and do VFR bit allocation based on timestamps. buffer->nTimeStamp = to_omx_ticks(av_rescale_q(frame->pts, avctx->time_base, AV_TIME_BASE_Q)); + if (frame->pict_type == AV_PICTURE_TYPE_I) { +#if CONFIG_OMX_RPI + OMX_CONFIG_BOOLEANTYPE config = {0, }; + INIT_STRUCT(config); + config.bEnabled = OMX_TRUE; + err = OMX_SetConfig(s->handle, OMX_IndexConfigBrcmVideoRequestIFrame, &config); + if (err != OMX_ErrorNone) { + av_log(avctx, AV_LOG_ERROR, "OMX_SetConfig(RequestIFrame) failed: %x\n", err); + } +#else + OMX_CONFIG_INTRAREFRESHVOPTYPE config = {0, }; + INIT_STRUCT(config); + config.nPortIndex = s->out_port; + config.IntraRefreshVOP = OMX_TRUE; + err = OMX_SetConfig(s->handle, OMX_IndexConfigVideoIntraVOPRefresh, &config); + if (err != OMX_ErrorNone) { + av_log(avctx, AV_LOG_ERROR, "OMX_SetConfig(IntraVOPRefresh) failed: %x\n", err); + } +#endif + } err = OMX_EmptyThisBuffer(s->handle, buffer); if (err != OMX_ErrorNone) { append_buffer(&s->input_mutex, &s->input_cond, &s->num_free_in_buffers, s->free_in_buffers, buffer);