Opened 8 years ago
Last modified 5 years ago
#7287 open defect
Audiotoolbox decodes 24-bit ALAC as 16-bit
| Reported by: | macdavis | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avcodec |
| Version: | git-master | Keywords: | Audiotoolbox |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
The sample file is 24-bit, but Audiotoolbox decodes as 16-bit.
How to reproduce:
ffmpeg -c:a alac_at -i /Volumes/New\ Volume/Untitledsample_24_bit_alac.m4a -f null -
ffmpeg version 3.4.git Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --extra-cflags='-Ofast -march=native -m64 -finline-functions -funroll-loops -ffunction-sections -fdata-sections -ffp-contract=fast' --arch=x86_64 --cpu=haswell --disable-ffplay --disable-runtime-cpudetect --disable-debug --disable-opencl --disable-avdevice --enable-libfdk-aac --disable-doc --enable-hardcoded-tables
libavutil 56. 18.102 / 56. 18.102
libavcodec 58. 20.104 / 58. 20.104
libavformat 58. 17.101 / 58. 17.101
libavfilter 7. 25.100 / 7. 25.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Volumes/New Volume/Untitledsample_24_bit_alac.m4a':
Metadata:
major_brand : M4A
minor_version : 0
compatible_brands: M4A mp42isom
creation_time : 2018-06-28T17:03:28.000000Z
iTunSMPB : 00000000 00000000 00001000 0000000000190000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Duration: 00:00:37.24, start: 0.000000, bitrate: 219 kb/s
Stream #0:0(eng): Audio: alac (alac / 0x63616C61), 44100 Hz, stereo, s16, 1246 kb/s (default)
Metadata:
creation_time : 2018-06-28T17:03:28.000000Z
Stream mapping:
Stream #0:0 -> #0:0 (alac (alac_at) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
Metadata:
major_brand : M4A
minor_version : 0
compatible_brands: M4A mp42isom
iTunSMPB : 00000000 00000000 00001000 0000000000190000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
encoder : Lavf58.17.101
Stream #0:0(eng): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
Metadata:
creation_time : 2018-06-28T17:03:28.000000Z
encoder : Lavc58.20.104 pcm_s16le
size=N/A time=00:00:07.24 bitrate=N/A speed= 477x
video:0kB audio:1248kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Patches should be submitted to the ffmpeg-devel mailing list and not this bug tracker.
Attachments (2)
Change History (8)
by , 8 years ago
| Attachment: | Untitledsample_24_bit_alac.m4a added |
|---|
comment:1 by , 8 years ago
The problem starts with the input file. The "alac" atom says the file has 16 bit samples (i.e. SampleSize field). I have just found this exact bug in ffmpeg when creating 24 bit ALAC file and was about to file a report. Was Untitledsample_24_bit_alac.m4a created by ffmpeg ?
Selected output from mp4file.
"Untitledsample_24_bit_alac.m4a": type stbl (moov.trak.mdia.minf.stbl)
"Untitledsample_24_bit_alac.m4a": type stsd (moov.trak.mdia.minf.stbl.stsd)
"Untitledsample_24_bit_alac.m4a": version = 0 (0x00)
"Untitledsample_24_bit_alac.m4a": flags = 0 (0x000000)
"Untitledsample_24_bit_alac.m4a": entryCount = 1 (0x00000001)
"Untitledsample_24_bit_alac.m4a": type alac (moov.trak.mdia.minf.stbl.stsd.alac)
"Untitledsample_24_bit_alac.m4a": reserved1 = <6 bytes> 00 00 00 00 00 00 |......|
"Untitledsample_24_bit_alac.m4a": dataReferenceIndex = 1 (0x0001)
"Untitledsample_24_bit_alac.m4a": soundVersion = 0 (0x0000)
"Untitledsample_24_bit_alac.m4a": reserved2 = <6 bytes> 00 00 00 00 00 00 |......|
"Untitledsample_24_bit_alac.m4a": channels = 2 (0x0002)
"Untitledsample_24_bit_alac.m4a": sampleSize = 16 (0x0010)
"Untitledsample_24_bit_alac.m4a": compressionId = 0 (0x0000)
"Untitledsample_24_bit_alac.m4a": packetSize = 0 (0x0000)
"Untitledsample_24_bit_alac.m4a": timeScale = 2890137600 (0xac440000)
"Untitledsample_24_bit_alac.m4a": type alac (moov.trak.mdia.minf.stbl.stsd.alac.alac)
"Untitledsample_24_bit_alac.m4a": decoderConfig = <28 bytes>
comment:2 by , 8 years ago
Replying to bpa:
Nah, this sample was encoded by MacOS (perhaps Core Audio?)
The problem starts with the input file. The "alac" atom says the file has 16 bit samples (i.e. SampleSize field). I have just found this exact bug in ffmpeg when creating 24 bit ALAC file and was about to file a report. Was Untitledsample_24_bit_alac.m4a created by ffmpeg ?
Selected output from mp4file.
"Untitledsample_24_bit_alac.m4a": type stbl (moov.trak.mdia.minf.stbl)
"Untitledsample_24_bit_alac.m4a": type stsd (moov.trak.mdia.minf.stbl.stsd)
"Untitledsample_24_bit_alac.m4a": version = 0 (0x00)
"Untitledsample_24_bit_alac.m4a": flags = 0 (0x000000)
"Untitledsample_24_bit_alac.m4a": entryCount = 1 (0x00000001)
"Untitledsample_24_bit_alac.m4a": type alac (moov.trak.mdia.minf.stbl.stsd.alac)
"Untitledsample_24_bit_alac.m4a": reserved1 = <6 bytes> 00 00 00 00 00 00 |......|
"Untitledsample_24_bit_alac.m4a": dataReferenceIndex = 1 (0x0001)
"Untitledsample_24_bit_alac.m4a": soundVersion = 0 (0x0000)
"Untitledsample_24_bit_alac.m4a": reserved2 = <6 bytes> 00 00 00 00 00 00 |......|
"Untitledsample_24_bit_alac.m4a": channels = 2 (0x0002)
"Untitledsample_24_bit_alac.m4a": sampleSize = 16 (0x0010)
"Untitledsample_24_bit_alac.m4a": compressionId = 0 (0x0000)
"Untitledsample_24_bit_alac.m4a": packetSize = 0 (0x0000)
"Untitledsample_24_bit_alac.m4a": timeScale = 2890137600 (0xac440000)
"Untitledsample_24_bit_alac.m4a": type alac (moov.trak.mdia.minf.stbl.stsd.alac.alac)
"Untitledsample_24_bit_alac.m4a": decoderConfig = <28 bytes>
follow-up: 4 comment:3 by , 8 years ago
Interesting - AFAICT the sample size in your file is 16 bit in alac atom of the MPEG4 header. Is that what you see as well ?
I think players can determine the sample size from the audio stream so can play correctly ignoring MPEG4 ALAC atom details header except to say it is a ALAC stream.
by , 8 years ago
| Attachment: | Untitledsample_24_bit_alac_patched.m4a added |
|---|
Sample file with alac atom SampleSize set to 24bits
comment:4 by , 8 years ago
Replying to bpa:
I checked the alac atom of the sample that I provided. It does say 16-bit. Anyway, even for your patched sample, which I also checked being 24-bit, Audiotoolbox still treats as 16-bit.
ffmpeg -c:a alac_at -i /Volumes/New\ Volume/Untitledsample_24_bit_alac_patched.m4a -f null -
ffmpeg version 3.4.git Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --extra-cflags='-Ofast -march=native -m64 -finline-functions -funroll-loops -ffunction-sections -fdata-sections -ffp-contract=fast' --arch=x86_64 --cpu=haswell --disable-ffplay --disable-runtime-cpudetect --disable-debug --disable-opencl --disable-avdevice --enable-libfdk-aac --disable-doc --enable-hardcoded-tables
libavutil 56. 18.102 / 56. 18.102
libavcodec 58. 20.104 / 58. 20.104
libavformat 58. 17.101 / 58. 17.101
libavfilter 7. 25.100 / 7. 25.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Volumes/New Volume/Untitledsample_24_bit_alac_patched.m4a':
Metadata:
major_brand : M4A
minor_version : 0
compatible_brands: M4A mp42isom
creation_time : 2018-06-28T17:03:28.000000Z
iTunSMPB : 00000000 00000000 00001000 0000000000190000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Duration: 00:00:37.24, start: 0.000000, bitrate: 219 kb/s
Stream #0:0(eng): Audio: alac (alac / 0x63616C61), 44100 Hz, stereo, s16, 1246 kb/s (default)
Metadata:
creation_time : 2018-06-28T17:03:28.000000Z
Stream mapping:
Stream #0:0 -> #0:0 (alac (alac_at) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
Metadata:
major_brand : M4A
minor_version : 0
compatible_brands: M4A mp42isom
iTunSMPB : 00000000 00000000 00001000 0000000000190000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
encoder : Lavf58.17.101
Stream #0:0(eng): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
Metadata:
creation_time : 2018-06-28T17:03:28.000000Z
encoder : Lavc58.20.104 pcm_s16le
size=N/A time=00:00:07.24 bitrate=N/A speed= 129x
video:0kB audio:1248kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Interesting - AFAICT the sample size in your file is 16 bit in alac atom of the MPEG4 header. Is that what you see as well ?
I think players can determine the sample size from the audio stream so can play correctly ignoring MPEG4 ALAC atom details header except to say it is a ALAC stream.
comment:5 by , 8 years ago
I can't test with alac_at.
So it seems just a coincidence about same error in the mpeg4 header but my bug is different to yours so I'll do a separate report.
comment:6 by , 5 years ago
| Status: | new → open |
|---|
Patch is here and it is even LGTM'ed: https://patchwork.ffmpeg.org/project/ffmpeg/patch/20190708163521.20068-1-macdavis1992@gmail.com/



Sample_24_bit_alac