pngenc: mark output frames as I-frames
authorTim-Philipp Müller <tim@centricular.com>
Tue, 24 Oct 2023 17:20:34 +0000 (18:20 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 27 Oct 2023 18:58:29 +0000 (18:58 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5564>

subprojects/gst-plugins-good/ext/libpng/gstpngenc.c

index 3f606ad..2868098 100644 (file)
@@ -87,6 +87,7 @@ static GstFlowReturn gst_pngenc_handle_frame (GstVideoEncoder * encoder,
 static gboolean gst_pngenc_set_format (GstVideoEncoder * encoder,
     GstVideoCodecState * state);
 static gboolean gst_pngenc_flush (GstVideoEncoder * encoder);
+static gboolean gst_pngenc_start (GstVideoEncoder * encoder);
 static gboolean gst_pngenc_propose_allocation (GstVideoEncoder * encoder,
     GstQuery * query);
 
@@ -145,6 +146,7 @@ gst_pngenc_class_init (GstPngEncClass * klass)
   venc_class->handle_frame = gst_pngenc_handle_frame;
   venc_class->propose_allocation = gst_pngenc_propose_allocation;
   venc_class->flush = gst_pngenc_flush;
+  venc_class->start = gst_pngenc_start;
   gobject_class->finalize = gst_pngenc_finalize;
 
   GST_DEBUG_CATEGORY_INIT (pngenc_debug, "pngenc", 0, "PNG image encoder");
@@ -274,6 +276,16 @@ gst_pngenc_flush (GstVideoEncoder * encoder)
   return TRUE;
 }
 
+static gboolean
+gst_pngenc_start (GstVideoEncoder * encoder)
+{
+  GstPngEnc *pngenc = GST_PNGENC (encoder);
+
+  pngenc->frame_count = 0;
+
+  return TRUE;
+}
+
 static GstFlowReturn
 gst_pngenc_handle_frame (GstVideoEncoder * encoder, GstVideoCodecFrame * frame)
 {
@@ -356,6 +368,8 @@ gst_pngenc_handle_frame (GstVideoEncoder * encoder, GstVideoCodecFrame * frame)
 
   pngenc->buffer_out = NULL;
 
+  GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
+
   if ((ret = gst_video_encoder_finish_frame (encoder, frame)) != GST_FLOW_OK)
     goto done;