Control: tags -1 patch
I am uploading a NMU to fix this. The debdiff is attached.
diff -Nru fdkaac-1.0.0/ChangeLog fdkaac-1.0.6/ChangeLog --- fdkaac-1.0.0/ChangeLog 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/ChangeLog 2024-05-05 17:44:07.000000000 +0200 @@ -1,8 +1,88 @@ +2022-08-04 nu774 <honeycom...@gmail.com> + + * bump [HEAD -> master] + + * fdk-aac.vcxproj: support vs2022 + + * extrapolater: don't return more samples than required + + * wav/caf parser: add format checks + +2022-07-13 nu774 <honeycom...@gmail.com> + + * update ChangeLog [origin/master] + + * bump [v1.0.3] + + * wav/caf parser: ensure fmt/desc chunk + +2021-11-15 nu774 <honeycom...@gmail.com> + + * vcxproj: support Visual Studio 2022 + +2021-04-23 nu774 <honeycom...@gmail.com> + + * bump [v1.0.2] + + * m4af: fix mvhd/tkhd duration + +2020-09-21 nu774 <honeycom...@gmail.com> + + * bump [v1.0.1] + + * add Windows 10 long pathname manifest + +2019-09-27 nu774 <honeycom...@gmail.com> + + * fix indent + +2019-09-19 Dima <yud...@gmail.com> + + * process 32-bit input if possible (i.e. respect aac:INT_PCM type) + +2019-04-04 nu774 <honeycom...@gmail.com> + + * vcxproj: support visual studio 2019 + +2018-12-10 tico-tico <sergei....@gmx.com> + + * don't inject timestamp + +2018-09-04 nu774 <honeycom...@gmail.com> + + * bump version 1.0.0 [1.0.0] + + * Fix LD/ELD issue: priming samples are too short to be discarded + +2018-09-03 nu774 <honeycom...@gmail.com> + + * FDKv2 API change: encoderDelay -> nDelay/nDelayCore + + * update MSVC projects for FDKv2 + + * use different IntDir for fdk-aac build + + * remove zombies from fdk-aac.vcxproj.filters + + * fix: -L option was not working (resulted in segfault) + +2017-03-16 nu774 <honeycom...@gmail.com> + + * MSVC projects: update for VS2017 + +2017-01-16 nu774 <honeycom...@gmail.com> + + * address issue#26 + +2016-08-27 nu774 <honeycom...@gmail.com> + + * remove aacenc_hcr.* from MSVC project + 2016-08-26 nu774 <honeycom...@gmail.com> - * update ChangeLog [HEAD -> master] + * update ChangeLog - * bump [origin/master] + * bump [v0.6.3] * Ticket #23: quit supporting MPEG-2 AOT diff -Nru fdkaac-1.0.0/configure.ac fdkaac-1.0.6/configure.ac --- fdkaac-1.0.0/configure.ac 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/configure.ac 2024-05-05 17:44:07.000000000 +0200 @@ -6,16 +6,17 @@ AC_INIT([fdkaac], [XX_VERSION], [honeycom...@gmail.com]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE AC_PROG_CC AM_PROG_CC_C_O +AC_CHECK_TOOL(RC, windres,) AC_CHECK_HEADERS([sys/time.h]) AC_CHECK_HEADERS([libcharset.h langinfo.h endian.h byteswap.h]) -AC_CHECK_HEADERS([fdk-aac/aacenc_lib.h], , - AC_MSG_ERROR([libfdk-aac is required])) +PKG_CHECK_MODULES([FDK_AAC],[fdk-aac]) AC_C_INLINE AC_C_BIGENDIAN diff -Nru fdkaac-1.0.0/debian/changelog fdkaac-1.0.6/debian/changelog --- fdkaac-1.0.0/debian/changelog 2020-04-26 11:51:01.000000000 +0200 +++ fdkaac-1.0.6/debian/changelog 2025-05-02 22:00:18.000000000 +0200 @@ -1,3 +1,11 @@ +fdkaac (1.0.6-0.1) unstable; urgency=medium + + * Non-maintainer upload. + * Import new upstream version, fixing CVE-2022-36148, CVE-2022-37781, + CVE-2023-34823, CVE-2023-34824. (Closes: #1017754, #1038951, #1017751) + + -- Bastian Germann <b...@debian.org> Fri, 02 May 2025 22:00:18 +0200 + fdkaac (1.0.0-1) unstable; urgency=medium * New upstream version. Thanks HÃ¥vard Flaget Aasen. diff -Nru fdkaac-1.0.0/debian/watch fdkaac-1.0.6/debian/watch --- fdkaac-1.0.0/debian/watch 2020-04-26 11:34:43.000000000 +0200 +++ fdkaac-1.0.6/debian/watch 2025-05-02 21:59:03.000000000 +0200 @@ -1,4 +1,4 @@ version=3 opts=filenamemangle=s/.+\/v(\d\S*)\.tar\.gz/fdkaac-$1\.tar\.gz/ \ - https://github.com/nu774/fdkaac/releases .*/v?(\d\S*)\.tar\.gz + https://github.com/nu774/fdkaac/tags .*/v(\d\S*)\.tar\.gz diff -Nru fdkaac-1.0.0/fdkaac.manifest fdkaac-1.0.6/fdkaac.manifest --- fdkaac-1.0.0/fdkaac.manifest 1970-01-01 01:00:00.000000000 +0100 +++ fdkaac-1.0.6/fdkaac.manifest 2024-05-05 17:44:07.000000000 +0200 @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <application xmlns="urn:schemas-microsoft-com:asm.v3"> + <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> + <ws2:longPathAware>true</ws2:longPathAware> + </windowsSettings> + </application> +</assembly> diff -Nru fdkaac-1.0.0/fdkaac.rc fdkaac-1.0.6/fdkaac.rc --- fdkaac-1.0.0/fdkaac.rc 1970-01-01 01:00:00.000000000 +0100 +++ fdkaac-1.0.6/fdkaac.rc 2024-05-05 17:44:07.000000000 +0200 @@ -0,0 +1,3 @@ +#include <winresrc.h> + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "fdkaac.manifest" diff -Nru fdkaac-1.0.0/git2changelog.py fdkaac-1.0.6/git2changelog.py --- fdkaac-1.0.0/git2changelog.py 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/git2changelog.py 2024-05-05 17:44:07.000000000 +0200 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright (C) 2013 nu774 # For conditions of distribution and use, see copyright notice in COPYING @@ -39,6 +39,6 @@ commits = parse_gitlog(pipe) commits_by_date_author = groupby(commits, key=lambda x: (x.date, x.author)) for (date, author), commits in commits_by_date_author: - output(u'{0} {1}\n\n'.format(date, author).encode('utf-8')) + output(f'{date} {author}\n\n') for c in commits: - output(u' * {0}{1}\n\n'.format(c.subject, c.ref).encode('utf-8')) + output(f' * {c.subject}{c.ref}\n\n') diff -Nru fdkaac-1.0.0/.github/workflows/ci.yml fdkaac-1.0.6/.github/workflows/ci.yml --- fdkaac-1.0.0/.github/workflows/ci.yml 1970-01-01 01:00:00.000000000 +0100 +++ fdkaac-1.0.6/.github/workflows/ci.yml 2024-05-05 17:44:07.000000000 +0200 @@ -0,0 +1,109 @@ +name: CI +on: [push, pull_request] + +jobs: + linux: + strategy: + matrix: + version: [20.04, 22.04] + runs-on: ubuntu-${{ matrix.version }} + steps: + - name: Install libfdk-aac + run: | + sudo apt install libfdk-aac-dev + - name: Checkout sources + uses: actions/checkout@v3 + - name: Build + run: | + autoreconf -fiv + ./configure + make + sudo make install + - name: Test + run: | + fdkaac -b 128 -R -o /dev/null /dev/null + + mingw-cross: + strategy: + matrix: + arch: [i686, x86_64] + include: + - arch: i686 + os: mingw32 + - arch: x86_64 + os: mingw64 + runs-on: ubuntu-latest + steps: + - name: Install cross compiler + run: | + ARCH=${{ matrix.arch }} + sudo apt-get install g++-mingw-w64-${ARCH//_/-} + - name: Install libfdk-aac binary from repo.msys.org + run: | + wget https://repo.msys2.org/mingw/${{ matrix.os }}/${{ matrix.os }}.db.tar.zst + DESCFILE=$(tar xvf ${{ matrix.os }}.db.tar.zst --wildcards '*-fdk-aac*/desc') + PKGFILE=$(sed -n '/%FILENAME%/{n;p;q}' $DESCFILE) + wget https://repo.msys2.org/mingw/${{ matrix.os }}/${PKGFILE} + sudo tar xvf ${PKGFILE} -C /usr/${{ matrix.arch }}-w64-mingw32 --strip-component=1 + - name: Checkout + uses: actions/checkout@v3 + - name: Build + run: | + autoreconf -fiv + ./configure --host=${{ matrix.arch }}-w64-mingw32 --prefix=/usr/${{ matrix.arch }}-w64-mingw32 + make + sudo make install + + macos: + runs-on: macos-latest + steps: + - name: Install dependencies + run: | + brew install autoconf automake libtool pkg-config + brew install fdk-aac + - name: Checkout sources + uses: actions/checkout@v3 + - name: Build + run: | + autoreconf -fiv + ./configure + make + make install + - name: Test + run: | + fdkaac -b 128 -R -o /dev/null /dev/null + + msys2: + runs-on: windows-latest + strategy: + matrix: + sys: [ clang32, clang64, mingw32, mingw64, ucrt64 ] + defaults: + run: + shell: msys2 {0} + steps: + - name: Setup msys2 + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.sys }} + update: true + install: git + pacboy: >- + autoconf: + automake: + libtool: + make: + cc:p + pkg-config:p + fdk-aac:p + - name: Checkout + uses: actions/checkout@v3 + - name: Build + run: | + autoreconf -fiv + ./configure + make + make install + - name: Test + run: | + fdkaac -b 128 -R -o /dev/null /dev/null diff -Nru fdkaac-1.0.0/.gitignore fdkaac-1.0.6/.gitignore --- fdkaac-1.0.0/.gitignore 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/.gitignore 2024-05-05 17:44:07.000000000 +0200 @@ -20,3 +20,11 @@ src/.dirstamp stamp-h1 fdkaac +.vscode +fdk-aac +MSVC/Release +MSVC/Debug +MSVC/x64/Release +MSVC/x64/Debug +MSVC/fdk-aac +MSVC/*.vcxproj.user diff -Nru fdkaac-1.0.0/Makefile.am fdkaac-1.0.6/Makefile.am --- fdkaac-1.0.0/Makefile.am 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/Makefile.am 2024-05-05 17:44:07.000000000 +0200 @@ -22,8 +22,13 @@ dist_man_MANS = man/fdkaac.1 +fdkaac_CFLAGS = @CFLAGS@ @FDK_AAC_CFLAGS@ + fdkaac_LDADD = \ - @LIBICONV@ @CHARSET_LIB@ -lfdk-aac -lm + @LIBICONV@ @CHARSET_LIB@ @FDK_AAC_LIBS@ -lm + +.rc.o: + $(RC) $< -o $@ if FDK_PLATFORM_POSIX fdkaac_SOURCES += \ @@ -33,6 +38,7 @@ if FDK_PLATFORM_WIN32 fdkaac_SOURCES += \ src/compat_win32.c + fdkaac_SOURCES += fdkaac.rc endif if FDK_NO_GETOPT_LONG diff -Nru fdkaac-1.0.0/MSVC/fdk-aac.vcxproj fdkaac-1.0.6/MSVC/fdk-aac.vcxproj --- fdkaac-1.0.0/MSVC/fdk-aac.vcxproj 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/MSVC/fdk-aac.vcxproj 2024-05-05 17:44:07.000000000 +0200 @@ -24,6 +24,8 @@ <RootNamespace>fdk-aac</RootNamespace> </PropertyGroup> <PropertyGroup> + <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '17.0'">v143</PlatformToolset> + <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '16.0'">v142</PlatformToolset> <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '15.0'">v141_xp</PlatformToolset> <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '14.0'">v140_xp</PlatformToolset> <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '12.0'">v120_xp</PlatformToolset> diff -Nru fdkaac-1.0.0/MSVC/fdkaac.vcxproj fdkaac-1.0.6/MSVC/fdkaac.vcxproj --- fdkaac-1.0.0/MSVC/fdkaac.vcxproj 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/MSVC/fdkaac.vcxproj 2024-05-05 17:44:07.000000000 +0200 @@ -24,6 +24,8 @@ <RootNamespace>fdkaac</RootNamespace> </PropertyGroup> <PropertyGroup> + <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '17.0'">v143</PlatformToolset> + <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '16.0'">v142</PlatformToolset> <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '15.0'">v141_xp</PlatformToolset> <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '14.0'">v140_xp</PlatformToolset> <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(MSBuildToolsVersion)' == '12.0'">v120_xp</PlatformToolset> @@ -54,6 +56,9 @@ <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> </Link> + <Manifest> + <AdditionalManifestFiles>..\fdkaac.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> + </Manifest> <PreBuildEvent> <Command>copy ..\fdk-aac\libAACdec\include\aacdecoder_lib.h include\fdk-aac\ copy ..\fdk-aac\libAACenc\include\aacenc_lib.h include\fdk-aac\ diff -Nru fdkaac-1.0.0/src/aacenc.c fdkaac-1.0.6/src/aacenc.c --- fdkaac-1.0.0/src/aacenc.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/aacenc.c 2024-05-05 17:44:07.000000000 +0200 @@ -247,7 +247,7 @@ int aac_encode_frame(HANDLE_AACENCODER encoder, const pcm_sample_description_t *format, - const int16_t *input, unsigned iframes, + const INT_PCM *input, unsigned iframes, aacenc_frame_t *output) { uint32_t ilen = iframes * format->channels_per_frame; @@ -258,9 +258,9 @@ void *obufs[1]; INT ibuf_ids[] = { IN_AUDIO_DATA }; INT obuf_ids[] = { OUT_BITSTREAM_DATA }; - INT ibuf_sizes[] = { ilen * sizeof(int16_t) }; + INT ibuf_sizes[] = { ilen * sizeof(INT_PCM) }; INT obuf_sizes[1]; - INT ibuf_el_sizes[] = { sizeof(int16_t) }; + INT ibuf_el_sizes[] = { sizeof(INT_PCM) }; INT obuf_el_sizes[] = { 1 }; AACENC_ERROR err; unsigned channel_mode, obytes; diff -Nru fdkaac-1.0.0/src/aacenc.h fdkaac-1.0.6/src/aacenc.h --- fdkaac-1.0.0/src/aacenc.h 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/aacenc.h 2024-05-05 17:44:07.000000000 +0200 @@ -50,7 +50,7 @@ int aac_encode_frame(HANDLE_AACENCODER encoder, const pcm_sample_description_t *format, - const int16_t *input, unsigned iframes, + const INT_PCM *input, unsigned iframes, aacenc_frame_t *output); #endif diff -Nru fdkaac-1.0.0/src/caf_reader.c fdkaac-1.0.6/src/caf_reader.c --- fdkaac-1.0.0/src/caf_reader.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/caf_reader.c 2024-05-05 17:44:07.000000000 +0200 @@ -75,8 +75,10 @@ ENSURE(mFormatID == M4AF_FOURCC('l','p','c','m')); ENSURE(mSampleRate && mBytesPerPacket && mChannelsPerFrame >= 1 && mChannelsPerFrame <= 8 && - mBitsPerChannel && mFramesPerPacket == 1 && + mBitsPerChannel > 0 && mBitsPerChannel < 256 && + mFramesPerPacket == 1 && mBytesPerPacket % mChannelsPerFrame == 0 && + mBytesPerPacket < 256 && mBytesPerPacket >= mChannelsPerFrame * ((mBitsPerChannel + 7) / 8)); desc->sample_rate = mSampleRate; @@ -103,10 +105,14 @@ { char *buf, *key, *val, *end; size_t len; + int n; - if (chunk_size < 4 || (buf = malloc(chunk_size)) == 0) + if (chunk_size < 4 || (buf = malloc(chunk_size+1)) == 0) return -1; - pcm_read(&reader->io, buf, chunk_size); + n = pcm_read(&reader->io, buf, chunk_size); + if (n != chunk_size) + return -1; + buf[n] = 0; key = buf + 4; end = buf + chunk_size; do { @@ -172,6 +178,7 @@ { uint32_t fcc; int64_t chunk_size; + int desc_seen = 0; *data_length = 0; @@ -181,9 +188,10 @@ TRY_IO(pcm_skip(&reader->io, 4)); /* mFileVersion, mFileFlags */ while ((fcc = caf_next_chunk(reader, &chunk_size)) != 0) { - if (fcc == M4AF_FOURCC('d','e','s','c')) + if (fcc == M4AF_FOURCC('d','e','s','c')) { + desc_seen = 1; TRY_IO(caf_desc(reader, chunk_size)); - else if (fcc == M4AF_FOURCC('i','n','f','o')) + } else if (fcc == M4AF_FOURCC('i','n','f','o')) TRY_IO(caf_info(reader, chunk_size)); else if (fcc == M4AF_FOURCC('c','h','a','n')) { ENSURE(reader->sample_format.channels_per_frame); @@ -199,7 +207,7 @@ TRY_IO(pcm_skip(&reader->io, chunk_size)); } ENSURE(reader->sample_format.channels_per_frame); - ENSURE(fcc == M4AF_FOURCC('d','a','t','a')); + ENSURE(desc_seen && fcc == M4AF_FOURCC('d','a','t','a')); return 0; FAIL: return -1; diff -Nru fdkaac-1.0.0/src/catypes.h fdkaac-1.0.6/src/catypes.h --- fdkaac-1.0.0/src/catypes.h 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/catypes.h 2024-05-05 17:44:07.000000000 +0200 @@ -207,7 +207,6 @@ kAudioChannelLayoutTag_AudioUnit_5_0 = kAudioChannelLayoutTag_MPEG_5_0_B, // L R Ls Rs C kAudioChannelLayoutTag_AudioUnit_6_0 = (139L<<16) | 6, // L R Ls Rs C Cs kAudioChannelLayoutTag_AudioUnit_7_0 = (140L<<16) | 7, // L R Ls Rs C Rls Rrs - kAudioChannelLayoutTag_AudioUnit_7_0_Front = (148L<<16) | 7, // L R Ls Rs C Lc Rc kAudioChannelLayoutTag_AudioUnit_5_1 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs kAudioChannelLayoutTag_AudioUnit_6_1 = kAudioChannelLayoutTag_MPEG_6_1_A, // L R C LFE Ls Rs Cs kAudioChannelLayoutTag_AudioUnit_7_1 = kAudioChannelLayoutTag_MPEG_7_1_C, // L R C LFE Ls Rs Rls Rrs @@ -227,6 +226,10 @@ kAudioChannelLayoutTag_TMH_10_2_std = (145L<<16) | 16, // L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2 kAudioChannelLayoutTag_TMH_10_2_full = (146L<<16) | 21, // TMH_10_2_std plus: Lc Rc HI VI Haptic + kAudioChannelLayoutTag_DiscreteInOrder = (147L<<16) | 0, // needs to be ORed with the actual number of channels + + kAudioChannelLayoutTag_AudioUnit_7_0_Front = (148L<<16) | 7, // L R Ls Rs C Lc Rc + kAudioChannelLayoutTag_AC3_1_0_1 = (149L<<16) | 2, // C LFE kAudioChannelLayoutTag_AC3_3_0 = (150L<<16) | 3, // L C R kAudioChannelLayoutTag_AC3_3_1 = (151L<<16) | 4, // L C R Cs @@ -234,7 +237,53 @@ kAudioChannelLayoutTag_AC3_2_1_1 = (153L<<16) | 4, // L R Cs LFE kAudioChannelLayoutTag_AC3_3_1_1 = (154L<<16) | 5, // L C R Cs LFE - kAudioChannelLayoutTag_DiscreteInOrder = (147L<<16) | 0, // needs to be ORed with the actual number of channels + kAudioChannelLayoutTag_EAC_6_0_A = (155<<16) | 6, // L C R Ls Rs Cs + kAudioChannelLayoutTag_EAC_7_0_A = (156<<16) | 7, // L C R Ls Rs Rls Rrs + + kAudioChannelLayoutTag_EAC3_6_1_A = (157<<16) | 7, // L C R Ls Rs LFE Cs + kAudioChannelLayoutTag_EAC3_6_1_B = (158<<16) | 7, // L C R Ls Rs LFE Ts + kAudioChannelLayoutTag_EAC3_6_1_C = (159<<16) | 7, // L C R Ls Rs LFE Vhc + kAudioChannelLayoutTag_EAC3_7_1_A = (160<<16) | 8, // L C R Ls Rs LFE Rls Rrs + kAudioChannelLayoutTag_EAC3_7_1_B = (161<<16) | 8, // L C R Ls Rs LFE Lc Rc + kAudioChannelLayoutTag_EAC3_7_1_C = (162<<16) | 8, // L C R Ls Rs LFE Lsd Rsd + kAudioChannelLayoutTag_EAC3_7_1_D = (163<<16) | 8, // L C R Ls Rs LFE Lw Rw + kAudioChannelLayoutTag_EAC3_7_1_E = (164<<16) | 8, // L C R Ls Rs LFE Vhl Vhr + + kAudioChannelLayoutTag_EAC3_7_1_F = (165<<16) | 8, // L C R Ls Rs LFE Cs Ts + kAudioChannelLayoutTag_EAC3_7_1_G = (166<<16) | 8, // L C R Ls Rs LFE Cs Vhc + kAudioChannelLayoutTag_EAC3_7_1_H = (167<<16) | 8, // L C R Ls Rs LFE Ts Vhc + + kAudioChannelLayoutTag_DTS_3_1 = (168<<16) | 4, // C L R LFE + kAudioChannelLayoutTag_DTS_4_1 = (169<<16) | 5, // C L R Cs LFE + kAudioChannelLayoutTag_DTS_6_0_A = (170<<16) | 6, // Lc Rc L R Ls Rs + kAudioChannelLayoutTag_DTS_6_0_B = (171<<16) | 6, // C L R Rls Rrs Ts + kAudioChannelLayoutTag_DTS_6_0_C = (172<<16) | 6, // C Cs L R Rls Rrs + kAudioChannelLayoutTag_DTS_6_1_A = (173<<16) | 7, // Lc Rc L R Ls Rs LFE + kAudioChannelLayoutTag_DTS_6_1_B = (174<<16) | 7, // C L R Rls Rrs Ts LFE + kAudioChannelLayoutTag_DTS_6_1_C = (175<<16) | 7, // C Cs L R Rls Rrs LFE + kAudioChannelLayoutTag_DTS_7_0 = (176<<16) | 7, // Lc C Rc L R Ls Rs + kAudioChannelLayoutTag_DTS_7_1 = (177<<16) | 8, // Lc C Rc L R Ls Rs LFE + kAudioChannelLayoutTag_DTS_8_0_A = (178<<16) | 8, // Lc Rc L R Ls Rs Rls Rrs + kAudioChannelLayoutTag_DTS_8_0_B = (179<<16) | 8, // Lc C Rc L R Ls Cs Rs + kAudioChannelLayoutTag_DTS_8_1_A = (180<<16) | 9, // Lc Rc L R Ls Rs Rls Rrs LFE + kAudioChannelLayoutTag_DTS_8_1_B = (181<<16) | 9, // Lc C Rc L R Ls Cs Rs LFE + kAudioChannelLayoutTag_DTS_6_1_D = (182<<16) | 7, // C L R Ls Rs LFE Cs + + kAudioChannelLayoutTag_AAC_7_1_B = (183<<16) | 8, // C L R Ls Rs Rls Rrs LFE + kAudioChannelLayoutTag_AAC_7_1_C = (184<<16) | 8, // C L R Ls Rs LFE Vhl Vhr + + kAudioChannelLayoutTag_WAVE_4_0_B = (185<<16) | 4, // L R Rls Rrs + kAudioChannelLayoutTag_WAVE_5_0_B = (186<<16) | 5, // L R C Rls Rrs + kAudioChannelLayoutTag_WAVE_5_1_B = (187<<16) | 6, // L R C LFE Rls Rrs + kAudioChannelLayoutTag_WAVE_6_1 = (188<<16) | 7, // L R C LFE Cs Ls Rs + kAudioChannelLayoutTag_WAVE_7_1 = (189<<16) | 8, // L R C LFE Rls Rrs Ls Rs + + kAudioChannelLayoutTag_Logic_4_0_C = (197U<<16) | 4, // L R Cs C + kAudioChannelLayoutTag_Logic_6_0_B = (198U<<16) | 6, // L R Ls Rs Cs C + kAudioChannelLayoutTag_Logic_6_1_B = (199U<<16) | 7, // L R Ls Rs Cs C LFE + kAudioChannelLayoutTag_Logic_6_1_D = (200U<<16) | 7, // L C R Ls Cs Rs LFE + kAudioChannelLayoutTag_Logic_7_1_B = (201U<<16) | 8, // L R Ls Rs Rls Rrs C LFE + kAudioChannelLayoutTag_Unknown = 0xFFFF0000 // needs to be ORed with the actual number of channels }; diff -Nru fdkaac-1.0.0/src/extrapolater.c fdkaac-1.0.6/src/extrapolater.c --- fdkaac-1.0.0/src/extrapolater.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/extrapolater.c 2024-05-05 17:44:07.000000000 +0200 @@ -144,17 +144,22 @@ assert(bp->count <= nframes); memcpy(buffer, bp->data, bp->count * sfmt->bytes_per_frame); if (!fetch(self, nframes)) { + // got EOF buffer_t *bbp = &self->buffer[self->nbuffer]; if (bp->count < 2 * LPC_ORDER) { + // final frame is too short, so we join with the pre-final frame size_t total = bp->count + bbp->count; if (bbp->count && realloc_buffer(bbp, total * sfmt->bytes_per_frame) == 0 && realloc_buffer(bp, total * sfmt->bytes_per_frame) == 0) { memcpy(bbp->data + bbp->count * sfmt->channels_per_frame, - bp->data, bp->count * sfmt->bytes_per_frame); - memcpy(bp->data, bbp->data, total * sfmt->bytes_per_frame); - bp->count = total; + bp->data, + bp->count * sfmt->bytes_per_frame); + memcpy(bp->data, + bbp->data + bp->count * sfmt->channels_per_frame, + bbp->count * sfmt->bytes_per_frame); + bp->count = bbp->count; } } if (bp->count >= 2 * LPC_ORDER) diff -Nru fdkaac-1.0.0/src/m4af.c fdkaac-1.0.6/src/m4af.c --- fdkaac-1.0.0/src/m4af.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/m4af.c 2024-05-05 17:44:07.000000000 +0200 @@ -223,7 +223,7 @@ } m4af_ctx_t *m4af_create(uint32_t codec, uint32_t timescale, - m4af_io_callbacks_t *io, void *io_cookie) + m4af_io_callbacks_t *io, void *io_cookie, int no_timestamp) { m4af_ctx_t *ctx; int64_t timestamp; @@ -237,7 +237,7 @@ memcpy(&ctx->io, io, sizeof(m4af_io_callbacks_t)); ctx->io_cookie = io_cookie; ctx->timescale = timescale; - timestamp = m4af_timestamp(); + timestamp = no_timestamp ? 0 : m4af_timestamp(); ctx->creation_time = timestamp; ctx->modification_time = timestamp; ctx->num_tracks = 1; @@ -1103,8 +1103,10 @@ { m4af_track_t *track = &ctx->track[track_idx]; int64_t pos = m4af_tell(ctx); - int64_t duration = - (double)track->duration / track->timescale * ctx->timescale + .5; + int64_t duration = track->duration; + if (ctx->priming_mode & M4AF_PRIMING_MODE_EDTS) + duration -= (track->encoder_delay + track->padding); + duration = (double)duration / track->timescale * ctx->timescale + .5; uint8_t version = (track->creation_time > UINT32_MAX || track->modification_time > UINT32_MAX || duration > UINT32_MAX); @@ -1169,6 +1171,8 @@ unsigned i; for (i = 0; i < ctx->num_tracks; ++i) { double x = ctx->track[i].duration; + if (ctx->priming_mode & M4AF_PRIMING_MODE_EDTS) + x -= (ctx->track[i].encoder_delay + ctx->track[i].padding); int64_t duration = x / ctx->track[i].timescale * ctx->timescale + .5; if (duration > movie_duration) movie_duration = duration; diff -Nru fdkaac-1.0.0/src/m4af.h fdkaac-1.0.6/src/m4af.h --- fdkaac-1.0.0/src/m4af.h 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/m4af.h 2024-05-05 17:44:07.000000000 +0200 @@ -75,7 +75,7 @@ m4af_ctx_t *m4af_create(uint32_t codec, uint32_t timescale, - m4af_io_callbacks_t *io, void *io_cookie); + m4af_io_callbacks_t *io, void *io_cookie, int no_timestamp); int m4af_begin_write(m4af_ctx_t *ctx); diff -Nru fdkaac-1.0.0/src/main.c fdkaac-1.0.6/src/main.c --- fdkaac-1.0.0/src/main.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/main.c 2024-05-05 17:44:07.000000000 +0200 @@ -121,10 +121,9 @@ " -m, --bitrate-mode <n> Bitrate configuration\n" " 0: CBR (default)\n" " 1-5: VBR\n" -" (VBR mode is not officially supported, and\n" -" works only on a certain combination of\n" -" parameter settings, sample rate, and\n" -" channel configuration)\n" +" (VBR mode 1 is tuned for HE-AAC v2\n" +" VBR mode 2 is tuned for HE-AAC\n" +" VBR mode 3 or greater is for AAC LC)\n" " -w, --bandwidth <n> Frequency bandwidth in Hz (AAC LC only)\n" " -a, --afterburner <n> Afterburner\n" " 0: Off\n" @@ -159,6 +158,7 @@ " -I, --ignorelength Ignore length of WAV header\n" " -S, --silent Don't print progress messages\n" " --moov-before-mdat Place moov box before mdat box on m4a output\n" +" --no-timestamp Don't inject timestamp in the file\n" "\n" "Options for raw (headerless) input:\n" " -R, --raw Treat input as raw (by default WAV is\n" @@ -221,6 +221,8 @@ unsigned raw_rate; const char *raw_format; + int no_timestamp; + aacenc_tag_store_t tags; aacenc_tag_store_t source_tags; aacenc_translate_generic_text_tag_ctx_t source_tag_ctx; @@ -244,7 +246,7 @@ #define OPT_LONG_TAG M4AF_FOURCC('l','t','a','g') #define OPT_TAG_FROM_JSON M4AF_FOURCC('t','f','j','s') - static struct option long_options[] = { + static const struct option long_options[] = { { "help", no_argument, 0, 'h' }, { "profile", required_argument, 0, 'p' }, { "bitrate", required_argument, 0, 'b' }, @@ -284,6 +286,8 @@ { "tag-from-file", required_argument, 0, OPT_SHORT_TAG_FILE }, { "long-tag", required_argument, 0, OPT_LONG_TAG }, { "tag-from-json", required_argument, 0, OPT_TAG_FROM_JSON }, + + { "no-timestamp", no_argument, 0, '#' }, { 0, 0, 0, 0 }, }; params->afterburner = 1; @@ -456,6 +460,9 @@ case OPT_TAG_FROM_JSON: params->json_filename = optarg; break; + case '#': + params->no_timestamp = 1; + break; default: return usage(), -1; } @@ -513,7 +520,7 @@ HANDLE_AACENCODER encoder, uint32_t frame_length, m4af_ctx_t *m4af) { - int16_t *ibuf = 0, *ip; + INT_PCM *ibuf = 0, *ip; aacenc_frame_t obuf[2] = {{ 0 }}, *obp; unsigned flip = 0; int nread = 1; @@ -833,7 +840,7 @@ unsigned framelen = aacinfo.frameLength; scale = sample_format->sample_rate >> scale_shift; if ((m4af = m4af_create(M4AF_CODEC_MP4A, scale, &m4af_io, - params.output_fp)) < 0) + params.output_fp, params.no_timestamp)) < 0) goto END; m4af_set_num_channels(m4af, 0, sample_format->channels_per_frame); m4af_set_fixed_frame_duration(m4af, 0, framelen >> scale_shift); diff -Nru fdkaac-1.0.0/src/pcm_readhelper.c fdkaac-1.0.6/src/pcm_readhelper.c --- fdkaac-1.0.0/src/pcm_readhelper.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/pcm_readhelper.c 2024-05-05 17:44:07.000000000 +0200 @@ -60,6 +60,8 @@ if (count == 0 || pcm_seek(io, count, SEEK_CUR) >= 0) return 0; + if (count < 0) + return -1; do { if ((rc = vp->read(io->cookie, buff, count > 8192 ? 8192 : count)) > 0) count -= rc; @@ -293,6 +295,10 @@ layout = "\x03\x01\x02\x09"; break; case kAudioChannelLayoutTag_AC3_3_1: layout = "\x01\x03\x02\x09"; break; + case kAudioChannelLayoutTag_WAVE_4_0_B: + layout = "\x01\x02\x05\x06"; break; + case kAudioChannelLayoutTag_Logic_4_0_C: + layout = "\x01\x02\x09\x03"; break; /* 4.1ch */ case kAudioChannelLayoutTag_DVD_6: layout = "\x01\x02\x04\x0A\x0B"; break; @@ -302,6 +308,8 @@ layout = "\x01\x02\x03\x04\x09"; break; case kAudioChannelLayoutTag_AC3_3_1_1: layout = "\x01\x03\x02\x09\x04"; break; + case kAudioChannelLayoutTag_DTS_4_1: + layout = "\x03\x01\x02\x09\x04"; break; /* 5ch */ case kAudioChannelLayoutTag_MPEG_5_0_A: layout = "\x01\x02\x03\x0A\x0B"; break; @@ -312,6 +320,8 @@ layout = "\x01\x03\x02\x0A\x0B"; break; case kAudioChannelLayoutTag_MPEG_5_0_D: layout = "\x03\x01\x02\x0A\x0B"; break; + case kAudioChannelLayoutTag_WAVE_5_0_B: + layout = "\x01\x02\x03\x05\x06"; break; /* 5.1ch */ case kAudioChannelLayoutTag_MPEG_5_1_A: layout = "\x01\x02\x03\x04\x0A\x0B"; break; @@ -321,17 +331,49 @@ layout = "\x01\x03\x02\x0A\x0B\x04"; break; case kAudioChannelLayoutTag_MPEG_5_1_D: layout = "\x03\x01\x02\x0A\x0B\x04"; break; + case kAudioChannelLayoutTag_WAVE_5_1_B: + layout = "\x01\x02\x03\x04\x05\x06"; break; /* 6ch */ case kAudioChannelLayoutTag_Hexagonal: case kAudioChannelLayoutTag_AudioUnit_6_0: layout = "\x01\x02\x0A\x0B\x03\x09"; break; case kAudioChannelLayoutTag_AAC_6_0: layout = "\x03\x01\x02\x0A\x0B\x09"; break; + case kAudioChannelLayoutTag_EAC_6_0_A: + layout = "\x01\x03\x02\x0A\x0B\x09"; break; + case kAudioChannelLayoutTag_DTS_6_0_A: + layout = "\x07\x08\x01\x02\x0A\x0B"; break; + case kAudioChannelLayoutTag_DTS_6_0_B: + layout = "\x03\x01\x02\x05\x06\x0C"; break; + case kAudioChannelLayoutTag_DTS_6_0_C: + layout = "\x03\x09\x01\x02\x05\x06"; break; + case kAudioChannelLayoutTag_Logic_6_0_B: + layout = "\x01\x02\x0A\x0B\x09\x03"; break; /* 6.1ch */ case kAudioChannelLayoutTag_MPEG_6_1_A: layout = "\x01\x02\x03\x04\x0A\x0B\x09"; break; case kAudioChannelLayoutTag_AAC_6_1: layout = "\x03\x01\x02\x0A\x0B\x09\x04"; break; + case kAudioChannelLayoutTag_EAC3_6_1_A: + layout = "\x01\x03\x02\x0A\x0B\x04\x09"; break; + case kAudioChannelLayoutTag_EAC3_6_1_B: + layout = "\x01\x03\x02\x0A\x0B\x04\x0C"; break; + case kAudioChannelLayoutTag_EAC3_6_1_C: + layout = "\x01\x03\x02\x0A\x0B\x04\x0E"; break; + case kAudioChannelLayoutTag_DTS_6_1_A: + layout = "\x07\x08\x01\x02\x0A\x0B\x04"; break; + case kAudioChannelLayoutTag_DTS_6_1_B: + layout = "\x03\x01\x02\x05\x06\x0C\x04"; break; + case kAudioChannelLayoutTag_DTS_6_1_C: + layout = "\x03\x09\x01\x02\x05\x06\x04"; break; + case kAudioChannelLayoutTag_DTS_6_1_D: + layout = "\x03\x01\x02\x0A\x0B\x04\x09"; break; + case kAudioChannelLayoutTag_WAVE_6_1: + layout = "\x01\x02\x03\x04\x09\x0A\x0B"; break; + case kAudioChannelLayoutTag_Logic_6_1_B: + layout = "\x01\x02\x0A\x0B\x09\x03\x04"; break; + case kAudioChannelLayoutTag_Logic_6_1_D: + layout = "\x01\x03\x02\x0A\x09\x0B\x04"; break; /* 7ch */ case kAudioChannelLayoutTag_AudioUnit_7_0: layout = "\x01\x02\x0A\x0B\x03\x05\x06"; break; @@ -339,6 +381,10 @@ layout = "\x01\x02\x0A\x0B\x03\x07\x08"; break; case kAudioChannelLayoutTag_AAC_7_0: layout = "\x03\x01\x02\x0A\x0B\x05\x06"; break; + case kAudioChannelLayoutTag_EAC_7_0_A: + layout = "\x01\x03\x02\x0A\x0B\x05\x06"; break; + case kAudioChannelLayoutTag_DTS_7_0: + layout = "\x07\x03\x08\x01\x02\x0A\x0B"; break; /* 7.1ch */ case kAudioChannelLayoutTag_MPEG_7_1_A: layout = "\x01\x02\x03\x04\x0A\x0B\x07\x08"; break; @@ -348,11 +394,37 @@ layout = "\x01\x02\x03\x04\x0A\x0B\x05\x06"; break; case kAudioChannelLayoutTag_Emagic_Default_7_1: layout = "\x01\x02\x0A\x0B\x03\x04\x07\x08"; break; + case kAudioChannelLayoutTag_AAC_7_1_B: + layout = "\x03\x01\x02\x0A\x0B\x05\x06\x04"; break; + case kAudioChannelLayoutTag_AAC_7_1_C: + layout = "\x03\x01\x02\x0A\x0B\x04\x0D\x0F"; break; + case kAudioChannelLayoutTag_EAC3_7_1_A: + layout = "\x01\x03\x02\x0A\x0B\x04\x05\x06"; break; + case kAudioChannelLayoutTag_EAC3_7_1_B: + layout = "\x01\x03\x02\x0A\x0B\x04\x07\x08"; break; + case kAudioChannelLayoutTag_EAC3_7_1_E: + layout = "\x01\x03\x02\x0A\x0B\x04\x0D\x0F"; break; + case kAudioChannelLayoutTag_EAC3_7_1_F: + layout = "\x01\x03\x02\x0A\x0B\x04\x09\x0C"; break; + case kAudioChannelLayoutTag_EAC3_7_1_G: + layout = "\x01\x03\x02\x0A\x0B\x04\x09\x0E"; break; + case kAudioChannelLayoutTag_EAC3_7_1_H: + layout = "\x01\x03\x02\x0A\x0B\x04\x0C\x0E"; break; + case kAudioChannelLayoutTag_DTS_7_1: + layout = "\x07\x03\x08\x01\x02\x0A\x0B\x04"; break; + case kAudioChannelLayoutTag_WAVE_7_1: + layout = "\x01\x02\x03\x04\x05\x06\x0A\x0B"; break; + case kAudioChannelLayoutTag_Logic_7_1_B: + layout = "\x01\x02\x0A\x0B\x05\x06\x03\x04"; break; /* 8ch */ case kAudioChannelLayoutTag_Octagonal: layout = "\x01\x02\x05\x06\x03\x09\x0A\x0B"; break; case kAudioChannelLayoutTag_AAC_Octagonal: layout = "\x03\x01\x02\x0A\x0B\x05\x06\x09"; break; + case kAudioChannelLayoutTag_DTS_8_0_A: + layout = "\x07\x08\x01\x02\x0A\x0B\x05\x06"; break; + case kAudioChannelLayoutTag_DTS_8_0_B: + layout = "\x07\x03\x08\x01\x02\x0A\x09\x0B"; break; default: goto FAIL; } diff -Nru fdkaac-1.0.0/src/pcm_sint16_converter.c fdkaac-1.0.6/src/pcm_sint16_converter.c --- fdkaac-1.0.0/src/pcm_sint16_converter.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/pcm_sint16_converter.c 2024-05-05 17:44:07.000000000 +0200 @@ -10,6 +10,8 @@ #if HAVE_STDINT_H # include <stdint.h> #endif +#include <assert.h> +#include <fdk-aac/aacenc_lib.h> #include "pcm_reader.h" typedef struct pcm_sint16_converter_t { @@ -57,12 +59,18 @@ count = nframes * sfmt->channels_per_frame; if (PCM_IS_FLOAT(sfmt)) { float *ip = self->pivot; - int16_t *op = buffer; + INT_PCM *op = buffer; +#if SAMPLE_BITS == 16 for (i = 0; i < count; ++i) - op[i] = pcm_clip(ip[i] * 32768.0, -32768.0, 32767.0); + op[i] = (int16_t)pcm_clip(ip[i] * 32768.0, -32768.0, 32767.0); +#else + for (i = 0; i < count; ++i) + op[i] = (int32_t)pcm_clip(ip[i] * 2147483648.0, -2147483648.0, 2147483647.0); +#endif } else { int32_t *ip = self->pivot; - int16_t *op = buffer; + INT_PCM *op = buffer; +#if SAMPLE_BITS == 16 if (sfmt->bits_per_channel <= 16) { for (i = 0; i < count; ++i) op[i] = ip[i] >> 16; @@ -72,6 +80,10 @@ op[i] = (n == 0x8000) ? 0x7fff : n; } } +#else + for (i = 0; i < count; ++i) + op[i] = ip[i]; +#endif } return nframes; } @@ -94,14 +106,16 @@ pcm_sint16_converter_t *self = 0; pcm_sample_description_t *fmt; + assert((SAMPLE_BITS>>3) == sizeof(INT_PCM)); + if ((self = calloc(1, sizeof(pcm_sint16_converter_t))) == 0) return 0; self->src = reader; self->vtbl = &my_vtable; memcpy(&self->format, pcm_get_format(reader), sizeof(self->format)); fmt = &self->format; - fmt->bits_per_channel = 16; + fmt->bits_per_channel = SAMPLE_BITS; fmt->sample_type = PCM_TYPE_SINT; - fmt->bytes_per_frame = 2 * fmt->channels_per_frame; + fmt->bytes_per_frame = sizeof(INT_PCM) * fmt->channels_per_frame; return (pcm_reader_t *)self; } diff -Nru fdkaac-1.0.0/src/wav_reader.c fdkaac-1.0.6/src/wav_reader.c --- fdkaac-1.0.0/src/wav_reader.c 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/src/wav_reader.c 2024-05-05 17:44:07.000000000 +0200 @@ -113,8 +113,10 @@ wValidBitsPerSample = wBitsPerSample; ENSURE(wFormatTag == 1 || wFormatTag == 3 || wFormatTag == 0xfffe); - ENSURE(nChannels && nSamplesPerSec && nAvgBytesPerSec && - nBlockAlign && wBitsPerSample && !(wBitsPerSample & 7) && + ENSURE(nChannels > 0 && nChannels <= 8 && + nSamplesPerSec && nAvgBytesPerSec && + nBlockAlign && nBlockAlign < 256 && + wBitsPerSample && wBitsPerSample < 256 && !(wBitsPerSample & 7) && nBlockAlign == nChannels * wBitsPerSample / 8); if (wFormatTag == 3) @@ -155,6 +157,7 @@ int wav_parse(wav_reader_t *reader, int64_t *data_length) { uint32_t container, fcc, chunk_size; + int fmt_seen = 0; *data_length = 0; container = riff_next_chunk(reader, &chunk_size); @@ -167,6 +170,7 @@ riff_ds64(reader, data_length); while ((fcc = riff_next_chunk(reader, &chunk_size)) != 0) { if (fcc == RIFF_FOURCC('f','m','t',' ')) { + fmt_seen = 1; if (wav_fmt(reader, chunk_size) < 0) goto FAIL; } else if (fcc == RIFF_FOURCC('d','a','t','a')) { @@ -178,8 +182,8 @@ TRY_IO(pcm_skip(&reader->io, (chunk_size + 1) & ~1)); } } - if (fcc == RIFF_FOURCC('d','a','t','a')) - return 0; + ENSURE(fmt_seen && fcc == RIFF_FOURCC('d', 'a', 't', 'a')); + return 0; FAIL: return -1; } diff -Nru fdkaac-1.0.0/version.h fdkaac-1.0.6/version.h --- fdkaac-1.0.0/version.h 2018-09-03 19:04:36.000000000 +0200 +++ fdkaac-1.0.6/version.h 2024-05-05 17:44:07.000000000 +0200 @@ -1,4 +1,4 @@ #ifndef VERSION_H #define VERSION_H -const char *fdkaac_version = "1.0.0"; +const char *fdkaac_version = "1.0.6"; #endif