* [FFmpeg-devel] [PATCH] WIP: avcodec/libmpeghdec: Add FATE test and use correct timescale (PR #20830)
@ 2025-11-03 14:14 Daniel Stadelmann via ffmpeg-devel
  0 siblings, 0 replies; only message in thread
From: Daniel Stadelmann via ffmpeg-devel @ 2025-11-03 14:14 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Daniel Stadelmann
PR #20830 opened by Daniel Stadelmann (dstadelmann-iis)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20830
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20830.patch
Consists of 2 related changes:
* Fixes the timestamp calculation for input samples to the decoder, as per @mkver's https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20602#issue-1151.
* Adds FATE tests for decoding select streams into different channel layouts
>From a81098d201749bf2b2bc2233688bb822669574ff Mon Sep 17 00:00:00 2001
From: "Stadelmann, Daniel" <daniel.stadelmann@iis.fraunhofer.de>
Date: Mon, 3 Nov 2025 14:27:17 +0100
Subject: [PATCH 1/2] fate/mpegh3da: Add FATE tests for libmpeghdec decoder
Signed-off-by: Stadelmann, Daniel <daniel.stadelmann@iis.fraunhofer.de>
---
 tests/Makefile          |  1 +
 tests/fate/mpegh3da.mak | 42 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 tests/fate/mpegh3da.mak
diff --git a/tests/Makefile b/tests/Makefile
index 3eef290e41..8789e8489f 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -221,6 +221,7 @@ include $(SRC_PATH)/tests/fate/mov.mak
 include $(SRC_PATH)/tests/fate/mp3.mak
 include $(SRC_PATH)/tests/fate/mpc.mak
 include $(SRC_PATH)/tests/fate/mpeg4.mak
+include $(SRC_PATH)/tests/fate/mpegh3da.mak
 include $(SRC_PATH)/tests/fate/mpegps.mak
 include $(SRC_PATH)/tests/fate/mpegts.mak
 include $(SRC_PATH)/tests/fate/mxf.mak
diff --git a/tests/fate/mpegh3da.mak b/tests/fate/mpegh3da.mak
new file mode 100644
index 0000000000..d76c33da1e
--- /dev/null
+++ b/tests/fate/mpegh3da.mak
@@ -0,0 +1,42 @@
+FATE_MPEGH3DA += fate-mpegh3da-decode-2-2
+fate-mpegh3da-decode-2-2: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout stereo -i $(TARGET_SAMPLES)/mpegh3da/mpegh_cicp_02_baseline_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-2-2: REF = $(SAMPLES)/mpegh3da/reference_stereo_to_stereo.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-2-13
+fate-mpegh3da-decode-2-13: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout 22.2 -i $(TARGET_SAMPLES)/mpegh3da/mpegh_cicp_02_baseline_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-2-13: REF = $(SAMPLES)/mpegh3da/reference_stereo_to_22.2.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-2-1
+fate-mpegh3da-decode-2-1: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout mono -i $(TARGET_SAMPLES)/mpegh3da/mpegh_cicp_02_baseline_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-2-1: REF = $(SAMPLES)/mpegh3da/reference_stereo_to_mono.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-13-2
+fate-mpegh3da-decode-13-2: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout stereo -i $(TARGET_SAMPLES)/mpegh3da/mpegh_cicp_13_lc_baseline_compatible_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-13-2: REF = $(SAMPLES)/mpegh3da/reference_22.2_to_stereo.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-13-13
+fate-mpegh3da-decode-13-13: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout 22.2 -i $(TARGET_SAMPLES)/mpegh3da/mpegh_cicp_13_lc_baseline_compatible_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-13-13: REF = $(SAMPLES)/mpegh3da/reference_22.2_to_22.2.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-13-1
+fate-mpegh3da-decode-13-1: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout mono -i $(TARGET_SAMPLES)/mpegh3da/mpegh_cicp_13_lc_baseline_compatible_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-13-1: REF = $(SAMPLES)/mpegh3da/reference_22.2_to_mono.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-change-2
+fate-mpegh3da-decode-change-2: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout stereo -i $(TARGET_SAMPLES)/mpegh3da/mpegh_config_change_cicp_2_14_6_lc_baseline_compatible_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-change-2: REF = $(SAMPLES)/mpegh3da/reference_config_change_to_stereo.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-change-13
+fate-mpegh3da-decode-change-13: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout 22.2 -i $(TARGET_SAMPLES)/mpegh3da/mpegh_config_change_cicp_2_14_6_lc_baseline_compatible_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-change-13: REF = $(SAMPLES)/mpegh3da/reference_config_change_to_22.2.pcm
+
+FATE_MPEGH3DA += fate-mpegh3da-decode-change-1
+fate-mpegh3da-decode-change-1: CMD = ffmpeg -auto_conversion_filters -c:a libmpeghdec -ch_layout mono -i $(TARGET_SAMPLES)/mpegh3da/mpegh_config_change_cicp_2_14_6_lc_baseline_compatible_32kbps.mp4 -f s16le -
+fate-mpegh3da-decode-change-1: REF = $(SAMPLES)/mpegh3da/reference_config_change_to_mono.pcm
+
+$(FATE_MPEGH3DA): CMP = oneoff
+$(FATE_MPEGH3DA): CMP_UNIT = s16
+
+FATE_MPEGH3DA-$(call DEMDEC, MOV, LIBMPEGHDEC) += $(FATE_MPEGH3DA)
+FATE_SAMPLES_FFMPEG += $(FATE_MPEGH3DA-yes)
+fate-mpegh3da: $(FATE_MPEGH3DA-yes)
-- 
2.49.1
>From 7bfa871a10a89144240457e9d9cebbe110d42848 Mon Sep 17 00:00:00 2001
From: "Stadelmann, Daniel" <daniel.stadelmann@iis.fraunhofer.de>
Date: Mon, 3 Nov 2025 14:33:26 +0100
Subject: [PATCH 2/2] avcodec/libmpeghdec: Use correct time base for timestamp
 calculation
Signed-off-by: Stadelmann, Daniel <daniel.stadelmann@iis.fraunhofer.de>
---
 libavcodec/libmpeghdec.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/libavcodec/libmpeghdec.c b/libavcodec/libmpeghdec.c
index ecc3a2dc09..2dc697952c 100644
--- a/libavcodec/libmpeghdec.c
+++ b/libavcodec/libmpeghdec.c
@@ -152,15 +152,10 @@ static int mpegh3dadec_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     MPEGH_DECODER_ERROR err;
     MPEGH_DECODER_OUTPUT_INFO out_info;
 
-    if (!avctx->sample_rate) {
-        av_log(avctx, AV_LOG_ERROR, "Audio sample rate is not set");
-        return AVERROR_INVALIDDATA;
-    }
-
     if (avpkt->data != NULL && avpkt->size > 0) {
-        if ((err = mpeghdecoder_processTimescale(s->decoder, avpkt->data,
-                                                 avpkt->size, avpkt->pts,
-                                                 avctx->sample_rate))) {
+        if ((err = mpeghdecoder_processTimescale(
+                 s->decoder, avpkt->data, avpkt->size,
+                 avpkt->pts * avctx->pkt_timebase.num, avctx->pkt_timebase.den))) {
             av_log(avctx, AV_LOG_ERROR, "mpeghdecoder_process() failed: %x\n",
                    err);
             return AVERROR_INVALIDDATA;
@@ -189,8 +184,7 @@ static int mpegh3dadec_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     frame->nb_samples  = out_info.numSamplesPerChannel;
     frame->sample_rate = avctx->sample_rate = out_info.sampleRate;
     frame->pts = out_info.ticks;
-    frame->time_base.num = 1;
-    frame->time_base.den = out_info.sampleRate;
+    frame->time_base = av_make_q(1, out_info.sampleRate);
 
     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
         return ret;
-- 
2.49.1
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org
^ permalink raw reply	[flat|nested] only message in thread
only message in thread, other threads:[~2025-11-03 14:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-03 14:14 [FFmpeg-devel] [PATCH] WIP: avcodec/libmpeghdec: Add FATE test and use correct timescale (PR #20830) Daniel Stadelmann via ffmpeg-devel
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git