[FFmpeg-cvslog] aacdec_usac: remove custom rate_idx and use standard variable for it
ffmpeg | branch: master | Lynne | Sun Jun 16 10:28:05 2024 +0200| [d45e20c37b1144d9c4ff08732a94fee0786dc0b5] | committer: Lynne aacdec_usac: remove custom rate_idx and use standard variable for it m4ac.sampling_index is what aacdec.c uses. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d45e20c37b1144d9c4ff08732a94fee0786dc0b5 --- libavcodec/aac/aacdec.h | 1 - libavcodec/aac/aacdec_usac.c | 35 ++- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/libavcodec/aac/aacdec.h b/libavcodec/aac/aacdec.h index d1a80e9ac1..e5a79a7139 100644 --- a/libavcodec/aac/aacdec.h +++ b/libavcodec/aac/aacdec.h @@ -350,7 +350,6 @@ typedef struct AACUsacElemConfig { typedef struct AACUSACConfig { uint8_t core_sbr_frame_len_idx; /* coreSbrFrameLengthIndex */ -uint8_t rate_idx; uint16_t core_frame_len; uint16_t stream_identifier; diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index eb0e7d3659..e5504117d0 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -316,7 +316,7 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, OutputConfiguration *oc, int channel_config) { -int ret, idx; +int ret; uint8_t freq_idx; uint8_t channel_config_idx; int nb_channels = 0; @@ -334,20 +334,10 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, freq_idx = get_bits(gb, 5); /* usacSamplingFrequencyIndex */ if (freq_idx == 0x1f) { samplerate = get_bits(gb, 24); /* usacSamplingFrequency */ - -/* Try to match up an index for the custom sample rate. - * TODO: not sure if correct */ -for (idx = 0; idx < /* FF_ARRAY_ELEMS(ff_aac_usac_samplerate) */ 32; idx++) { -if (ff_aac_usac_samplerate[idx] >= samplerate) -break; -} -idx = FFMIN(idx, /* FF_ARRAY_ELEMS(ff_aac_usac_samplerate) */ 32 - 1); -usac->rate_idx = idx; } else { samplerate = ff_aac_usac_samplerate[freq_idx]; if (samplerate < 0) return AVERROR(EINVAL); -usac->rate_idx = freq_idx; } m4ac->sample_rate = avctx->sample_rate = samplerate; @@ -364,6 +354,8 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, usac->core_sbr_frame_len_idx == 4 ? 1 : 0; +m4ac->sampling_index = ff_aac_sample_rate_idx(m4ac->sample_rate); + channel_config_idx = get_bits(gb, 5); /* channelConfigurationIndex */ if (!channel_config_idx) { /* UsacChannelConfig() */ @@ -751,18 +743,19 @@ static int setup_sce(AACDecContext *ac, SingleChannelElement *sce, { AACUsacElemData *ue = &sce->ue; IndividualChannelStream *ics = &sce->ics; +const int sampling_index = ac->oc[1].m4ac.sampling_index; /* Setup window parameters */ ics->prev_num_window_groups = FFMAX(ics->num_window_groups, 1); if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) { if (usac->core_frame_len == 768) { -ics->swb_offset = ff_swb_offset_96[usac->rate_idx]; -ics->num_swb = ff_aac_num_swb_96[usac->rate_idx]; +ics->swb_offset = ff_swb_offset_96[sampling_index]; +ics->num_swb = ff_aac_num_swb_96[sampling_index]; } else { -ics->swb_offset = ff_swb_offset_128[usac->rate_idx]; -ics->num_swb = ff_aac_num_swb_128[usac->rate_idx]; +ics->swb_offset = ff_swb_offset_128[sampling_index]; +ics->num_swb = ff_aac_num_swb_128[sampling_index]; } -ics->tns_max_bands = ff_tns_max_bands_usac_128[usac->rate_idx]; +ics->tns_max_bands = ff_tns_max_bands_usac_128[sampling_index]; /* Setup scalefactor grouping. 7 bit mask. */ ics->num_window_groups = 0; @@ -779,13 +772,13 @@ static int setup_sce(AACDecContext *ac, SingleChannelElement *sce, ics->num_windows = 8; } else { if (usac->core_frame_len == 768) { -ics->swb_offset = ff_swb_offset_768[usac->rate_idx]; -ics->num_swb = ff_aac_num_swb_768[usac->rate_idx]; +ics->swb_offset = ff_swb_offset_768[sampling_index]; +ics->num_swb = ff_aac_num_swb_768[sampling_index]; } else { -ics->swb_offset = ff_swb_offset_1024[usac->rate_idx]; -ics->num_swb = ff_aac_num_swb_1024[usac->rate_idx]; +ics->swb_offset = ff_swb_offset_1024[sampling_index]; +ics->num_swb = ff_aac_num_swb_1024[sampling_index]; } -ics->tns_max_bands = ff_tns_max_bands_usac_1024[usac->rate_idx]; +ics->tns_max_bands = ff_tns_max_bands_usac_1024[sampling_index]; ics->group_len[0] = 1; ics->num_window_groups = 1; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg
[FFmpeg-cvslog] aac: expose ff_aac_sample_rate_idx() in aac.h
ffmpeg | branch: master | Lynne | Sun Jun 16 10:20:56 2024 +0200| [50e5b78b79f5b908e249ca5aca23be7be23bedad] | committer: Lynne aac: expose ff_aac_sample_rate_idx() in aac.h The rate index is a value important to both encoders and decoders. USAC needs it as well, so put it into the shared main header. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=50e5b78b79f5b908e249ca5aca23be7be23bedad --- libavcodec/aac.h| 16 libavcodec/aac/aacdec.c | 18 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libavcodec/aac.h b/libavcodec/aac.h index fc6d1361b2..78026a5887 100644 --- a/libavcodec/aac.h +++ b/libavcodec/aac.h @@ -103,4 +103,20 @@ typedef struct Pulse { int amp[4]; } Pulse; +static inline int ff_aac_sample_rate_idx(int rate) +{ + if (92017 <= rate) return 0; +else if (75132 <= rate) return 1; +else if (55426 <= rate) return 2; +else if (46009 <= rate) return 3; +else if (37566 <= rate) return 4; +else if (27713 <= rate) return 5; +else if (23004 <= rate) return 6; +else if (18783 <= rate) return 7; +else if (13856 <= rate) return 8; +else if (11502 <= rate) return 9; +else if (9391 <= rate) return 10; +elsereturn 11; +} + #endif /* AVCODEC_AAC_H */ diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c index eecb6d8f3d..ea2ba84a80 100644 --- a/libavcodec/aac/aacdec.c +++ b/libavcodec/aac/aacdec.c @@ -1095,22 +1095,6 @@ static int decode_audio_specific_config(AACDecContext *ac, sync_extension); } -static int sample_rate_idx (int rate) -{ - if (92017 <= rate) return 0; -else if (75132 <= rate) return 1; -else if (55426 <= rate) return 2; -else if (46009 <= rate) return 3; -else if (37566 <= rate) return 4; -else if (27713 <= rate) return 5; -else if (23004 <= rate) return 6; -else if (18783 <= rate) return 7; -else if (13856 <= rate) return 8; -else if (11502 <= rate) return 9; -else if (9391 <= rate) return 10; -elsereturn 11; -} - static av_cold int decode_close(AVCodecContext *avctx) { AACDecContext *ac = avctx->priv_data; @@ -1211,7 +1195,7 @@ av_cold int ff_aac_decode_init(AVCodecContext *avctx) uint8_t layout_map[MAX_ELEM_ID*4][3]; int layout_map_tags; -sr = sample_rate_idx(avctx->sample_rate); +sr = ff_aac_sample_rate_idx(avctx->sample_rate); ac->oc[1].m4ac.sampling_index = sr; ac->oc[1].m4ac.channels = avctx->ch_layout.nb_channels; ac->oc[1].m4ac.sbr = -1; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] aacdec_ac: fix an overread
ffmpeg | branch: master | Lynne | Sun Jun 16 10:22:25 2024 +0200| [89de2f0de1a41349fe827c00c8f52ca3c12594ad] | committer: Lynne aacdec_ac: fix an overread Fixes reading state->last[i + 1] in ff_aac_ac_get_context for the last array member. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=89de2f0de1a41349fe827c00c8f52ca3c12594ad --- libavcodec/aac/aacdec_ac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/aac/aacdec_ac.h b/libavcodec/aac/aacdec_ac.h index 0b98c0f0d9..b8d4ade4c6 100644 --- a/libavcodec/aac/aacdec_ac.h +++ b/libavcodec/aac/aacdec_ac.h @@ -25,7 +25,7 @@ #include "libavcodec/get_bits.h" typedef struct AACArithState { -uint8_t last[512 /* 2048 / 4 */]; +uint8_t last[512 /* 2048 / 4 */ + 1]; int last_len; uint8_t cur[4]; uint16_t state_pre; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] aacdec_usac: rename noise_scale to noise_bands
ffmpeg | branch: master | Lynne | Sun Jun 16 10:25:26 2024 +0200| [a381cbc7c77bc9477d9c42607a4e849aa20cdd06] | committer: Lynne aacdec_usac: rename noise_scale to noise_bands This was a typo. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a381cbc7c77bc9477d9c42607a4e849aa20cdd06 --- libavcodec/aac/aacdec.h | 2 +- libavcodec/aac/aacdec_usac.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/aac/aacdec.h b/libavcodec/aac/aacdec.h index 86faf6454a..d1a80e9ac1 100644 --- a/libavcodec/aac/aacdec.h +++ b/libavcodec/aac/aacdec.h @@ -315,7 +315,7 @@ typedef struct AACUsacElemConfig { uint8_t freq_scale; /* dflt_freq_scale */ uint8_t alter_scale : 1; /* dflt_alter_scale */ -uint8_t noise_scale; /* dflt_noise_scale */ +uint8_t noise_bands; /* dflt_noise_bands */ uint8_t limiter_bands; /* dflt_limiter_bands */ uint8_t limiter_gains; /* dflt_limiter_gains */ diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index 065bc869d9..eb0e7d3659 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -162,11 +162,11 @@ static void decode_usac_sbr_data(AACUsacElemConfig *e, GetBitContext *gb) e->sbr.dflt.freq_scale = 2; e->sbr.dflt.alter_scale = 1; -e->sbr.dflt.noise_scale = 2; +e->sbr.dflt.noise_bands = 2; if (header_extra1) { e->sbr.dflt.freq_scale = get_bits(gb, 2); /* dflt_freq_scale */ e->sbr.dflt.alter_scale = get_bits1(gb); /* dflt_alter_scale */ -e->sbr.dflt.noise_scale = get_bits(gb, 2); /* dflt_noise_scale */ +e->sbr.dflt.noise_bands = get_bits(gb, 2); /* dflt_noise_bands */ } e->sbr.dflt.limiter_bands = 2; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] aacdec_usac: apply specification fix M55715
ffmpeg | branch: master | Lynne | Wed Jun 12 14:32:22 2024 +0200| [1c3545f053bea8d919608f47d02bc095a006411f] | committer: Lynne aacdec_usac: apply specification fix M55715 > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1c3545f053bea8d919608f47d02bc095a006411f --- libavcodec/aac/aacdec_usac.c | 19 +++ 1 file changed, 19 insertions(+) diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index 98e8c1c0bc..065bc869d9 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -835,6 +835,11 @@ static int decode_usac_stereo_info(AACDecContext *ac, AACUSACConfig *usac, tns_active = get_bits1(gb); us->common_window = get_bits1(gb); +if (!us->common_window || indep_flag) { +memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re)); +memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im)); +} + if (us->common_window) { /* ics_info() */ ics1->window_sequence[1] = ics1->window_sequence[0]; @@ -845,6 +850,20 @@ static int decode_usac_stereo_info(AACDecContext *ac, AACUSACConfig *usac, ics2->use_kb_window[1] = ics2->use_kb_window[0]; ics1->use_kb_window[0] = ics2->use_kb_window[0] = get_bits1(gb); +/* If there's a change in the transform sequence, zero out last frame's + * stereo prediction coefficients */ +if ((ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE && + ics1->window_sequence[1] != EIGHT_SHORT_SEQUENCE) || +(ics1->window_sequence[1] == EIGHT_SHORT_SEQUENCE && + ics1->window_sequence[0] != EIGHT_SHORT_SEQUENCE) || +(ics2->window_sequence[0] == EIGHT_SHORT_SEQUENCE && + ics2->window_sequence[1] != EIGHT_SHORT_SEQUENCE) || +(ics2->window_sequence[1] == EIGHT_SHORT_SEQUENCE && + ics2->window_sequence[0] != EIGHT_SHORT_SEQUENCE)) { +memset(us->prev_alpha_q_re, 0, sizeof(us->prev_alpha_q_re)); +memset(us->prev_alpha_q_im, 0, sizeof(us->prev_alpha_q_im)); +} + if (ics1->window_sequence[0] == EIGHT_SHORT_SEQUENCE) { ics1->max_sfb = ics2->max_sfb = get_bits(gb, 4); ue1->scale_factor_grouping = ue2->scale_factor_grouping = get_bits(gb, 7); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avformat/mov: use the updated default value for horizontal_disparity_adjustment in the eyes box
ffmpeg | branch: master | James Almer | Fri Jun 21 14:08:47 2024 -0300| [127545350fcc57781ba66bf7698904f4a0d2387c] | committer: James Almer avformat/mov: use the updated default value for horizontal_disparity_adjustment in the eyes box Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=127545350fcc57781ba66bf7698904f4a0d2387c --- libavformat/mov.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 2d5b24b9a9..f08fec3fb6 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -6548,7 +6548,7 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom) uint32_t tag, baseline = 0; enum AVStereo3DView view = AV_STEREO3D_VIEW_PACKED; enum AVStereo3DPrimaryEye primary_eye = AV_PRIMARY_EYE_NONE; -AVRational horizontal_disparity_adjustment = { 0, 0 }; +AVRational horizontal_disparity_adjustment = { 0, 1 }; if (c->fc->nb_streams < 1) return 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".