From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Thu, 27 Nov 2025 12:10:31 +0100 Received: from metis.whiteo.stw.pengutronix.de ([2a0a:edc0:2:b01:1d::104]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOZtP-005PGt-2c for lore@lore.pengutronix.de; Thu, 27 Nov 2025 12:10:31 +0100 Received: from localhost ([127.0.0.1] helo=metis.whiteo.stw.pengutronix.de) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1vOZtP-00081v-Ln; Thu, 27 Nov 2025 12:10:31 +0100 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1vOZtK-00081a-Nl; Thu, 27 Nov 2025 12:10:26 +0100 Received: from dude05.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::54]) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOZtK-002mAn-1l; Thu, 27 Nov 2025 12:10:26 +0100 Received: from mol by dude05.red.stw.pengutronix.de with local (Exim 4.98.2) (envelope-from ) id 1vOZtK-000000026DD-24Zb; Thu, 27 Nov 2025 12:10:26 +0100 Date: Thu, 27 Nov 2025 12:10:26 +0100 From: Michael Olbrich To: Sven =?utf-8?Q?P=C3=BCschel?= Message-ID: References: <20251121085127.3761419-1-s.pueschel@pengutronix.de> <20251121085127.3761419-2-s.pueschel@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20251121085127.3761419-2-s.pueschel@pengutronix.de> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain Subject: Re: [ptxdist] [PATCH v2 2/2] gst-libav1: fix avvideocompare element X-BeenThere: ptxdist@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Cc: ptxdist@pengutronix.de Sender: "ptxdist" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: ptxdist-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false On Fri, Nov 21, 2025 at 09:50:56AM +0100, Sven Püschel wrote: > With the update to FFmpeg 8.0 the avvideocompare element from GStreamer > doesn't emit statistics anymore. Add a patch to fix the underlying > issue of missing colorimetry information. > > Fixes: 254f9c65f4dd ("ffmpeg: version bump 7.1.1 -> 8.0") > Signed-off-by: Sven Püschel > --- For future patches: Please add a changelog here when doing a v2. Michael > ...-avvidcmp-set-colorimetry-on-AVFrame.patch | 75 +++++++++++++++++++ > patches/gst-libav-1.26.7/series | 4 + > 2 files changed, 79 insertions(+) > create mode 100644 patches/gst-libav-1.26.7/0001-gst-libav-avvidcmp-set-colorimetry-on-AVFrame.patch > create mode 100644 patches/gst-libav-1.26.7/series > > diff --git a/patches/gst-libav-1.26.7/0001-gst-libav-avvidcmp-set-colorimetry-on-AVFrame.patch b/patches/gst-libav-1.26.7/0001-gst-libav-avvidcmp-set-colorimetry-on-AVFrame.patch > new file mode 100644 > index 000000000..1a499537d > --- /dev/null > +++ b/patches/gst-libav-1.26.7/0001-gst-libav-avvidcmp-set-colorimetry-on-AVFrame.patch > @@ -0,0 +1,75 @@ > +From: =?UTF-8?q?Sven=20P=C3=BCschel?= > +Date: Fri, 14 Nov 2025 10:50:51 +0100 > +Subject: [PATCH] gst-libav: avvidcmp: set colorimetry on AVFrame > +MIME-Version: 1.0 > +Content-Type: text/plain; charset=UTF-8 > +Content-Transfer-Encoding: 8bit > + > +Set the colorimetry on AVFrame based on the GstVideoFrame values. > +This properly maps potential colorimetry information to libav. > + > +Furthermore this fixes the avvideocompare element when used with > +FFmpeg 8.0. When comparing video frames FFmpeg also uses the scale > +filter. This has been reworked to use a new API [1], which checks > +that the color primaries and transfer characteristics are not set > +to RESERVED, which is the default 0 value. This causes the ff_test_fmt > +function to fail which in turn causes the avvideocompare element to fail. > + > +The implementation is copied from gst_ffmpeg_videoinfo_to_context, but > +the color range has been adopted to also map the unknown range to > +unspecified, similar to how gst_ffmpeg_videoinfo_to_context maps > +AVCOL_RANGE_UNSPECIFIED to GST_VIDEO_COLOR_RANGE_UNKNOWN. > + > +This was tested with FFmpeg 8.0 and the following sample pipeline: > + > + gst-launch-1.0 videotestsrc num-buffers=100 \ > + ! video/x-raw,format=NV12 \ > + ! videobalance brightness=0.005 hue=0.005 \ > + ! avvideocompare method=psnr stats-file=- name=cmp \ > + ! fakesink videotestsrc ! video/x-raw,format=NV12 \ > + ! cmp. > + > +Without the patch it doesn't generate any stats output and when called > +with GST_DEBUG=3 it shows the following errors for each frame: > + > + Unsupported input (Operation not supported): > + fmt:nv12 csp:gbr prim:reserved trc:reserved -> fmt:yuv420p csp:unknown prim:reserved trc:reserved > + > +[1] https://github.com/FFmpeg/FFmpeg/commit/04ce01df0bb2d66e143bcfcea439afc2a1b8d96e > + > +Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10090] > +Signed-off-by: Sven Püschel > +--- > + ext/libav/gstavvidcmp.c | 19 +++++++++++++++++++ > + 1 file changed, 19 insertions(+) > + > +diff --git a/ext/libav/gstavvidcmp.c b/ext/libav/gstavvidcmp.c > +index 9fab0238935e..a5375e081a48 100644 > +--- a/ext/libav/gstavvidcmp.c > ++++ b/ext/libav/gstavvidcmp.c > +@@ -619,6 +619,25 @@ _fill_avpicture (GstFFMpegVidCmp * self, AVFrame * picture, > + picture->width = GST_VIDEO_FRAME_WIDTH (vframe); > + picture->height = GST_VIDEO_FRAME_HEIGHT (vframe); > + picture->format = self->pixfmt; > ++ > ++ picture->color_primaries = > ++ gst_video_color_primaries_to_iso (vframe->info.colorimetry.primaries); > ++ picture->color_trc = > ++ gst_video_transfer_function_to_iso (vframe->info.colorimetry.transfer); > ++ picture->colorspace = > ++ gst_video_color_matrix_to_iso (vframe->info.colorimetry.matrix); > ++ > ++ switch (vframe->info.colorimetry.range) { > ++ case GST_VIDEO_COLOR_RANGE_0_255: > ++ picture->color_range = AVCOL_RANGE_JPEG; > ++ break; > ++ case GST_VIDEO_COLOR_RANGE_16_235: > ++ picture->color_range = AVCOL_RANGE_MPEG; > ++ break; > ++ case GST_VIDEO_COLOR_RANGE_UNKNOWN: > ++ picture->color_range = AVCOL_RANGE_UNSPECIFIED; > ++ break; > ++ } > + } > + > + static GstFlowReturn > diff --git a/patches/gst-libav-1.26.7/series b/patches/gst-libav-1.26.7/series > new file mode 100644 > index 000000000..93a96c141 > --- /dev/null > +++ b/patches/gst-libav-1.26.7/series > @@ -0,0 +1,4 @@ > +# generated by git-ptx-patches > +#tag:base --start-number 1 > +0001-gst-libav-avvidcmp-set-colorimetry-on-AVFrame.patch > +# 4a2c6890c0534fedb7f6c1a8e71acbd7 - git-ptx-patches magic > -- > 2.47.3 > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |