Lines Matching refs:huff
119 static int tm2_read_tree(TM2Context *ctx, int length, TM2Huff *huff)
122 if (length > huff->max_bits) {
124 huff->max_bits);
132 if (huff->num >= huff->max_num) {
136 huff->nums[huff->num] = get_bits_long(&ctx->gb, huff->val_bits);
137 huff->lens[huff->num] = length;
138 huff->num++;
141 if ((ret2 = tm2_read_tree(ctx, length + 1, huff)) < 0)
143 if ((ret = tm2_read_tree(ctx, length + 1, huff)) < 0)
151 TM2Huff huff;
154 huff.val_bits = get_bits(&ctx->gb, 5);
155 huff.max_bits = get_bits(&ctx->gb, 5);
156 huff.min_bits = get_bits(&ctx->gb, 5);
157 huff.nodes = get_bits(&ctx->gb, 17);
158 huff.num = 0;
161 if ((huff.val_bits < 1) || (huff.val_bits > 32) ||
162 (huff.max_bits < 0) || (huff.max_bits > 25)) {
164 "length: %i, max code length: %i\n", huff.val_bits, huff.max_bits);
167 if ((huff.nodes <= 0) || (huff.nodes > 0x10000)) {
169 "nodes: %i\n", huff.nodes);
173 if (huff.max_bits == 0)
174 huff.max_bits = 1;
177 huff.max_num = (huff.nodes + 1) >> 1;
178 huff.nums = av_calloc(huff.max_num, sizeof(int));
179 huff.lens = av_mallocz(huff.max_num);
181 if (!huff.nums || !huff.lens) {
186 res = tm2_read_tree(ctx, 0, &huff);
188 if (res >= 0 && res != huff.max_bits) {
190 res, huff.max_bits);
193 if (huff.num != huff.max_num) {
195 huff.num, huff.max_num);
201 res = ff_init_vlc_from_lengths(&code->vlc, huff.max_bits, huff.max_num,
202 huff.lens, sizeof(huff.lens[0]),
207 code->bits = huff.max_bits;
208 code->length = huff.max_num;
209 code->recode = huff.nums;
210 huff.nums = NULL;
216 av_free(huff.nums);
217 av_free(huff.lens);