Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Daniel Stadelmann via ffmpeg-devel <ffmpeg-devel@ffmpeg.org>
To: ffmpeg-devel@ffmpeg.org
Cc: Daniel Stadelmann <code@ffmpeg.org>
Subject: [FFmpeg-devel] [PATCH] WIP: avcodec/libmpeghdec: Add FATE test and use correct timescale (PR #20830)
Date: Mon, 03 Nov 2025 14:14:08 -0000
Message-ID: <176217924895.25.11756083379690107411@2cb04c0e5124> (raw)

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

                 reply	other threads:[~2025-11-03 14:14 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=176217924895.25.11756083379690107411@2cb04c0e5124 \
    --to=ffmpeg-devel@ffmpeg.org \
    --cc=code@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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