Do not pointlessly call ff_alloc_packet multiple times, and fix an infinite loop by clamping the maximum number of bits to target in the algorithm that does not use lambda.
Showing the changes to libavcodec/aaccoder.c (1 of 2 files). Show all
Unified · Split
| @@ -721,6 +721,9 @@ static void search_for_quantizers_twoloop(AVCodecContext *avctx, · 720 unmodified lines | |||
| 721 | int allz = 0; | 721 | int allz = 0; |
| 722 | float minthr = INFINITY; | 722 | float minthr = INFINITY; |
| 723 | 723 | ||
| 724 | // for values above this the decoder might end up in an endless loop | ||
| 725 | // due to always having more bits than what can be encoded. | ||
| 726 | destbits = FFMIN(destbits, 5800); | ||
| 724 | //XXX: some heuristic to determine initial quantizers will reduce search time | 727 | //XXX: some heuristic to determine initial quantizers will reduce search time |
| 725 | //determine zero bands and upper limits | 728 | //determine zero bands and upper limits |
| 726 | for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) { | 729 | for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) { |