From f6c40bb15ceb1583ebfb0542b6c6036b54484396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 24 Oct 2023 18:20:34 +0100 Subject: [PATCH] pngenc: mark output frames as I-frames Part-of: --- .../gst-plugins-good/ext/libpng/gstpngenc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/subprojects/gst-plugins-good/ext/libpng/gstpngenc.c b/subprojects/gst-plugins-good/ext/libpng/gstpngenc.c index 585bc047f7..0020623494 100644 --- a/subprojects/gst-plugins-good/ext/libpng/gstpngenc.c +++ b/subprojects/gst-plugins-good/ext/libpng/gstpngenc.c @@ -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"); @@ -322,6 +324,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) { @@ -421,6 +433,8 @@ gst_pngenc_handle_frame (GstVideoEncoder * encoder, GstVideoCodecFrame * frame) pngenc->output_mem = NULL; frame->output_buffer = outbuf; + GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame); + if ((ret = gst_video_encoder_finish_frame (encoder, frame)) != GST_FLOW_OK) goto done;