From: Marton Balint <cus@passwd.hu> To: Lynne via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v2 8/8] aacdec: add a decoder for AAC USAC (xHE-AAC) Date: Tue, 21 May 2024 09:16:57 +0200 (CEST) Message-ID: <f0e439c7-2db1-e69d-7dc6-d192c5b6a659@passwd.hu> (raw) In-Reply-To: <cd5199e6-cf4a-4beb-88d9-2bdce88197e0@lynne.ee> On Sun, 19 May 2024, Lynne via ffmpeg-devel wrote: > On 19/05/2024 21:39, Marton Balint wrote: >> >> >> On Sun, 19 May 2024, Lynne via ffmpeg-devel wrote: >> >>> This commit adds a decoder for the frequency-domain part of USAC. >>> >> [...] >> >>> >>> +/* Finish later */ >>> +static const enum AVChannel usac_ch_pos_to_av[64] = { >>> + [0] = AV_CHAN_FRONT_LEFT, >>> + [1] = AV_CHAN_FRONT_RIGHT, >>> + [2] = AV_CHAN_FRONT_CENTER, >>> + [3] = AV_CHAN_LOW_FREQUENCY, >>> + [4] = AV_CHAN_BACK_LEFT, // unsure >>> + [5] = AV_CHAN_BACK_RIGHT, // unsure >>> + [6] = AV_CHAN_FRONT_LEFT_OF_CENTER, >>> + [7] = AV_CHAN_FRONT_RIGHT_OF_CENTER, >>> + [8] = 0, /* rear surround left is missing */ >>> + [9] = 0, /* rear surround right is missing */ >>> + [10] = AV_CHAN_BACK_CENTER, >>> + [11] = AV_CHAN_SURROUND_DIRECT_LEFT, >>> + [12] = AV_CHAN_SURROUND_DIRECT_RIGHT, >>> + [13] = AV_CHAN_SIDE_LEFT, // fairly sure >>> + [14] = AV_CHAN_SIDE_RIGHT, // fairly sure >>> + [15] = AV_CHAN_WIDE_LEFT, // somewhat confident >>> + [16] = AV_CHAN_WIDE_RIGHT, // somewhat confident >>> + [17] = AV_CHAN_TOP_FRONT_LEFT, >>> + [18] = AV_CHAN_TOP_FRONT_RIGHT, >>> + [19] = AV_CHAN_TOP_FRONT_CENTER, >>> + [20] = AV_CHAN_TOP_BACK_LEFT, >>> + [21] = AV_CHAN_TOP_BACK_RIGHT, >>> + [22] = AV_CHAN_TOP_BACK_CENTER, >>> + [23] = AV_CHAN_TOP_SIDE_LEFT, >>> + [24] = AV_CHAN_TOP_SIDE_RIGHT, >>> + [25] = AV_CHAN_TOP_CENTER, >>> + [26] = AV_CHAN_LOW_FREQUENCY, // actually LFE2 >>> + [27] = AV_CHAN_BOTTOM_FRONT_LEFT, >>> + [28] = AV_CHAN_BOTTOM_FRONT_RIGHT, >>> + [29] = AV_CHAN_BOTTOM_FRONT_CENTER, >>> + [30] = 0, /* top left surround is missing */ >>> + [31] = 0, /* top right surround is missing */ >>> +}; >> >> Some comment would be nice about the source of this table (which document, >> which table). >> >> It looks very similar to the ISO channel positons used in mov_chan. I >> think we follow this mapping in most cases: >> >> Left Surround is SIDE_LEFT >> Right Surround is SIDE_RIGHT >> Rear Surround Left is BACK_LEFT >> Rear Surround Right is BACK_RIGHT >> >> So in your table [4] and [5] should be SIDE, [8] and [9] should be BACK. >> [26] can be AV_CHAN_LOW_FREQUENCY_2, we do have that. >> >> Yes, Left/Right Surround and Left/Right Side Surround will be the same, >> but those are not present in commonly used layouts at the same time. >> >> Regards, >> Marton >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > > Source of the table is ISO/IEC 23003-3, Table 74 — bsOutputChannelPos: > > 0 L left front FL front left > 1 R right front FR front right > 2 C center front FC front centre > 3 LFE low frequency enhancement LFE1 low frequency effects-1 > 4 Ls left surround LS left surround > 5 Rs right surround RS right surround > 6 Lc left front center FLc front left centre > 7 Rc right front center FRc front right centre > 8 Lsr rear surround left BL back left > 9 Rsr rear surround right BR back right > 10 Cs rear center BC back centre > 11 Lsd left surround direct LSd left surround direct > 12 Rsd right surround direct RSd right surround direct > 13 Lss left side surround SL side left > 14 Rss right side surround SR side right > 15 Lw left wide front FLw front left wide > 16 Rw right wide front FRw front right wide > 17 Lv left front vertical height TpFL top front left > 18 Rv right front vertical height TpFR top front right > 19 Cv center front vertical height TpFC top front centre > 20 Lvr left surround vertical height rear TpBL top back left > 21 Rvr right surround vertical height rear TpBR top back right > 22 Cvr center vertical height rear TpBC top back centre > 23 Lvss left vertical height side surround TpSiL top side left > 24 Rvss right vertical height side surround TpSiR top side right > 25 Ts top center surround TpC top centre > 26 LFE2 low frequency enhancement 2 LFE2 low frequency effects-2 > 27 Lb left front vertical bottom BtFL bottom front left > 28 Rb right front vertical bottom BtFR bottom front right > 29 Cb center front vertical bottom BtFC bottom front centre > 30 Lvs left vertical height surround TpLS top left surround > 31 Rvs right vertical height surround TpRS top right surround > > Third field is "Loudspeaker position", last field is "Loudspeaker > position according to IEC 100/1706/CDV/IEC 62574 (TC100)", each prefixed with > an abbreviation. > > I've added the source to the table comment in the code. > > I've also fixed the SIDE/BACK/LFE2 issue in my github repo I linked earlier. Thanks. Later in the code when you actually use this I can see that you are creating a native layout: > + channel_config_idx = get_bits(gb, 5); /* channelConfigurationIndex */ > + if (!channel_config_idx) { > + /* UsacChannelConfig() */ > + uint8_t channel_pos[64]; > + uint8_t nb_channels = get_escaped_value(gb, 5, 8, 16); /* numOutChannels */ > + if (nb_channels >= 64) > + return AVERROR(EINVAL); > + > + av_channel_layout_uninit(&ac->oc[1].ch_layout); > + for (int i = 0; i < nb_channels; i++) > + channel_pos[i] = get_bits(gb, 5); /* bsOutputChannelPos */ > + > + ac->oc[1].ch_layout.order = AV_CHANNEL_ORDER_NATIVE; > + ac->oc[1].ch_layout.nb_channels = nb_channels; > + ac->oc[1].ch_layout.u.mask = 0; > + > + for (int i = 0; i < nb_channels; i++) > + ac->oc[1].ch_layout.u.mask |= 1 << usac_ch_pos_to_av[channel_pos[i]]; > + > + av_channel_layout_copy(&avctx->ch_layout, &ac->oc[1].ch_layout); > + } else { Probably you should create a custom layout here, because the channels are not necessary in native order. We already have a relatively simple way to do that and to fall back to native layouts if possible, here is an example copied from mov_chan: ret = av_channel_layout_custom_init(ch_layout, channels); if (ret < 0) return ret; for (i = 0; i < channels; i++) { enum AVChannel id = layout_map[i].id; ch_layout->u.map[i].id = (id != AV_CHAN_NONE ? id : AV_CHAN_UNKNOWN); } return av_channel_layout_retype(ch_layout, 0, AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL); So you should adapt this accodingly to aac. Regards, Marton _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2024-05-21 7:17 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-05-19 16:54 [FFmpeg-devel] [PATCH v2 0/8] aacdec: add a native xHE-AAC decoder Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 1/8] aacdec: move from scalefactor ranged arrays to flat arrays Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 2/8] aacdec: expose channel layout related functions Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 3/8] aacdec: expose decode_tns Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 4/8] aacdec_dsp: implement 768-point transform and windowing Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 5/8] aactab: add deemphasis tables for USAC Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 6/8] aactab: add tables for the new USAC arithmetic coder Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 7/8] aactab: add new scalefactor offset tables for 96/768pt windows Lynne via ffmpeg-devel 2024-05-19 16:54 ` [FFmpeg-devel] [PATCH v2 8/8] aacdec: add a decoder for AAC USAC (xHE-AAC) Lynne via ffmpeg-devel 2024-05-19 19:39 ` Marton Balint 2024-05-19 19:50 ` Lynne via ffmpeg-devel 2024-05-21 7:16 ` Marton Balint [this message] 2024-05-21 17:58 ` Lynne via ffmpeg-devel 2024-05-21 19:40 ` Marton Balint 2024-05-21 19:52 ` Lynne via ffmpeg-devel 2024-05-21 20:12 ` Marton Balint 2024-05-21 21:33 ` Hendrik Leppkes 2024-05-21 22:09 ` Lynne via ffmpeg-devel 2024-05-22 20:15 ` Marton Balint 2024-05-22 20:25 ` Lynne via ffmpeg-devel 2024-05-19 23:19 ` Michael Niedermayer 2024-05-20 1:11 ` Lynne via ffmpeg-devel
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=f0e439c7-2db1-e69d-7dc6-d192c5b6a659@passwd.hu \ --to=cus@passwd.hu \ --cc=ffmpeg-devel@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