This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit fda85d16e0800726d514c93addf655437c4f8256 Author: Romain Beauxis <[email protected]> AuthorDate: Wed Sep 16 15:02:03 2026 -0500 Commit: James Almer <[email protected]> CommitDate: Sat Sep 19 13:40:52 2026 +0000 avcodec/mpegaudiodecheader: add avpriv_mpegaudio_decode_header2() MPADecodeHeader is allocated by callers in other libraries, on the stack among other places, so fields cannot be added to it. Add MPADecodeHeader2, which holds every field of the header and which libavcodec itself allocates, along with a packer turning it back into header bits. A test program walks the frames of a file, checks that every header encodes back to its original bits and prints the header fields. --- libavcodec/Makefile | 1 + libavcodec/mpegaudiodecheader.c | 64 +++++++++++-- libavcodec/mpegaudiodecheader.h | 62 ++++++++++++ libavcodec/tests/.gitignore | 1 + libavcodec/tests/mpegaudiodecheader.c | 127 +++++++++++++++++++++++++ libavcodec/version.h | 2 +- tests/fate/mp3.mak | 38 ++++++++ tests/ref/fate/mpegaudiodecheader-bitrates | 15 +++ tests/ref/fate/mpegaudiodecheader-hecommon | 10 ++ tests/ref/fate/mpegaudiodecheader-joint-stereo | 2 + tests/ref/fate/mpegaudiodecheader-libmp3lame | 3 + tests/ref/fate/mpegaudiodecheader-mp2 | 2 + tests/ref/fate/mpegaudiodecheader-mp3-remux | 3 + tests/ref/fate/mpegaudiodecheader-mpeg25 | 3 + tests/ref/fate/mpegaudiodecheader-xing | 3 + 15 files changed, 328 insertions(+), 8 deletions(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index a5c71995ea..e2c60e9051 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -1393,6 +1393,7 @@ TESTPROGS-$(CONFIG_GOLOMB) += golomb TESTPROGS-$(CONFIG_IDCTDSP) += dct TESTPROGS-$(CONFIG_DXV_ENCODER) += hashtable TESTPROGS-$(CONFIG_MJPEG_ENCODER) += mjpegenc_huffman +TESTPROGS-$(CONFIG_MPEGAUDIOHEADER) += mpegaudiodecheader TESTPROGS-$(CONFIG_MPEGVIDEO) += mpeg12framerate TESTPROGS-$(CONFIG_H264_METADATA_BSF) += h264_levels TESTPROGS-$(CONFIG_HEVC_METADATA_BSF) += h265_levels diff --git a/libavcodec/mpegaudiodecheader.c b/libavcodec/mpegaudiodecheader.c index ef63befbf4..b8bf0ae530 100644 --- a/libavcodec/mpegaudiodecheader.c +++ b/libavcodec/mpegaudiodecheader.c @@ -24,14 +24,16 @@ * MPEG Audio header decoder. */ +#include "libavutil/error.h" #include "libavutil/macros.h" +#include "libavutil/mem.h" #include "mpegaudio.h" #include "mpegaudiodata.h" #include "mpegaudiodecheader.h" -int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header) +int ff_mpegaudio_decode_header(MPADecodeHeader2 *s, uint32_t header) { int sample_rate, frame_size, mpeg25, padding; int sample_rate_index, bitrate_index; @@ -62,12 +64,14 @@ int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header) bitrate_index = (header >> 12) & 0xf; padding = (header >> 9) & 1; - //extension = (header >> 8) & 1; + s->bitrate_index = bitrate_index; + s->padding = padding; + s->private_bit = (header >> 8) & 1; s->mode = (header >> 6) & 3; s->mode_ext = (header >> 4) & 3; - //copyright = (header >> 3) & 1; - //original = (header >> 2) & 1; - //emphasis = header & 3; + s->copyright = (header >> 3) & 1; + s->original = (header >> 2) & 1; + s->emphasis = header & 3; if (s->mode == MPA_MONO) s->nb_channels = 1; @@ -117,11 +121,57 @@ int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header) return 0; } +int avpriv_mpegaudio_decode_header2(MPADecodeHeader2 **phdr, uint32_t header) +{ + MPADecodeHeader2 *hdr = *phdr; + int ret; + + if (!hdr) { + ret = ff_mpa_check_header(header); + if (ret < 0) + return ret; + hdr = av_mallocz(sizeof(*hdr)); + if (!hdr) + return AVERROR(ENOMEM); + } + + ret = ff_mpegaudio_decode_header(hdr, header); + if (ret < 0) + return ret; + + *phdr = hdr; + return ret; +} + +int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header) +{ + MPADecodeHeader2 hdr = { 0 }; + int ret = ff_mpegaudio_decode_header(&hdr, header); + + if (ret < 0) + return ret; + + /* callers in other libraries allocate the smaller structure, so only + its fields may be written */ + s->frame_size = hdr.frame_size; + s->error_protection = hdr.error_protection; + s->layer = hdr.layer; + s->sample_rate = hdr.sample_rate; + s->sample_rate_index = hdr.sample_rate_index; + s->bit_rate = hdr.bit_rate; + s->nb_channels = hdr.nb_channels; + s->mode = hdr.mode; + s->mode_ext = hdr.mode_ext; + s->lsf = hdr.lsf; + + return ret; +} + int ff_mpa_decode_header(uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate, enum AVCodecID *codec_id) { - MPADecodeHeader s1, *s = &s1; + MPADecodeHeader2 s1, *s = &s1; - if (avpriv_mpegaudio_decode_header(s, head) != 0) { + if (ff_mpegaudio_decode_header(s, head) != 0) { return -1; } diff --git a/libavcodec/mpegaudiodecheader.h b/libavcodec/mpegaudiodecheader.h index ed5d1f3b33..f45dfbdc8f 100644 --- a/libavcodec/mpegaudiodecheader.h +++ b/libavcodec/mpegaudiodecheader.h @@ -28,7 +28,11 @@ #define AVCODEC_MPEGAUDIODECHEADER_H #include <stdint.h> + +#include "libavutil/attributes.h" + #include "codec_id.h" +#include "version_major.h" #define MP3_MASK 0xFFFE0CCF @@ -48,11 +52,50 @@ typedef struct MPADecodeHeader { MPA_DECODE_HEADER } MPADecodeHeader; +/** + * Same as MPADecodeHeader, plus the header fields that carry no decoding + * information. Its size is not part of the libavcodec ABI: it is only ever + * allocated by avpriv_mpegaudio_decode_header2(). + */ +typedef struct MPADecodeHeader2 { + int frame_size; + int error_protection; + int layer; + int sample_rate; + int sample_rate_index; /* between 0 and 8 */ + int bit_rate; + int nb_channels; + int mode; + int mode_ext; + int lsf; + int copyright; + int original; + int emphasis; + int bitrate_index; + int padding; + int private_bit; +} MPADecodeHeader2; + /* header decoding. MUST check the header before because no consistency check is done there. Return 1 if free format found and that the frame size must be computed externally */ int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header); +/** + * Decode an MPEG audio header into *phdr, which is allocated if it is NULL. + * + * The header must have been checked beforehand, as no consistency check is + * done here. + * + * @return 1 if free format was found and the frame size must be computed + * externally, 0 on success, a negative AVERROR code on failure + */ +int avpriv_mpegaudio_decode_header2(MPADecodeHeader2 **phdr, uint32_t header); + +/* same as avpriv_mpegaudio_decode_header2(), for callers within libavcodec, + which are built against this very header and may allocate it themselves */ +int ff_mpegaudio_decode_header(MPADecodeHeader2 *s, uint32_t header); + /* useful helper to get MPEG audio stream info. Return -1 if error in header, otherwise the coded frame size in bytes */ int ff_mpa_decode_header(uint32_t head, int *sample_rate, @@ -78,4 +121,23 @@ static inline int ff_mpa_check_header(uint32_t header){ return 0; } +static inline uint32_t ff_mpa_encode_header(const MPADecodeHeader2 *s) +{ + int version = s->sample_rate_index < 6 ? 3 - s->sample_rate_index / 3 : 0; + + return 0xffeU << 20 | + version << 19 | + (4 - s->layer) << 17 | + !s->error_protection << 16 | + s->bitrate_index << 12 | + s->sample_rate_index % 3 << 10 | + s->padding << 9 | + s->private_bit << 8 | + s->mode << 6 | + s->mode_ext << 4 | + s->copyright << 3 | + s->original << 2 | + s->emphasis; +} + #endif /* AVCODEC_MPEGAUDIODECHEADER_H */ diff --git a/libavcodec/tests/.gitignore b/libavcodec/tests/.gitignore index 4977c63e00..8e4f26c2ad 100644 --- a/libavcodec/tests/.gitignore +++ b/libavcodec/tests/.gitignore @@ -18,5 +18,6 @@ /mathops /mjpegenc_huffman /mpeg12framerate +/mpegaudiodecheader /rangecoder /snowenc diff --git a/libavcodec/tests/mpegaudiodecheader.c b/libavcodec/tests/mpegaudiodecheader.c new file mode 100644 index 0000000000..fe718cc855 --- /dev/null +++ b/libavcodec/tests/mpegaudiodecheader.c @@ -0,0 +1,127 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * Walks the MPEG audio frames of a file, checks that every frame header + * encodes back to its original bits, and prints each distinct header. + */ + +#include <inttypes.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> + +#include "libavutil/file.h" +#include "libavutil/mem.h" +#include "libavutil/intreadwrite.h" + +#include "libavcodec/mpegaudiodecheader.h" + +#define PADDING_BIT (1U << 9) + +static size_t id3v2_size(const uint8_t *buf, size_t size) +{ + if (size < 10 || memcmp(buf, "ID3", 3)) + return 0; + + return 10 + (buf[5] & 0x10 ? 10 : 0) + + ((buf[6] & 0x7f) << 21 | (buf[7] & 0x7f) << 14 | + (buf[8] & 0x7f) << 7 | (buf[9] & 0x7f)); +} + +static void print_header(size_t offset, unsigned frames, uint32_t bits, + const MPADecodeHeader2 *header) +{ + printf("offset=%zu frames=%u header=%08"PRIX32" layer=%d sample_rate=%d " + "bit_rate=%d crc=%d mode=%d mode_ext=%d copyright=%d original=%d " + "emphasis=%d private_bit=%d\n", + offset, frames, bits, header->layer, header->sample_rate, + header->bit_rate, header->error_protection, header->mode, + header->mode_ext, header->copyright, header->original, + header->emphasis, header->private_bit); +} + +int main(int argc, char *argv[]) +{ + MPADecodeHeader2 run_header, *header = NULL; + uint8_t *buf; + size_t size, pos, run_offset = 0; + uint32_t run_bits = 0; + unsigned run_frames = 0, total_frames = 0; + int ret = 1; + + if (argc != 2) { + fprintf(stderr, "Usage: %s <file>\n", argv[0]); + return 1; + } + + if (av_file_map(argv[1], &buf, &size, 0, NULL) < 0) { + fprintf(stderr, "Failed to open '%s'\n", argv[1]); + return 1; + } + + pos = id3v2_size(buf, size); + while (pos + 4 <= size) { + uint32_t bits = AV_RB32(buf + pos); + uint32_t encoded; + int decoded; + + if (ff_mpa_check_header(bits) < 0) { + pos++; + continue; + } + + if (header) + memset(header, 0, sizeof(*header)); + + decoded = avpriv_mpegaudio_decode_header2(&header, bits); + if (decoded < 0) + goto end; + + encoded = ff_mpa_encode_header(header); + if (encoded != bits) { + printf("offset=%zu header=%08"PRIX32" encoded back as %08"PRIX32"\n", + pos, bits, encoded); + goto end; + } + + if (run_frames && (bits & ~PADDING_BIT) != (run_bits & ~PADDING_BIT)) { + print_header(run_offset, run_frames, run_bits, &run_header); + run_frames = 0; + } + if (!run_frames) { + run_offset = pos; + run_bits = bits; + run_header = *header; + } + run_frames++; + total_frames++; + + pos += decoded == 0 ? header->frame_size : 1; + } + if (run_frames) + print_header(run_offset, run_frames, run_bits, &run_header); + + printf("frames=%u\n", total_frames); + ret = !total_frames; + +end: + av_freep(&header); + av_file_unmap(buf, size); + return ret; +} diff --git a/libavcodec/version.h b/libavcodec/version.h index 755c90bbc1..7531c6c42a 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 13 +#define LIBAVCODEC_VERSION_MINOR 14 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/tests/fate/mp3.mak b/tests/fate/mp3.mak index 145ce72a6e..edce1f98e6 100644 --- a/tests/fate/mp3.mak +++ b/tests/fate/mp3.mak @@ -40,3 +40,41 @@ FATE_MP3-$(call DEMDEC, MP3, MP3FLOAT, ARESAMPLE_FILTER PIPE_PROTOCOL) += $(FATE FATE_SAMPLES_AVCONV += $(FATE_MP3-yes) fate-mp3: $(FATE_MP3-yes) + +MPA_HEADER_TESTBIN = libavcodec/tests/mpegaudiodecheader$(EXESUF) + +FATE_MPA_HEADER-$(CONFIG_MPEGAUDIOHEADER) += fate-mpegaudiodecheader-hecommon +fate-mpegaudiodecheader-hecommon: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-hecommon: CMD = run "$(MPA_HEADER_TESTBIN)" "$(TARGET_SAMPLES)/mp3-conformance/hecommon.bit" + +FATE_MPA_HEADER-$(CONFIG_MPEGAUDIOHEADER) += fate-mpegaudiodecheader-bitrates +fate-mpegaudiodecheader-bitrates: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-bitrates: CMD = run "$(MPA_HEADER_TESTBIN)" "$(TARGET_SAMPLES)/mp3-conformance/he_32khz.bit" + +FATE_MPA_HEADER-$(CONFIG_MPEGAUDIOHEADER) += fate-mpegaudiodecheader-mpeg25 +fate-mpegaudiodecheader-mpeg25: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-mpeg25: CMD = run "$(MPA_HEADER_TESTBIN)" "$(TARGET_SAMPLES)/id3v2/lang_xxx.mp3" + +FATE_MPA_HEADER-$(CONFIG_MPEGAUDIOHEADER) += fate-mpegaudiodecheader-joint-stereo +fate-mpegaudiodecheader-joint-stereo: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-joint-stereo: CMD = run "$(MPA_HEADER_TESTBIN)" "$(TARGET_SAMPLES)/mp3-conformance/sin1k0db.bit" + +FATE_MPA_HEADER-$(CONFIG_MPEGAUDIOHEADER) += fate-mpegaudiodecheader-xing +fate-mpegaudiodecheader-xing: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-xing: CMD = run "$(MPA_HEADER_TESTBIN)" "$(TARGET_SAMPLES)/exif/embedded_small.mp3" + +FATE_MPA_HEADER-$(call ALLYES, MPEGAUDIOHEADER MP3_DEMUXER MP3FLOAT_DECODER ARESAMPLE_FILTER MP2_ENCODER MP2_MUXER FILE_PROTOCOL) += fate-mpegaudiodecheader-mp2 +fate-mpegaudiodecheader-mp2: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-mp2: CMD = run_with_temp "$(FFMPEG) -nostdin -hide_banner -loglevel error -i $(TARGET_SAMPLES)/mp3-conformance/compl.bit -ar 24000 -c:a mp2 -fflags +bitexact -f mp2 -y" "$(MPA_HEADER_TESTBIN)" mp2 + +FATE_MPA_HEADER-$(call REMUX, MP3, MPEGAUDIOHEADER) += fate-mpegaudiodecheader-mp3-remux +fate-mpegaudiodecheader-mp3-remux: $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-mp3-remux: CMD = run_with_temp "$(FFMPEG) -nostdin -hide_banner -loglevel error -i $(TARGET_SAMPLES)/exif/embedded_small.mp3 -map 0:a -c copy -fflags +bitexact -f mp3 -y" "$(MPA_HEADER_TESTBIN)" mp3 + +FATE_MPA_HEADER_LAME-$(call ENCDEC, LIBMP3LAME PCM_S16LE, MP3 WAV, MPEGAUDIOHEADER PAN_FILTER ARESAMPLE_FILTER) += fate-mpegaudiodecheader-libmp3lame +fate-mpegaudiodecheader-libmp3lame: tests/data/asynth-44100-2.wav $(MPA_HEADER_TESTBIN) +fate-mpegaudiodecheader-libmp3lame: CMD = run_with_temp "$(FFMPEG) -nostdin -hide_banner -loglevel error -i $(TARGET_PATH)/tests/data/asynth-44100-2.wav -af pan=stereo|c0=c0|c1=c0 -c:a libmp3lame -b:a 128k -fflags +bitexact -f mp3 -y" "$(MPA_HEADER_TESTBIN)" mp3 + +FATE_SAMPLES_FFMPEG += $(FATE_MPA_HEADER-yes) +FATE_FFMPEG += $(FATE_MPA_HEADER_LAME-yes) +fate-mpegaudiodecheader: $(FATE_MPA_HEADER-yes) $(FATE_MPA_HEADER_LAME-yes) diff --git a/tests/ref/fate/mpegaudiodecheader-bitrates b/tests/ref/fate/mpegaudiodecheader-bitrates new file mode 100644 index 0000000000..2b41fc573b --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-bitrates @@ -0,0 +1,15 @@ +offset=0 frames=10 header=FFFB18C0 layer=3 sample_rate=32000 bit_rate=32000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=1440 frames=10 header=FFFB28C0 layer=3 sample_rate=32000 bit_rate=40000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=3240 frames=10 header=FFFB38C0 layer=3 sample_rate=32000 bit_rate=48000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=5400 frames=10 header=FFFB48C0 layer=3 sample_rate=32000 bit_rate=56000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=7920 frames=10 header=FFFB58C0 layer=3 sample_rate=32000 bit_rate=64000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=10800 frames=10 header=FFFB68C0 layer=3 sample_rate=32000 bit_rate=80000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=14400 frames=10 header=FFFB78C0 layer=3 sample_rate=32000 bit_rate=96000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=18720 frames=10 header=FFFB88C0 layer=3 sample_rate=32000 bit_rate=112000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=23760 frames=10 header=FFFB98C0 layer=3 sample_rate=32000 bit_rate=128000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=29520 frames=10 header=FFFBA8C0 layer=3 sample_rate=32000 bit_rate=160000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=36720 frames=10 header=FFFBB8C0 layer=3 sample_rate=32000 bit_rate=192000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=45360 frames=10 header=FFFBC8C0 layer=3 sample_rate=32000 bit_rate=224000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=55440 frames=10 header=FFFBD8C0 layer=3 sample_rate=32000 bit_rate=256000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=66960 frames=20 header=FFFBE8C0 layer=3 sample_rate=32000 bit_rate=320000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +frames=150 diff --git a/tests/ref/fate/mpegaudiodecheader-hecommon b/tests/ref/fate/mpegaudiodecheader-hecommon new file mode 100644 index 0000000000..4ea48dced2 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-hecommon @@ -0,0 +1,10 @@ +offset=0 frames=5 header=FFFB9000 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=2089 frames=1 header=FFFA9200 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=2507 frames=1 header=FFFA9300 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=1 +offset=2925 frames=1 header=FFFA9208 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=1 original=0 emphasis=0 private_bit=0 +offset=3343 frames=1 header=FFFA9204 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=1 emphasis=0 private_bit=0 +offset=3761 frames=1 header=FFFA9201 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=0 emphasis=1 private_bit=0 +offset=4179 frames=1 header=FFFA9202 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=0 emphasis=2 private_bit=0 +offset=4597 frames=1 header=FFFA9203 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=0 emphasis=3 private_bit=0 +offset=5015 frames=18 header=FFFA9200 layer=3 sample_rate=44100 bit_rate=128000 crc=1 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +frames=30 diff --git a/tests/ref/fate/mpegaudiodecheader-joint-stereo b/tests/ref/fate/mpegaudiodecheader-joint-stereo new file mode 100644 index 0000000000..b813cad988 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-joint-stereo @@ -0,0 +1,2 @@ +offset=215 frames=318 header=FFFB9260 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=1 mode_ext=2 copyright=0 original=0 emphasis=0 private_bit=0 +frames=318 diff --git a/tests/ref/fate/mpegaudiodecheader-libmp3lame b/tests/ref/fate/mpegaudiodecheader-libmp3lame new file mode 100644 index 0000000000..3955a43426 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-libmp3lame @@ -0,0 +1,3 @@ +offset=20 frames=1 header=FFFB9000 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=437 frames=231 header=FFFB9064 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=1 mode_ext=2 copyright=0 original=1 emphasis=0 private_bit=0 +frames=232 diff --git a/tests/ref/fate/mpegaudiodecheader-mp2 b/tests/ref/fate/mpegaudiodecheader-mp2 new file mode 100644 index 0000000000..df9e9ff8d7 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-mp2 @@ -0,0 +1,2 @@ +offset=0 frames=109 header=FFF5E4C4 layer=2 sample_rate=24000 bit_rate=160000 crc=0 mode=3 mode_ext=0 copyright=0 original=1 emphasis=0 private_bit=0 +frames=109 diff --git a/tests/ref/fate/mpegaudiodecheader-mp3-remux b/tests/ref/fate/mpegaudiodecheader-mp3-remux new file mode 100644 index 0000000000..c5d4d5cdd7 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-mp3-remux @@ -0,0 +1,3 @@ +offset=301 frames=1 header=FFFB9000 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=718 frames=21 header=FFFB9064 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=1 mode_ext=2 copyright=0 original=1 emphasis=0 private_bit=0 +frames=22 diff --git a/tests/ref/fate/mpegaudiodecheader-mpeg25 b/tests/ref/fate/mpegaudiodecheader-mpeg25 new file mode 100644 index 0000000000..c3a11dcd37 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-mpeg25 @@ -0,0 +1,3 @@ +offset=1062 frames=1 header=FFE338C0 layer=3 sample_rate=8000 bit_rate=24000 crc=0 mode=3 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=1278 frames=4 header=FFE318C4 layer=3 sample_rate=8000 bit_rate=8000 crc=0 mode=3 mode_ext=0 copyright=0 original=1 emphasis=0 private_bit=0 +frames=5 diff --git a/tests/ref/fate/mpegaudiodecheader-xing b/tests/ref/fate/mpegaudiodecheader-xing new file mode 100644 index 0000000000..fbaafedc48 --- /dev/null +++ b/tests/ref/fate/mpegaudiodecheader-xing @@ -0,0 +1,3 @@ +offset=16110 frames=1 header=FFFB4000 layer=3 sample_rate=44100 bit_rate=56000 crc=0 mode=0 mode_ext=0 copyright=0 original=0 emphasis=0 private_bit=0 +offset=16292 frames=21 header=FFFB9064 layer=3 sample_rate=44100 bit_rate=128000 crc=0 mode=1 mode_ext=2 copyright=0 original=1 emphasis=0 private_bit=0 +frames=22 -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
