mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
* [ptxdist] [PATCH v3 1/2] ffmpeg: enable filters and swscale
@ 2025-11-28  6:46 Sven Püschel
  2025-11-28  6:46 ` [ptxdist] [PATCH v3 2/2] gst-libav1: fix avvideocompare element Sven Püschel
  0 siblings, 1 reply; 2+ messages in thread
From: Sven Püschel @ 2025-11-28  6:46 UTC (permalink / raw)
  To: ptxdist; +Cc: Sven Püschel

Enable the filters and swscale, as they are required by the GStreamer
avvideocompare element. This uses the ssim or psnr filter to compare
two video inputs. Internally this also expects swscale to be available
to potentially scale the inputs to the same size.

The change increases the libavfilter.so file size from 148.0K to 4.3M
and adds the libswscale shared library with a size of 340K.
The remaining shared libraries from libav keep their size.

Signed-off-by: Sven Püschel <s.pueschel@pengutronix.de>
---
Changes in v3: also install libswscale
Changes in v2: none
---
 rules/ffmpeg.make | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/rules/ffmpeg.make b/rules/ffmpeg.make
index 3f177021b..37326779b 100644
--- a/rules/ffmpeg.make
+++ b/rules/ffmpeg.make
@@ -75,7 +75,7 @@ FFMPEG_CONF_OPT		:= \
 	--enable-avcodec \
 	--enable-avformat \
 	--enable-swresample \
-	--disable-swscale \
+	--enable-swscale \
 	--enable-avfilter \
 	\
 	--enable-pthreads \
@@ -98,7 +98,7 @@ FFMPEG_CONF_OPT		:= \
 	--disable-indevs \
 	--disable-outdevs \
 	--disable-devices \
-	--disable-filters \
+	--enable-filters \
 	\
 	--disable-alsa \
 	--disable-appkit \
@@ -285,6 +285,7 @@ $(STATEDIR)/ffmpeg.targetinstall:
 	@$(call install_lib, ffmpeg, 0, 0, 0644, libavformat)
 	@$(call install_lib, ffmpeg, 0, 0, 0644, libavutil)
 	@$(call install_lib, ffmpeg, 0, 0, 0644, libswresample)
+	@$(call install_lib, ffmpeg, 0, 0, 0644, libswscale)
 
 	@$(call install_finish, ffmpeg)
 
-- 
2.47.3




^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ptxdist] [PATCH v3 2/2] gst-libav1: fix avvideocompare element
  2025-11-28  6:46 [ptxdist] [PATCH v3 1/2] ffmpeg: enable filters and swscale Sven Püschel
@ 2025-11-28  6:46 ` Sven Püschel
  0 siblings, 0 replies; 2+ messages in thread
From: Sven Püschel @ 2025-11-28  6:46 UTC (permalink / raw)
  To: ptxdist; +Cc: Sven Püschel

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 <s.pueschel@pengutronix.de>
---
Changes in v3: none
Changes in v2: fixed patch directory version from 1.26.0 -> 1.26.7
---
 ...-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?= <s.pueschel@pengutronix.de>
+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 <s.pueschel@pengutronix.de>
+---
+ 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




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-11-28  6:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-28  6:46 [ptxdist] [PATCH v3 1/2] ffmpeg: enable filters and swscale Sven Püschel
2025-11-28  6:46 ` [ptxdist] [PATCH v3 2/2] gst-libav1: fix avvideocompare element Sven Püschel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox