The issue is that AOT 45 isn't defined anywhere, and looking at the git blame, it seems to have sprung up through a reordering of the enum, and adding a hole. The spec does not define an explicit AOT for SBR and no SBR, and only uses AOT 42 (previously AOT_USAC_NOSBR), so just rename AOT_USAC to it and replace its use everywhere.
Showing the changes to libavcodec/aac (1 of 2 files). Show all
Unified · Split
| @@ -1046,7 +1046,6 @@ static int decode_audio_specific_config_gb(AACDecContext *ac, · 1045 unmodified lines | ||
| 1046 | 1046 | return ret; |
| 1047 | 1047 | break; |
| 1048 | 1048 | #if CONFIG_AAC_DECODER |
| 1049 | − case AOT_USAC_NOSBR: /* fallthrough */ | |
| 1050 | 1049 | case AOT_USAC: |
| 1051 | 1050 | if ((ret = ff_aac_usac_config_decode(ac, avctx, gb, |
| 1052 | 1051 | oc, m4ac->chan_config)) < 0) |
| @@ -1571,8 +1570,7 @@ int ff_aac_decode_tns(AACDecContext *ac, TemporalNoiseShaping *tns, · 518 unmodified lines | ||
| 1571 | 1570 | GetBitContext *gb, const IndividualChannelStream *ics) |
| 1572 | 1571 | { |
| 1573 | 1572 | int tns_max_order = INT32_MAX; |
| 1574 | − const int is_usac = ac->oc[1].m4ac.object_type == AOT_USAC || | |
| 1575 | − ac->oc[1].m4ac.object_type == AOT_USAC_NOSBR; | |
| 1573 | + const int is_usac = ac->oc[1].m4ac.object_type == AOT_USAC; | |
| 1576 | 1574 | int w, filt, i, coef_len, coef_res, coef_compress; |
| 1577 | 1575 | const int is8 = ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE; |
| 1578 | 1576 | |
| @@ -2421,8 +2419,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, AVFrame *frame, · 842 unmodified lines | ||
| 2421 | 2419 | |
| 2422 | 2420 | ac->tags_mapped = 0; |
| 2423 | 2421 | |
| 2424 | − if ((ac->oc[1].m4ac.object_type == AOT_USAC) || | |
| 2425 | − (ac->oc[1].m4ac.object_type == AOT_USAC_NOSBR)) { | |
| 2422 | + if (ac->oc[1].m4ac.object_type == AOT_USAC) { | |
| 2426 | 2423 | if (ac->is_fixed) { |
| 2427 | 2424 | avpriv_report_missing_feature(ac->avctx, |
| 2428 | 2425 | "AAC USAC fixed-point decoding"); |