[FFmpeg-trac] #10470(undetermined:new): FLAC in Ogg decoding is missing WAVEFORMATEXTENSIBLE_CHANNEL_MASK support for non-standard channel layouts

FFmpeg trac at avcodec.org
Thu Jul 13 16:09:38 EEST 2023


#10470: FLAC in Ogg decoding is missing WAVEFORMATEXTENSIBLE_CHANNEL_MASK support
for non-standard channel layouts
-------------------------------------+-------------------------------------
             Reporter:  John Regan   |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  git-
  undetermined                       |  master
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 When decoding: ffmpeg honors the WAVEFORMATEXTENSIBLE_CHANNEL_MASK Vorbis
 comment in a FLAC file, but ignores it for a FLAC-in-Ogg file.

 How to reproduce:

 Using the attached "2_point_1.wav" file (contains a 2.1 channel layout -
 Front Left, Front Right, LFE):

 {{{

 # verify wav file has a 2.1 channel layout:
 % ffprobe -v error -show_entries stream=channel_layout 2_point_1.wav
 [STREAM]
 channel_layout=2.1
 [/STREAM]

 # encode with FLAC in Ogg with reference implementation
 flac 2_point_1.wav --ogg -o 2_point_1.ogg

 flac 1.4.3
 Copyright (C) 2000-2009  Josh Coalson, 2011-2023  Xiph.Org Foundation
 flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
 are
 welcome to redistribute it under certain conditions.  Type `flac' for
 details.

 2_point_1.wav: WARNING: skipping unknown chunk 'LIST' (use --keep-foreign-
 metadata to keep)
 2_point_1.wav: wrote 157016 bytes, ratio=0.091



 # encode to FLAC (native) with reference implementation
 % flac 2_point_1.wav -o 2_point_1.flac

 flac 1.4.3
 Copyright (C) 2000-2009  Josh Coalson, 2011-2023  Xiph.Org Foundation
 flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
 are
 welcome to redistribute it under certain conditions.  Type `flac' for
 details.

 2_point_1.wav: WARNING: skipping unknown chunk 'LIST' (use --keep-foreign-
 metadata to keep)
 2_point_1.wav: wrote 156987 bytes, ratio=0.091


 # decode from FLAC in Ogg with ffmpeg

 % ffmpeg -i 2_point_1.ogg 2_point_1_from_ogg.wav
 ffmpeg version N-111429-g9a2335444b Copyright (c) 2000-2023 the FFmpeg
 developers
   built with gcc 13.1.1 (GCC) 20230429
   configuration:
   libavutil      58. 14.100 / 58. 14.100
   libavcodec     60. 22.100 / 60. 22.100
   libavformat    60. 10.100 / 60. 10.100
   libavdevice    60.  2.101 / 60.  2.101
   libavfilter     9.  8.102 /  9.  8.102
   libswscale      7.  3.100 /  7.  3.100
   libswresample   4. 11.100 /  4. 11.100
 Input #0, ogg, from '2_point_1.ogg':
   Duration: 00:00:06.00, start: 0.000000, bitrate: 210 kb/s
   Stream #0:0: Audio: flac, 48000 Hz, 3.0, s16
     Metadata:
       WAVEFORMATEXTENSIBLE_CHANNEL_MASK: 0x000B
 Stream mapping:
   Stream #0:0 -> #0:0 (flac (native) -> pcm_s16le (native))
 Press [q] to stop, [?] for help
 Output #0, wav, to '2_point_1_from_ogg.wav':
   Metadata:
     ISFT            : Lavf60.10.100
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 3.0,
 s16, 2304 kb/s
     Metadata:
       WAVEFORMATEXTENSIBLE_CHANNEL_MASK: 0x000B
       encoder         : Lavc60.22.100 pcm_s16le
 [out#0/wav @ 0x5579caa03d80] video:0kB audio:1688kB subtitle:0kB other
 streams:0kB global headers:0kB muxing overhead: 0.005903%
 size=    1688kB time=00:00:05.97 bitrate=2314.4kbits/s speed=1.5e+03x

 # decode from FLAC (native) with ffmpeg
 % ffmpeg -i 2_point_1.flac 2_point_1_from_flac.wav
 ffmpeg version N-111429-g9a2335444b Copyright (c) 2000-2023 the FFmpeg
 developers
   built with gcc 13.1.1 (GCC) 20230429
   configuration:
   libavutil      58. 14.100 / 58. 14.100
   libavcodec     60. 22.100 / 60. 22.100
   libavformat    60. 10.100 / 60. 10.100
   libavdevice    60.  2.101 / 60.  2.101
   libavfilter     9.  8.102 /  9.  8.102
   libswscale      7.  3.100 /  7.  3.100
   libswresample   4. 11.100 /  4. 11.100
 Input #0, flac, from '2_point_1.flac':
   Duration: 00:00:06.00, start: 0.000000, bitrate: 209 kb/s
   Stream #0:0: Audio: flac, 48000 Hz, 2.1, s16
 Stream mapping:
   Stream #0:0 -> #0:0 (flac (native) -> pcm_s16le (native))
 Press [q] to stop, [?] for help
 Output #0, wav, to '2_point_1_from_flac.wav':
   Metadata:
     ISFT            : Lavf60.10.100
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2.1,
 s16, 2304 kb/s
     Metadata:
       encoder         : Lavc60.22.100 pcm_s16le
 [out#0/wav @ 0x564b6b34fdc0] video:0kB audio:1688kB subtitle:0kB other
 streams:0kB global headers:0kB muxing overhead: 0.005903%
 size=    1688kB time=00:00:05.97 bitrate=2314.4kbits/s speed=1.61e+03x

 # verify channel layouts of wave files:
 % ffprobe -v error -show_entries stream=channel_layout
 2_point_1_from_ogg.wav
 [STREAM]
 channel_layout=3.0
 [/STREAM]
 % ffprobe -v error -show_entries stream=channel_layout
 2_point_1_from_flac.wav
 [STREAM]
 channel_layout=2.1
 [/STREAM]


 }}}

 WAVEFORMATEXTENSIBLE_CHANNEL_MASK works fine with native FLAC, but is
 ignored when wrapped in Ogg.
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/10470>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list