From: YURI FEDOSEEV Date: Fri, 5 May 2023 07:12:46 +0000 (+0800) Subject: v4l2videoenc: support force keyframe event in v4l2 encoder X-Git-Tag: 1.22.7~258 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c8416a3b5ce7d4b3ad91be58c71283af40997731;p=platform%2Fupstream%2Fgstreamer.git v4l2videoenc: support force keyframe event in v4l2 encoder Part-of: --- diff --git a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videoenc.c b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videoenc.c index 1adb720..5c99a97 100644 --- a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videoenc.c +++ b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videoenc.c @@ -817,6 +817,17 @@ gst_v4l2_video_enc_handle_frame (GstVideoEncoder * encoder, } if (frame->input_buffer) { + /* Process force keyframe event if it was passed */ + if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) { + struct v4l2_control ctrl = { V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME, 1 }; + if (self->v4l2output->ioctl (self->v4l2output->video_fd, VIDIOC_S_CTRL, + &ctrl) < 0) + GST_ELEMENT_WARNING (self, RESOURCE, FAILED, + (_("Failed to force keyframe.")), + ("VIDIOC_S_CTRL (V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME) failed: %s (%d)", + g_strerror (errno), errno)); + } + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); GST_LOG_OBJECT (encoder, "Passing buffer with frame number %u", frame->system_frame_number);