* [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