PR #23636 opened by ganqiuye
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23636
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23636.patch

WMV3 (Simple/Main profile) bitstreams use V4L2_PIX_FMT_VC1_ANNEX_G, while VC-1 
Advanced Profile uses V4L2_PIX_FMT_VC1_ANNEX_L.
The existing mapping incorrectly associated AV_CODEC_ID_VC1 with VC1_ANNEX_G.

Add wmv3_v4l2m2m_decoder and map WMV3 to VC1_ANNEX_G and VC1 to VC1_ANNEX_L in 
v4l2_fmt.c.

Signed-off-by: ganqiuye <[email protected]>

# Summary of changes

Briefly describe what this PR does and why.

<!--
If this PR requires new FATE test samples, attach them to the PR and
list their target paths below (relative to the fate-suite root).

Attached filenames must match the sample's filename:

```fate-samples
# e.g. vorbis/new-sample.ogg
```
-->



>From 3bbf8f0ab2c6659e290a95c1e36a9ed56d3f7714 Mon Sep 17 00:00:00 2001
From: ganqiuye <[email protected]>
Date: Mon, 29 Jun 2026 15:15:35 +0800
Subject: [PATCH] avcodec/v4l2_m2m: add WMV3 decoder and fix VC1 pixel format
 mapping

WMV3 (Simple/Main profile) bitstreams use V4L2_PIX_FMT_VC1_ANNEX_G, while VC-1 
Advanced Profile uses V4L2_PIX_FMT_VC1_ANNEX_L.
The existing mapping incorrectly associated AV_CODEC_ID_VC1 with VC1_ANNEX_G.

Add wmv3_v4l2m2m_decoder and map WMV3 to VC1_ANNEX_G and VC1 to VC1_ANNEX_L in 
v4l2_fmt.c.

Signed-off-by: ganqiuye <[email protected]>
---
 configure                 | 1 +
 libavcodec/Makefile       | 1 +
 libavcodec/allcodecs.c    | 1 +
 libavcodec/v4l2_fmt.c     | 5 ++++-
 libavcodec/v4l2_m2m_dec.c | 1 +
 5 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/configure b/configure
index 785e23fb16..b46330b22b 100755
--- a/configure
+++ b/configure
@@ -3711,6 +3711,7 @@ vc1_cuvid_decoder_deps="cuvid"
 vc1_mmal_decoder_deps="mmal"
 vc1_qsv_decoder_select="qsvdec"
 vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
+wmv3_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
 vp8_cuvid_decoder_deps="cuvid"
 vp8_mediacodec_decoder_deps="mediacodec"
 vp8_mediacodec_encoder_deps="mediacodec"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 95ba308504..6fe6eb0c9d 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -790,6 +790,7 @@ OBJS-$(CONFIG_VC1_CUVID_DECODER)       += cuviddec.o
 OBJS-$(CONFIG_VC1_MMAL_DECODER)        += mmaldec.o
 OBJS-$(CONFIG_VC1_QSV_DECODER)         += qsvdec.o
 OBJS-$(CONFIG_VC1_V4L2M2M_DECODER)     += v4l2_m2m_dec.o
+OBJS-$(CONFIG_WMV3_V4L2M2M_DECODER)    += v4l2_m2m_dec.o
 OBJS-$(CONFIG_VC2_ENCODER)             += vc2enc.o vc2enc_dwt.o diractab.o
 OBJS-$(CONFIG_VCR1_DECODER)            += vcr1.o
 OBJS-$(CONFIG_VMDAUDIO_DECODER)        += vmdaudio.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 47eded261f..75552f9525 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -395,6 +395,7 @@ extern const FFCodec ff_wmv2_encoder;
 extern const FFCodec ff_wmv2_decoder;
 extern const FFCodec ff_wmv3_decoder;
 extern const FFCodec ff_wmv3image_decoder;
+extern const FFCodec ff_wmv3_v4l2m2m_decoder;
 extern const FFCodec ff_wnv1_decoder;
 extern const FFCodec ff_xan_wc3_decoder;
 extern const FFCodec ff_xan_wc4_decoder;
diff --git a/libavcodec/v4l2_fmt.c b/libavcodec/v4l2_fmt.c
index 6df47e3f5a..d8c1494a0d 100644
--- a/libavcodec/v4l2_fmt.c
+++ b/libavcodec/v4l2_fmt.c
@@ -105,7 +105,10 @@ static const struct fmt_conversion {
     { AV_FMT(NONE),        AV_CODEC(HEVC),        V4L2_FMT(HEVC) },
 #endif
 #ifdef V4L2_PIX_FMT_VC1_ANNEX_G
-    { AV_FMT(NONE),        AV_CODEC(VC1),         V4L2_FMT(VC1_ANNEX_G) },
+    { AV_FMT(NONE),        AV_CODEC(WMV3),        V4L2_FMT(VC1_ANNEX_G) },
+#endif
+#ifdef V4L2_PIX_FMT_VC1_ANNEX_L
+    { AV_FMT(NONE),        AV_CODEC(VC1),         V4L2_FMT(VC1_ANNEX_L) },
 #endif
 };
 
diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c
index ba1fe769e0..cde8135162 100644
--- a/libavcodec/v4l2_m2m_dec.c
+++ b/libavcodec/v4l2_m2m_dec.c
@@ -264,5 +264,6 @@ M2MDEC(mpeg2, "MPEG2", AV_CODEC_ID_MPEG2VIDEO, NULL);
 M2MDEC(mpeg4, "MPEG4", AV_CODEC_ID_MPEG4,      NULL);
 M2MDEC(h263,  "H.263", AV_CODEC_ID_H263,       NULL);
 M2MDEC(vc1 ,  "VC1",   AV_CODEC_ID_VC1,        NULL);
+M2MDEC(wmv3,  "WMV3",  AV_CODEC_ID_WMV3,       NULL);
 M2MDEC(vp8,   "VP8",   AV_CODEC_ID_VP8,        NULL);
 M2MDEC(vp9,   "VP9",   AV_CODEC_ID_VP9,        NULL);
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to