]> git.sesse.net Git - ffmpeg/blob - libavcodec/vp3.c
Another micro-optimization for unpack_vlcs(): Eliminate a possible
[ffmpeg] / libavcodec / vp3.c
1 /*
2  * Copyright (C) 2003-2004 the ffmpeg project
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20
21 /**
22  * @file libavcodec/vp3.c
23  * On2 VP3 Video Decoder
24  *
25  * VP3 Video Decoder by Mike Melanson (mike at multimedia.cx)
26  * For more information about the VP3 coding process, visit:
27  *   http://wiki.multimedia.cx/index.php?title=On2_VP3
28  *
29  * Theora decoder by Alex Beregszaszi
30  */
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <string.h>
35
36 #include "avcodec.h"
37 #include "dsputil.h"
38 #include "get_bits.h"
39
40 #include "vp3data.h"
41 #include "xiph.h"
42
43 #define FRAGMENT_PIXELS 8
44
45 typedef struct Coeff {
46     struct Coeff *next;
47     DCTELEM coeff;
48     uint8_t index;
49 } Coeff;
50
51 //FIXME split things out into their own arrays
52 typedef struct Vp3Fragment {
53     Coeff *next_coeff;
54     /* address of first pixel taking into account which plane the fragment
55      * lives on as well as the plane stride */
56     int first_pixel;
57     /* this is the macroblock that the fragment belongs to */
58     uint16_t macroblock;
59     uint8_t coding_method;
60     int8_t motion_x;
61     int8_t motion_y;
62     uint8_t qpi;
63 } Vp3Fragment;
64
65 #define SB_NOT_CODED        0
66 #define SB_PARTIALLY_CODED  1
67 #define SB_FULLY_CODED      2
68
69 #define MODE_INTER_NO_MV      0
70 #define MODE_INTRA            1
71 #define MODE_INTER_PLUS_MV    2
72 #define MODE_INTER_LAST_MV    3
73 #define MODE_INTER_PRIOR_LAST 4
74 #define MODE_USING_GOLDEN     5
75 #define MODE_GOLDEN_MV        6
76 #define MODE_INTER_FOURMV     7
77 #define CODING_MODE_COUNT     8
78
79 /* special internal mode */
80 #define MODE_COPY             8
81
82 /* There are 6 preset schemes, plus a free-form scheme */
83 static const int ModeAlphabet[6][CODING_MODE_COUNT] =
84 {
85     /* scheme 1: Last motion vector dominates */
86     {    MODE_INTER_LAST_MV,    MODE_INTER_PRIOR_LAST,
87          MODE_INTER_PLUS_MV,    MODE_INTER_NO_MV,
88          MODE_INTRA,            MODE_USING_GOLDEN,
89          MODE_GOLDEN_MV,        MODE_INTER_FOURMV },
90
91     /* scheme 2 */
92     {    MODE_INTER_LAST_MV,    MODE_INTER_PRIOR_LAST,
93          MODE_INTER_NO_MV,      MODE_INTER_PLUS_MV,
94          MODE_INTRA,            MODE_USING_GOLDEN,
95          MODE_GOLDEN_MV,        MODE_INTER_FOURMV },
96
97     /* scheme 3 */
98     {    MODE_INTER_LAST_MV,    MODE_INTER_PLUS_MV,
99          MODE_INTER_PRIOR_LAST, MODE_INTER_NO_MV,
100          MODE_INTRA,            MODE_USING_GOLDEN,
101          MODE_GOLDEN_MV,        MODE_INTER_FOURMV },
102
103     /* scheme 4 */
104     {    MODE_INTER_LAST_MV,    MODE_INTER_PLUS_MV,
105          MODE_INTER_NO_MV,      MODE_INTER_PRIOR_LAST,
106          MODE_INTRA,            MODE_USING_GOLDEN,
107          MODE_GOLDEN_MV,        MODE_INTER_FOURMV },
108
109     /* scheme 5: No motion vector dominates */
110     {    MODE_INTER_NO_MV,      MODE_INTER_LAST_MV,
111          MODE_INTER_PRIOR_LAST, MODE_INTER_PLUS_MV,
112          MODE_INTRA,            MODE_USING_GOLDEN,
113          MODE_GOLDEN_MV,        MODE_INTER_FOURMV },
114
115     /* scheme 6 */
116     {    MODE_INTER_NO_MV,      MODE_USING_GOLDEN,
117          MODE_INTER_LAST_MV,    MODE_INTER_PRIOR_LAST,
118          MODE_INTER_PLUS_MV,    MODE_INTRA,
119          MODE_GOLDEN_MV,        MODE_INTER_FOURMV },
120
121 };
122
123 #define MIN_DEQUANT_VAL 2
124
125 typedef struct Vp3DecodeContext {
126     AVCodecContext *avctx;
127     int theora, theora_tables;
128     int version;
129     int width, height;
130     AVFrame golden_frame;
131     AVFrame last_frame;
132     AVFrame current_frame;
133     int keyframe;
134     DSPContext dsp;
135     int flipped_image;
136
137     int qps[3];
138     int nqps;
139     int last_qps[3];
140
141     int superblock_count;
142     int y_superblock_width;
143     int y_superblock_height;
144     int c_superblock_width;
145     int c_superblock_height;
146     int u_superblock_start;
147     int v_superblock_start;
148     unsigned char *superblock_coding;
149
150     int macroblock_count;
151     int macroblock_width;
152     int macroblock_height;
153
154     int fragment_count;
155     int fragment_width;
156     int fragment_height;
157
158     Vp3Fragment *all_fragments;
159     uint8_t *coeff_counts;
160     Coeff *coeffs;
161     Coeff *next_coeff;
162     int fragment_start[3];
163
164     ScanTable scantable;
165
166     /* tables */
167     uint16_t coded_dc_scale_factor[64];
168     uint32_t coded_ac_scale_factor[64];
169     uint8_t base_matrix[384][64];
170     uint8_t qr_count[2][3];
171     uint8_t qr_size [2][3][64];
172     uint16_t qr_base[2][3][64];
173
174     /* this is a list of indexes into the all_fragments array indicating
175      * which of the fragments are coded */
176     int *coded_fragment_list;
177     int coded_fragment_list_index;
178     int pixel_addresses_initialized;
179
180     VLC dc_vlc[16];
181     VLC ac_vlc_1[16];
182     VLC ac_vlc_2[16];
183     VLC ac_vlc_3[16];
184     VLC ac_vlc_4[16];
185
186     VLC superblock_run_length_vlc;
187     VLC fragment_run_length_vlc;
188     VLC mode_code_vlc;
189     VLC motion_vector_vlc;
190
191     /* these arrays need to be on 16-byte boundaries since SSE2 operations
192      * index into them */
193     DECLARE_ALIGNED_16(int16_t, qmat[3][2][3][64]);     //<qmat[qpi][is_inter][plane]
194
195     /* This table contains superblock_count * 16 entries. Each set of 16
196      * numbers corresponds to the fragment indexes 0..15 of the superblock.
197      * An entry will be -1 to indicate that no entry corresponds to that
198      * index. */
199     int *superblock_fragments;
200
201     /* This table contains superblock_count * 4 entries. Each set of 4
202      * numbers corresponds to the macroblock indexes 0..3 of the superblock.
203      * An entry will be -1 to indicate that no entry corresponds to that
204      * index. */
205     int *superblock_macroblocks;
206
207     /* This table contains macroblock_count * 6 entries. Each set of 6
208      * numbers corresponds to the fragment indexes 0..5 which comprise
209      * the macroblock (4 Y fragments and 2 C fragments). */
210     int *macroblock_fragments;
211     /* This is an array that indicates how a particular macroblock
212      * is coded. */
213     unsigned char *macroblock_coding;
214
215     int first_coded_y_fragment;
216     int first_coded_c_fragment;
217     int last_coded_y_fragment;
218     int last_coded_c_fragment;
219
220     uint8_t edge_emu_buffer[9*2048]; //FIXME dynamic alloc
221     int8_t qscale_table[2048]; //FIXME dynamic alloc (width+15)/16
222
223     /* Huffman decode */
224     int hti;
225     unsigned int hbits;
226     int entries;
227     int huff_code_size;
228     uint16_t huffman_table[80][32][2];
229
230     uint8_t filter_limit_values[64];
231     DECLARE_ALIGNED_8(int, bounding_values_array[256+2]);
232 } Vp3DecodeContext;
233
234 /************************************************************************
235  * VP3 specific functions
236  ************************************************************************/
237
238 /*
239  * This function sets up all of the various blocks mappings:
240  * superblocks <-> fragments, macroblocks <-> fragments,
241  * superblocks <-> macroblocks
242  *
243  * Returns 0 is successful; returns 1 if *anything* went wrong.
244  */
245 static int init_block_mapping(Vp3DecodeContext *s)
246 {
247     int i, j;
248     signed int hilbert_walk_mb[4];
249
250     int current_fragment = 0;
251     int current_width = 0;
252     int current_height = 0;
253     int right_edge = 0;
254     int bottom_edge = 0;
255     int superblock_row_inc = 0;
256     int mapping_index = 0;
257
258     int current_macroblock;
259     int c_fragment;
260
261     static const signed char travel_width[16] = {
262          1,  1,  0, -1,
263          0,  0,  1,  0,
264          1,  0,  1,  0,
265          0, -1,  0,  1
266     };
267
268     static const signed char travel_height[16] = {
269          0,  0,  1,  0,
270          1,  1,  0, -1,
271          0,  1,  0, -1,
272         -1,  0, -1,  0
273     };
274
275     static const signed char travel_width_mb[4] = {
276          1,  0,  1,  0
277     };
278
279     static const signed char travel_height_mb[4] = {
280          0,  1,  0, -1
281     };
282
283     hilbert_walk_mb[0] = 1;
284     hilbert_walk_mb[1] = s->macroblock_width;
285     hilbert_walk_mb[2] = 1;
286     hilbert_walk_mb[3] = -s->macroblock_width;
287
288     /* iterate through each superblock (all planes) and map the fragments */
289     for (i = 0; i < s->superblock_count; i++) {
290         /* time to re-assign the limits? */
291         if (i == 0) {
292
293             /* start of Y superblocks */
294             right_edge = s->fragment_width;
295             bottom_edge = s->fragment_height;
296             current_width = -1;
297             current_height = 0;
298             superblock_row_inc = 3 * s->fragment_width -
299                 (s->y_superblock_width * 4 - s->fragment_width);
300
301             /* the first operation for this variable is to advance by 1 */
302             current_fragment = -1;
303
304         } else if (i == s->u_superblock_start) {
305
306             /* start of U superblocks */
307             right_edge = s->fragment_width / 2;
308             bottom_edge = s->fragment_height / 2;
309             current_width = -1;
310             current_height = 0;
311             superblock_row_inc = 3 * (s->fragment_width / 2) -
312                 (s->c_superblock_width * 4 - s->fragment_width / 2);
313
314             /* the first operation for this variable is to advance by 1 */
315             current_fragment = s->fragment_start[1] - 1;
316
317         } else if (i == s->v_superblock_start) {
318
319             /* start of V superblocks */
320             right_edge = s->fragment_width / 2;
321             bottom_edge = s->fragment_height / 2;
322             current_width = -1;
323             current_height = 0;
324             superblock_row_inc = 3 * (s->fragment_width / 2) -
325                 (s->c_superblock_width * 4 - s->fragment_width / 2);
326
327             /* the first operation for this variable is to advance by 1 */
328             current_fragment = s->fragment_start[2] - 1;
329
330         }
331
332         if (current_width >= right_edge - 1) {
333             /* reset width and move to next superblock row */
334             current_width = -1;
335             current_height += 4;
336
337             /* fragment is now at the start of a new superblock row */
338             current_fragment += superblock_row_inc;
339         }
340
341         /* iterate through all 16 fragments in a superblock */
342         for (j = 0; j < 16; j++) {
343             current_fragment += travel_width[j] + right_edge * travel_height[j];
344             current_width += travel_width[j];
345             current_height += travel_height[j];
346
347             /* check if the fragment is in bounds */
348             if ((current_width < right_edge) &&
349                 (current_height < bottom_edge)) {
350                 s->superblock_fragments[mapping_index] = current_fragment;
351             } else {
352                 s->superblock_fragments[mapping_index] = -1;
353             }
354
355             mapping_index++;
356         }
357     }
358
359     /* initialize the superblock <-> macroblock mapping; iterate through
360      * all of the Y plane superblocks to build this mapping */
361     right_edge = s->macroblock_width;
362     bottom_edge = s->macroblock_height;
363     current_width = -1;
364     current_height = 0;
365     superblock_row_inc = s->macroblock_width -
366         (s->y_superblock_width * 2 - s->macroblock_width);
367     mapping_index = 0;
368     current_macroblock = -1;
369     for (i = 0; i < s->u_superblock_start; i++) {
370
371         if (current_width >= right_edge - 1) {
372             /* reset width and move to next superblock row */
373             current_width = -1;
374             current_height += 2;
375
376             /* macroblock is now at the start of a new superblock row */
377             current_macroblock += superblock_row_inc;
378         }
379
380         /* iterate through each potential macroblock in the superblock */
381         for (j = 0; j < 4; j++) {
382             current_macroblock += hilbert_walk_mb[j];
383             current_width += travel_width_mb[j];
384             current_height += travel_height_mb[j];
385
386             /* check if the macroblock is in bounds */
387             if ((current_width < right_edge) &&
388                 (current_height < bottom_edge)) {
389                 s->superblock_macroblocks[mapping_index] = current_macroblock;
390             } else {
391                 s->superblock_macroblocks[mapping_index] = -1;
392             }
393
394             mapping_index++;
395         }
396     }
397
398     /* initialize the macroblock <-> fragment mapping */
399     current_fragment = 0;
400     current_macroblock = 0;
401     mapping_index = 0;
402     for (i = 0; i < s->fragment_height; i += 2) {
403
404         for (j = 0; j < s->fragment_width; j += 2) {
405
406             s->all_fragments[current_fragment].macroblock = current_macroblock;
407             s->macroblock_fragments[mapping_index++] = current_fragment;
408
409             if (j + 1 < s->fragment_width) {
410                 s->all_fragments[current_fragment + 1].macroblock = current_macroblock;
411                 s->macroblock_fragments[mapping_index++] = current_fragment + 1;
412             } else
413                 s->macroblock_fragments[mapping_index++] = -1;
414
415             if (i + 1 < s->fragment_height) {
416                 s->all_fragments[current_fragment + s->fragment_width].macroblock =
417                     current_macroblock;
418                 s->macroblock_fragments[mapping_index++] =
419                     current_fragment + s->fragment_width;
420             } else
421                 s->macroblock_fragments[mapping_index++] = -1;
422
423             if ((j + 1 < s->fragment_width) && (i + 1 < s->fragment_height)) {
424                 s->all_fragments[current_fragment + s->fragment_width + 1].macroblock =
425                     current_macroblock;
426                 s->macroblock_fragments[mapping_index++] =
427                     current_fragment + s->fragment_width + 1;
428             } else
429                 s->macroblock_fragments[mapping_index++] = -1;
430
431             /* C planes */
432             c_fragment = s->fragment_start[1] +
433                 (i * s->fragment_width / 4) + (j / 2);
434             s->all_fragments[c_fragment].macroblock = s->macroblock_count;
435             s->macroblock_fragments[mapping_index++] = c_fragment;
436
437             c_fragment = s->fragment_start[2] +
438                 (i * s->fragment_width / 4) + (j / 2);
439             s->all_fragments[c_fragment].macroblock = s->macroblock_count;
440             s->macroblock_fragments[mapping_index++] = c_fragment;
441
442             if (j + 2 <= s->fragment_width)
443                 current_fragment += 2;
444             else
445                 current_fragment++;
446             current_macroblock++;
447         }
448
449         current_fragment += s->fragment_width;
450     }
451
452     return 0;  /* successful path out */
453 }
454
455 /*
456  * This function wipes out all of the fragment data.
457  */
458 static void init_frame(Vp3DecodeContext *s, GetBitContext *gb)
459 {
460     int i;
461
462     /* zero out all of the fragment information */
463     s->coded_fragment_list_index = 0;
464     for (i = 0; i < s->fragment_count; i++) {
465         s->coeff_counts[i] = 0;
466         s->all_fragments[i].motion_x = 127;
467         s->all_fragments[i].motion_y = 127;
468         s->all_fragments[i].next_coeff= NULL;
469         s->all_fragments[i].qpi = 0;
470         s->coeffs[i].index=
471         s->coeffs[i].coeff=0;
472         s->coeffs[i].next= NULL;
473     }
474 }
475
476 /*
477  * This function sets up the dequantization tables used for a particular
478  * frame.
479  */
480 static void init_dequantizer(Vp3DecodeContext *s, int qpi)
481 {
482     int ac_scale_factor = s->coded_ac_scale_factor[s->qps[qpi]];
483     int dc_scale_factor = s->coded_dc_scale_factor[s->qps[qpi]];
484     int i, plane, inter, qri, bmi, bmj, qistart;
485
486     for(inter=0; inter<2; inter++){
487         for(plane=0; plane<3; plane++){
488             int sum=0;
489             for(qri=0; qri<s->qr_count[inter][plane]; qri++){
490                 sum+= s->qr_size[inter][plane][qri];
491                 if(s->qps[qpi] <= sum)
492                     break;
493             }
494             qistart= sum - s->qr_size[inter][plane][qri];
495             bmi= s->qr_base[inter][plane][qri  ];
496             bmj= s->qr_base[inter][plane][qri+1];
497             for(i=0; i<64; i++){
498                 int coeff= (  2*(sum    -s->qps[qpi])*s->base_matrix[bmi][i]
499                             - 2*(qistart-s->qps[qpi])*s->base_matrix[bmj][i]
500                             + s->qr_size[inter][plane][qri])
501                            / (2*s->qr_size[inter][plane][qri]);
502
503                 int qmin= 8<<(inter + !i);
504                 int qscale= i ? ac_scale_factor : dc_scale_factor;
505
506                 s->qmat[qpi][inter][plane][s->dsp.idct_permutation[i]]= av_clip((qscale * coeff)/100 * 4, qmin, 4096);
507             }
508             // all DC coefficients use the same quant so as not to interfere with DC prediction
509             s->qmat[qpi][inter][plane][0] = s->qmat[0][inter][plane][0];
510         }
511     }
512
513     memset(s->qscale_table, (FFMAX(s->qmat[0][0][0][1], s->qmat[0][0][1][1])+8)/16, 512); //FIXME finetune
514 }
515
516 /*
517  * This function initializes the loop filter boundary limits if the frame's
518  * quality index is different from the previous frame's.
519  *
520  * The filter_limit_values may not be larger than 127.
521  */
522 static void init_loop_filter(Vp3DecodeContext *s)
523 {
524     int *bounding_values= s->bounding_values_array+127;
525     int filter_limit;
526     int x;
527     int value;
528
529     filter_limit = s->filter_limit_values[s->qps[0]];
530
531     /* set up the bounding values */
532     memset(s->bounding_values_array, 0, 256 * sizeof(int));
533     for (x = 0; x < filter_limit; x++) {
534         bounding_values[-x] = -x;
535         bounding_values[x] = x;
536     }
537     for (x = value = filter_limit; x < 128 && value; x++, value--) {
538         bounding_values[ x] =  value;
539         bounding_values[-x] = -value;
540     }
541     if (value)
542         bounding_values[128] = value;
543     bounding_values[129] = bounding_values[130] = filter_limit * 0x02020202;
544 }
545
546 /*
547  * This function unpacks all of the superblock/macroblock/fragment coding
548  * information from the bitstream.
549  */
550 static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
551 {
552     int bit = 0;
553     int current_superblock = 0;
554     int current_run = 0;
555     int decode_fully_flags = 0;
556     int decode_partial_blocks = 0;
557     int first_c_fragment_seen;
558
559     int i, j;
560     int current_fragment;
561
562     if (s->keyframe) {
563         memset(s->superblock_coding, SB_FULLY_CODED, s->superblock_count);
564
565     } else {
566
567         /* unpack the list of partially-coded superblocks */
568         bit = get_bits1(gb);
569         /* toggle the bit because as soon as the first run length is
570          * fetched the bit will be toggled again */
571         bit ^= 1;
572         while (current_superblock < s->superblock_count) {
573             if (current_run-- == 0) {
574                 bit ^= 1;
575                 current_run = get_vlc2(gb,
576                     s->superblock_run_length_vlc.table, 6, 2);
577                 if (current_run == 33)
578                     current_run += get_bits(gb, 12);
579
580                 /* if any of the superblocks are not partially coded, flag
581                  * a boolean to decode the list of fully-coded superblocks */
582                 if (bit == 0) {
583                     decode_fully_flags = 1;
584                 } else {
585
586                     /* make a note of the fact that there are partially coded
587                      * superblocks */
588                     decode_partial_blocks = 1;
589                 }
590             }
591             s->superblock_coding[current_superblock++] = bit;
592         }
593
594         /* unpack the list of fully coded superblocks if any of the blocks were
595          * not marked as partially coded in the previous step */
596         if (decode_fully_flags) {
597
598             current_superblock = 0;
599             current_run = 0;
600             bit = get_bits1(gb);
601             /* toggle the bit because as soon as the first run length is
602              * fetched the bit will be toggled again */
603             bit ^= 1;
604             while (current_superblock < s->superblock_count) {
605
606                 /* skip any superblocks already marked as partially coded */
607                 if (s->superblock_coding[current_superblock] == SB_NOT_CODED) {
608
609                     if (current_run-- == 0) {
610                         bit ^= 1;
611                         current_run = get_vlc2(gb,
612                             s->superblock_run_length_vlc.table, 6, 2);
613                         if (current_run == 33)
614                             current_run += get_bits(gb, 12);
615                     }
616                     s->superblock_coding[current_superblock] = 2*bit;
617                 }
618                 current_superblock++;
619             }
620         }
621
622         /* if there were partial blocks, initialize bitstream for
623          * unpacking fragment codings */
624         if (decode_partial_blocks) {
625
626             current_run = 0;
627             bit = get_bits1(gb);
628             /* toggle the bit because as soon as the first run length is
629              * fetched the bit will be toggled again */
630             bit ^= 1;
631         }
632     }
633
634     /* figure out which fragments are coded; iterate through each
635      * superblock (all planes) */
636     s->coded_fragment_list_index = 0;
637     s->next_coeff= s->coeffs + s->fragment_count;
638     s->first_coded_y_fragment = s->first_coded_c_fragment = 0;
639     s->last_coded_y_fragment = s->last_coded_c_fragment = -1;
640     first_c_fragment_seen = 0;
641     memset(s->macroblock_coding, MODE_COPY, s->macroblock_count);
642     for (i = 0; i < s->superblock_count; i++) {
643
644         /* iterate through all 16 fragments in a superblock */
645         for (j = 0; j < 16; j++) {
646
647             /* if the fragment is in bounds, check its coding status */
648             current_fragment = s->superblock_fragments[i * 16 + j];
649             if (current_fragment >= s->fragment_count) {
650                 av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_superblocks(): bad fragment number (%d >= %d)\n",
651                     current_fragment, s->fragment_count);
652                 return 1;
653             }
654             if (current_fragment != -1) {
655                 if (s->superblock_coding[i] == SB_NOT_CODED) {
656
657                     /* copy all the fragments from the prior frame */
658                     s->all_fragments[current_fragment].coding_method =
659                         MODE_COPY;
660
661                 } else if (s->superblock_coding[i] == SB_PARTIALLY_CODED) {
662
663                     /* fragment may or may not be coded; this is the case
664                      * that cares about the fragment coding runs */
665                     if (current_run-- == 0) {
666                         bit ^= 1;
667                         current_run = get_vlc2(gb,
668                             s->fragment_run_length_vlc.table, 5, 2);
669                     }
670
671                     if (bit) {
672                         /* default mode; actual mode will be decoded in
673                          * the next phase */
674                         s->all_fragments[current_fragment].coding_method =
675                             MODE_INTER_NO_MV;
676                         s->all_fragments[current_fragment].next_coeff= s->coeffs + current_fragment;
677                         s->coded_fragment_list[s->coded_fragment_list_index] =
678                             current_fragment;
679                         if ((current_fragment >= s->fragment_start[1]) &&
680                             (s->last_coded_y_fragment == -1) &&
681                             (!first_c_fragment_seen)) {
682                             s->first_coded_c_fragment = s->coded_fragment_list_index;
683                             s->last_coded_y_fragment = s->first_coded_c_fragment - 1;
684                             first_c_fragment_seen = 1;
685                         }
686                         s->coded_fragment_list_index++;
687                         s->macroblock_coding[s->all_fragments[current_fragment].macroblock] = MODE_INTER_NO_MV;
688                     } else {
689                         /* not coded; copy this fragment from the prior frame */
690                         s->all_fragments[current_fragment].coding_method =
691                             MODE_COPY;
692                     }
693
694                 } else {
695
696                     /* fragments are fully coded in this superblock; actual
697                      * coding will be determined in next step */
698                     s->all_fragments[current_fragment].coding_method =
699                         MODE_INTER_NO_MV;
700                     s->all_fragments[current_fragment].next_coeff= s->coeffs + current_fragment;
701                     s->coded_fragment_list[s->coded_fragment_list_index] =
702                         current_fragment;
703                     if ((current_fragment >= s->fragment_start[1]) &&
704                         (s->last_coded_y_fragment == -1) &&
705                         (!first_c_fragment_seen)) {
706                         s->first_coded_c_fragment = s->coded_fragment_list_index;
707                         s->last_coded_y_fragment = s->first_coded_c_fragment - 1;
708                         first_c_fragment_seen = 1;
709                     }
710                     s->coded_fragment_list_index++;
711                     s->macroblock_coding[s->all_fragments[current_fragment].macroblock] = MODE_INTER_NO_MV;
712                 }
713             }
714         }
715     }
716
717     if (!first_c_fragment_seen)
718         /* only Y fragments coded in this frame */
719         s->last_coded_y_fragment = s->coded_fragment_list_index - 1;
720     else
721         /* end the list of coded C fragments */
722         s->last_coded_c_fragment = s->coded_fragment_list_index - 1;
723
724     return 0;
725 }
726
727 /*
728  * This function unpacks all the coding mode data for individual macroblocks
729  * from the bitstream.
730  */
731 static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
732 {
733     int i, j, k;
734     int scheme;
735     int current_macroblock;
736     int current_fragment;
737     int coding_mode;
738     int custom_mode_alphabet[CODING_MODE_COUNT];
739
740     if (s->keyframe) {
741         for (i = 0; i < s->fragment_count; i++)
742             s->all_fragments[i].coding_method = MODE_INTRA;
743
744     } else {
745
746         /* fetch the mode coding scheme for this frame */
747         scheme = get_bits(gb, 3);
748
749         /* is it a custom coding scheme? */
750         if (scheme == 0) {
751             for (i = 0; i < 8; i++)
752                 custom_mode_alphabet[i] = MODE_INTER_NO_MV;
753             for (i = 0; i < 8; i++)
754                 custom_mode_alphabet[get_bits(gb, 3)] = i;
755         }
756
757         /* iterate through all of the macroblocks that contain 1 or more
758          * coded fragments */
759         for (i = 0; i < s->u_superblock_start; i++) {
760
761             for (j = 0; j < 4; j++) {
762                 current_macroblock = s->superblock_macroblocks[i * 4 + j];
763                 if ((current_macroblock == -1) ||
764                     (s->macroblock_coding[current_macroblock] == MODE_COPY))
765                     continue;
766                 if (current_macroblock >= s->macroblock_count) {
767                     av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_modes(): bad macroblock number (%d >= %d)\n",
768                         current_macroblock, s->macroblock_count);
769                     return 1;
770                 }
771
772                 /* mode 7 means get 3 bits for each coding mode */
773                 if (scheme == 7)
774                     coding_mode = get_bits(gb, 3);
775                 else if(scheme == 0)
776                     coding_mode = custom_mode_alphabet
777                         [get_vlc2(gb, s->mode_code_vlc.table, 3, 3)];
778                 else
779                     coding_mode = ModeAlphabet[scheme-1]
780                         [get_vlc2(gb, s->mode_code_vlc.table, 3, 3)];
781
782                 s->macroblock_coding[current_macroblock] = coding_mode;
783                 for (k = 0; k < 6; k++) {
784                     current_fragment =
785                         s->macroblock_fragments[current_macroblock * 6 + k];
786                     if (current_fragment == -1)
787                         continue;
788                     if (current_fragment >= s->fragment_count) {
789                         av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_modes(): bad fragment number (%d >= %d)\n",
790                             current_fragment, s->fragment_count);
791                         return 1;
792                     }
793                     if (s->all_fragments[current_fragment].coding_method !=
794                         MODE_COPY)
795                         s->all_fragments[current_fragment].coding_method =
796                             coding_mode;
797                 }
798             }
799         }
800     }
801
802     return 0;
803 }
804
805 /*
806  * This function unpacks all the motion vectors for the individual
807  * macroblocks from the bitstream.
808  */
809 static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
810 {
811     int i, j, k, l;
812     int coding_mode;
813     int motion_x[6];
814     int motion_y[6];
815     int last_motion_x = 0;
816     int last_motion_y = 0;
817     int prior_last_motion_x = 0;
818     int prior_last_motion_y = 0;
819     int current_macroblock;
820     int current_fragment;
821
822     if (s->keyframe)
823         return 0;
824
825     memset(motion_x, 0, 6 * sizeof(int));
826     memset(motion_y, 0, 6 * sizeof(int));
827
828     /* coding mode 0 is the VLC scheme; 1 is the fixed code scheme */
829     coding_mode = get_bits1(gb);
830
831     /* iterate through all of the macroblocks that contain 1 or more
832      * coded fragments */
833     for (i = 0; i < s->u_superblock_start; i++) {
834
835         for (j = 0; j < 4; j++) {
836             current_macroblock = s->superblock_macroblocks[i * 4 + j];
837             if ((current_macroblock == -1) ||
838                 (s->macroblock_coding[current_macroblock] == MODE_COPY))
839                 continue;
840             if (current_macroblock >= s->macroblock_count) {
841                 av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_vectors(): bad macroblock number (%d >= %d)\n",
842                     current_macroblock, s->macroblock_count);
843                 return 1;
844             }
845
846             current_fragment = s->macroblock_fragments[current_macroblock * 6];
847             if (current_fragment >= s->fragment_count) {
848                 av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_vectors(): bad fragment number (%d >= %d\n",
849                     current_fragment, s->fragment_count);
850                 return 1;
851             }
852             switch (s->macroblock_coding[current_macroblock]) {
853
854             case MODE_INTER_PLUS_MV:
855             case MODE_GOLDEN_MV:
856                 /* all 6 fragments use the same motion vector */
857                 if (coding_mode == 0) {
858                     motion_x[0] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
859                     motion_y[0] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
860                 } else {
861                     motion_x[0] = fixed_motion_vector_table[get_bits(gb, 6)];
862                     motion_y[0] = fixed_motion_vector_table[get_bits(gb, 6)];
863                 }
864
865                 for (k = 1; k < 6; k++) {
866                     motion_x[k] = motion_x[0];
867                     motion_y[k] = motion_y[0];
868                 }
869
870                 /* vector maintenance, only on MODE_INTER_PLUS_MV */
871                 if (s->macroblock_coding[current_macroblock] ==
872                     MODE_INTER_PLUS_MV) {
873                     prior_last_motion_x = last_motion_x;
874                     prior_last_motion_y = last_motion_y;
875                     last_motion_x = motion_x[0];
876                     last_motion_y = motion_y[0];
877                 }
878                 break;
879
880             case MODE_INTER_FOURMV:
881                 /* vector maintenance */
882                 prior_last_motion_x = last_motion_x;
883                 prior_last_motion_y = last_motion_y;
884
885                 /* fetch 4 vectors from the bitstream, one for each
886                  * Y fragment, then average for the C fragment vectors */
887                 motion_x[4] = motion_y[4] = 0;
888                 for (k = 0; k < 4; k++) {
889                     for (l = 0; l < s->coded_fragment_list_index; l++)
890                         if (s->coded_fragment_list[l] == s->macroblock_fragments[6*current_macroblock + k])
891                             break;
892                     if (l < s->coded_fragment_list_index) {
893                         if (coding_mode == 0) {
894                             motion_x[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
895                             motion_y[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
896                         } else {
897                             motion_x[k] = fixed_motion_vector_table[get_bits(gb, 6)];
898                             motion_y[k] = fixed_motion_vector_table[get_bits(gb, 6)];
899                         }
900                         last_motion_x = motion_x[k];
901                         last_motion_y = motion_y[k];
902                     } else {
903                         motion_x[k] = 0;
904                         motion_y[k] = 0;
905                     }
906                     motion_x[4] += motion_x[k];
907                     motion_y[4] += motion_y[k];
908                 }
909
910                 motion_x[5]=
911                 motion_x[4]= RSHIFT(motion_x[4], 2);
912                 motion_y[5]=
913                 motion_y[4]= RSHIFT(motion_y[4], 2);
914                 break;
915
916             case MODE_INTER_LAST_MV:
917                 /* all 6 fragments use the last motion vector */
918                 motion_x[0] = last_motion_x;
919                 motion_y[0] = last_motion_y;
920                 for (k = 1; k < 6; k++) {
921                     motion_x[k] = motion_x[0];
922                     motion_y[k] = motion_y[0];
923                 }
924
925                 /* no vector maintenance (last vector remains the
926                  * last vector) */
927                 break;
928
929             case MODE_INTER_PRIOR_LAST:
930                 /* all 6 fragments use the motion vector prior to the
931                  * last motion vector */
932                 motion_x[0] = prior_last_motion_x;
933                 motion_y[0] = prior_last_motion_y;
934                 for (k = 1; k < 6; k++) {
935                     motion_x[k] = motion_x[0];
936                     motion_y[k] = motion_y[0];
937                 }
938
939                 /* vector maintenance */
940                 prior_last_motion_x = last_motion_x;
941                 prior_last_motion_y = last_motion_y;
942                 last_motion_x = motion_x[0];
943                 last_motion_y = motion_y[0];
944                 break;
945
946             default:
947                 /* covers intra, inter without MV, golden without MV */
948                 memset(motion_x, 0, 6 * sizeof(int));
949                 memset(motion_y, 0, 6 * sizeof(int));
950
951                 /* no vector maintenance */
952                 break;
953             }
954
955             /* assign the motion vectors to the correct fragments */
956             for (k = 0; k < 6; k++) {
957                 current_fragment =
958                     s->macroblock_fragments[current_macroblock * 6 + k];
959                 if (current_fragment == -1)
960                     continue;
961                 if (current_fragment >= s->fragment_count) {
962                     av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_vectors(): bad fragment number (%d >= %d)\n",
963                         current_fragment, s->fragment_count);
964                     return 1;
965                 }
966                 s->all_fragments[current_fragment].motion_x = motion_x[k];
967                 s->all_fragments[current_fragment].motion_y = motion_y[k];
968             }
969         }
970     }
971
972     return 0;
973 }
974
975 static int unpack_block_qpis(Vp3DecodeContext *s, GetBitContext *gb)
976 {
977     int qpi, i, j, bit, run_length, blocks_decoded, num_blocks_at_qpi;
978     int num_blocks = s->coded_fragment_list_index;
979
980     for (qpi = 0; qpi < s->nqps-1 && num_blocks > 0; qpi++) {
981         i = blocks_decoded = num_blocks_at_qpi = 0;
982
983         bit = get_bits1(gb);
984
985         do {
986             run_length = get_vlc2(gb, s->superblock_run_length_vlc.table, 6, 2) + 1;
987             if (run_length == 34)
988                 run_length += get_bits(gb, 12);
989             blocks_decoded += run_length;
990
991             if (!bit)
992                 num_blocks_at_qpi += run_length;
993
994             for (j = 0; j < run_length; i++) {
995                 if (i > s->coded_fragment_list_index)
996                     return -1;
997
998                 if (s->all_fragments[s->coded_fragment_list[i]].qpi == qpi) {
999                     s->all_fragments[s->coded_fragment_list[i]].qpi += bit;
1000                     j++;
1001                 }
1002             }
1003
1004             if (run_length == 4129)
1005                 bit = get_bits1(gb);
1006             else
1007                 bit ^= 1;
1008         } while (blocks_decoded < num_blocks);
1009
1010         num_blocks -= num_blocks_at_qpi;
1011     }
1012
1013     return 0;
1014 }
1015
1016 /*
1017  * This function is called by unpack_dct_coeffs() to extract the VLCs from
1018  * the bitstream. The VLCs encode tokens which are used to unpack DCT
1019  * data. This function unpacks all the VLCs for either the Y plane or both
1020  * C planes, and is called for DC coefficients or different AC coefficient
1021  * levels (since different coefficient types require different VLC tables.
1022  *
1023  * This function returns a residual eob run. E.g, if a particular token gave
1024  * instructions to EOB the next 5 fragments and there were only 2 fragments
1025  * left in the current fragment range, 3 would be returned so that it could
1026  * be passed into the next call to this same function.
1027  */
1028 static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
1029                         VLC *table, int coeff_index,
1030                         int first_fragment, int last_fragment,
1031                         int eob_run)
1032 {
1033     int i;
1034     int token;
1035     int zero_run = 0;
1036     DCTELEM coeff = 0;
1037     Vp3Fragment *fragment;
1038     int bits_to_get;
1039
1040     /* local references to structure members to avoid repeated deferences */
1041     uint8_t *perm= s->scantable.permutated;
1042     int *coded_fragment_list = s->coded_fragment_list;
1043     Vp3Fragment *all_fragments = s->all_fragments;
1044     uint8_t *coeff_counts = s->coeff_counts;
1045     VLC_TYPE (*vlc_table)[2] = table->table;
1046
1047     if ((first_fragment >= s->fragment_count) ||
1048         (last_fragment >= s->fragment_count)) {
1049
1050         av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_vlcs(): bad fragment number (%d -> %d ?)\n",
1051             first_fragment, last_fragment);
1052         return 0;
1053     }
1054
1055     for (i = first_fragment; i <= last_fragment; i++) {
1056         int fragment_num = coded_fragment_list[i];
1057
1058         if (coeff_counts[fragment_num] > coeff_index)
1059             continue;
1060         fragment = &all_fragments[fragment_num];
1061
1062         if (!eob_run) {
1063             /* decode a VLC into a token */
1064             token = get_vlc2(gb, vlc_table, 5, 3);
1065             /* use the token to get a zero run, a coefficient, and an eob run */
1066             if (token <= 6) {
1067                 eob_run = eob_run_base[token];
1068                 if (eob_run_get_bits[token])
1069                     eob_run += get_bits(gb, eob_run_get_bits[token]);
1070                 coeff = zero_run = 0;
1071             } else {
1072                 bits_to_get = coeff_get_bits[token];
1073                 if (bits_to_get)
1074                     bits_to_get = get_bits(gb, bits_to_get);
1075                 coeff = coeff_tables[token][bits_to_get];
1076
1077                 zero_run = zero_run_base[token];
1078                 if (zero_run_get_bits[token])
1079                     zero_run += get_bits(gb, zero_run_get_bits[token]);
1080             }
1081         }
1082
1083         if (!eob_run) {
1084             coeff_counts[fragment_num] += zero_run;
1085             if (coeff_counts[fragment_num] < 64){
1086                 fragment->next_coeff->coeff= coeff;
1087                 fragment->next_coeff->index= perm[coeff_counts[fragment_num]++]; //FIXME perm here already?
1088                 fragment->next_coeff->next= s->next_coeff;
1089                 s->next_coeff->next=NULL;
1090                 fragment->next_coeff= s->next_coeff++;
1091             }
1092         } else {
1093             coeff_counts[fragment_num] |= 128;
1094             eob_run--;
1095         }
1096     }
1097
1098     return eob_run;
1099 }
1100
1101 static void reverse_dc_prediction(Vp3DecodeContext *s,
1102                                   int first_fragment,
1103                                   int fragment_width,
1104                                   int fragment_height);
1105 /*
1106  * This function unpacks all of the DCT coefficient data from the
1107  * bitstream.
1108  */
1109 static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
1110 {
1111     int i;
1112     int dc_y_table;
1113     int dc_c_table;
1114     int ac_y_table;
1115     int ac_c_table;
1116     int residual_eob_run = 0;
1117
1118     /* fetch the DC table indexes */
1119     dc_y_table = get_bits(gb, 4);
1120     dc_c_table = get_bits(gb, 4);
1121
1122     /* unpack the Y plane DC coefficients */
1123     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_y_table], 0,
1124         s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
1125
1126     /* reverse prediction of the Y-plane DC coefficients */
1127     reverse_dc_prediction(s, 0, s->fragment_width, s->fragment_height);
1128
1129     /* unpack the C plane DC coefficients */
1130     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
1131         s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
1132
1133     /* reverse prediction of the C-plane DC coefficients */
1134     if (!(s->avctx->flags & CODEC_FLAG_GRAY))
1135     {
1136         reverse_dc_prediction(s, s->fragment_start[1],
1137             s->fragment_width / 2, s->fragment_height / 2);
1138         reverse_dc_prediction(s, s->fragment_start[2],
1139             s->fragment_width / 2, s->fragment_height / 2);
1140     }
1141
1142     /* fetch the AC table indexes */
1143     ac_y_table = get_bits(gb, 4);
1144     ac_c_table = get_bits(gb, 4);
1145
1146     /* unpack the group 1 AC coefficients (coeffs 1-5) */
1147     for (i = 1; i <= 5; i++) {
1148         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_1[ac_y_table], i,
1149             s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
1150
1151         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_1[ac_c_table], i,
1152             s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
1153     }
1154
1155     /* unpack the group 2 AC coefficients (coeffs 6-14) */
1156     for (i = 6; i <= 14; i++) {
1157         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_2[ac_y_table], i,
1158             s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
1159
1160         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_2[ac_c_table], i,
1161             s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
1162     }
1163
1164     /* unpack the group 3 AC coefficients (coeffs 15-27) */
1165     for (i = 15; i <= 27; i++) {
1166         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_3[ac_y_table], i,
1167             s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
1168
1169         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_3[ac_c_table], i,
1170             s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
1171     }
1172
1173     /* unpack the group 4 AC coefficients (coeffs 28-63) */
1174     for (i = 28; i <= 63; i++) {
1175         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_4[ac_y_table], i,
1176             s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
1177
1178         residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_4[ac_c_table], i,
1179             s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
1180     }
1181
1182     return 0;
1183 }
1184
1185 /*
1186  * This function reverses the DC prediction for each coded fragment in
1187  * the frame. Much of this function is adapted directly from the original
1188  * VP3 source code.
1189  */
1190 #define COMPATIBLE_FRAME(x) \
1191   (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
1192 #define FRAME_CODED(x) (s->all_fragments[x].coding_method != MODE_COPY)
1193 #define DC_COEFF(u) (s->coeffs[u].index ? 0 : s->coeffs[u].coeff) //FIXME do somethin to simplify this
1194
1195 static void reverse_dc_prediction(Vp3DecodeContext *s,
1196                                   int first_fragment,
1197                                   int fragment_width,
1198                                   int fragment_height)
1199 {
1200
1201 #define PUL 8
1202 #define PU 4
1203 #define PUR 2
1204 #define PL 1
1205
1206     int x, y;
1207     int i = first_fragment;
1208
1209     int predicted_dc;
1210
1211     /* DC values for the left, up-left, up, and up-right fragments */
1212     int vl, vul, vu, vur;
1213
1214     /* indexes for the left, up-left, up, and up-right fragments */
1215     int l, ul, u, ur;
1216
1217     /*
1218      * The 6 fields mean:
1219      *   0: up-left multiplier
1220      *   1: up multiplier
1221      *   2: up-right multiplier
1222      *   3: left multiplier
1223      */
1224     static const int predictor_transform[16][4] = {
1225         {  0,  0,  0,  0},
1226         {  0,  0,  0,128},        // PL
1227         {  0,  0,128,  0},        // PUR
1228         {  0,  0, 53, 75},        // PUR|PL
1229         {  0,128,  0,  0},        // PU
1230         {  0, 64,  0, 64},        // PU|PL
1231         {  0,128,  0,  0},        // PU|PUR
1232         {  0,  0, 53, 75},        // PU|PUR|PL
1233         {128,  0,  0,  0},        // PUL
1234         {  0,  0,  0,128},        // PUL|PL
1235         { 64,  0, 64,  0},        // PUL|PUR
1236         {  0,  0, 53, 75},        // PUL|PUR|PL
1237         {  0,128,  0,  0},        // PUL|PU
1238        {-104,116,  0,116},        // PUL|PU|PL
1239         { 24, 80, 24,  0},        // PUL|PU|PUR
1240        {-104,116,  0,116}         // PUL|PU|PUR|PL
1241     };
1242
1243     /* This table shows which types of blocks can use other blocks for
1244      * prediction. For example, INTRA is the only mode in this table to
1245      * have a frame number of 0. That means INTRA blocks can only predict
1246      * from other INTRA blocks. There are 2 golden frame coding types;
1247      * blocks encoding in these modes can only predict from other blocks
1248      * that were encoded with these 1 of these 2 modes. */
1249     static const unsigned char compatible_frame[8] = {
1250         1,    /* MODE_INTER_NO_MV */
1251         0,    /* MODE_INTRA */
1252         1,    /* MODE_INTER_PLUS_MV */
1253         1,    /* MODE_INTER_LAST_MV */
1254         1,    /* MODE_INTER_PRIOR_MV */
1255         2,    /* MODE_USING_GOLDEN */
1256         2,    /* MODE_GOLDEN_MV */
1257         1     /* MODE_INTER_FOUR_MV */
1258     };
1259     int current_frame_type;
1260
1261     /* there is a last DC predictor for each of the 3 frame types */
1262     short last_dc[3];
1263
1264     int transform = 0;
1265
1266     vul = vu = vur = vl = 0;
1267     last_dc[0] = last_dc[1] = last_dc[2] = 0;
1268
1269     /* for each fragment row... */
1270     for (y = 0; y < fragment_height; y++) {
1271
1272         /* for each fragment in a row... */
1273         for (x = 0; x < fragment_width; x++, i++) {
1274
1275             /* reverse prediction if this block was coded */
1276             if (s->all_fragments[i].coding_method != MODE_COPY) {
1277
1278                 current_frame_type =
1279                     compatible_frame[s->all_fragments[i].coding_method];
1280
1281                 transform= 0;
1282                 if(x){
1283                     l= i-1;
1284                     vl = DC_COEFF(l);
1285                     if(FRAME_CODED(l) && COMPATIBLE_FRAME(l))
1286                         transform |= PL;
1287                 }
1288                 if(y){
1289                     u= i-fragment_width;
1290                     vu = DC_COEFF(u);
1291                     if(FRAME_CODED(u) && COMPATIBLE_FRAME(u))
1292                         transform |= PU;
1293                     if(x){
1294                         ul= i-fragment_width-1;
1295                         vul = DC_COEFF(ul);
1296                         if(FRAME_CODED(ul) && COMPATIBLE_FRAME(ul))
1297                             transform |= PUL;
1298                     }
1299                     if(x + 1 < fragment_width){
1300                         ur= i-fragment_width+1;
1301                         vur = DC_COEFF(ur);
1302                         if(FRAME_CODED(ur) && COMPATIBLE_FRAME(ur))
1303                             transform |= PUR;
1304                     }
1305                 }
1306
1307                 if (transform == 0) {
1308
1309                     /* if there were no fragments to predict from, use last
1310                      * DC saved */
1311                     predicted_dc = last_dc[current_frame_type];
1312                 } else {
1313
1314                     /* apply the appropriate predictor transform */
1315                     predicted_dc =
1316                         (predictor_transform[transform][0] * vul) +
1317                         (predictor_transform[transform][1] * vu) +
1318                         (predictor_transform[transform][2] * vur) +
1319                         (predictor_transform[transform][3] * vl);
1320
1321                     predicted_dc /= 128;
1322
1323                     /* check for outranging on the [ul u l] and
1324                      * [ul u ur l] predictors */
1325                     if ((transform == 13) || (transform == 15)) {
1326                         if (FFABS(predicted_dc - vu) > 128)
1327                             predicted_dc = vu;
1328                         else if (FFABS(predicted_dc - vl) > 128)
1329                             predicted_dc = vl;
1330                         else if (FFABS(predicted_dc - vul) > 128)
1331                             predicted_dc = vul;
1332                     }
1333                 }
1334
1335                 /* at long last, apply the predictor */
1336                 if(s->coeffs[i].index){
1337                     *s->next_coeff= s->coeffs[i];
1338                     s->coeffs[i].index=0;
1339                     s->coeffs[i].coeff=0;
1340                     s->coeffs[i].next= s->next_coeff++;
1341                 }
1342                 s->coeffs[i].coeff += predicted_dc;
1343                 /* save the DC */
1344                 last_dc[current_frame_type] = DC_COEFF(i);
1345                 if(DC_COEFF(i) && !(s->coeff_counts[i]&127)){
1346                     s->coeff_counts[i]= 129;
1347 //                    s->all_fragments[i].next_coeff= s->next_coeff;
1348                     s->coeffs[i].next= s->next_coeff;
1349                     (s->next_coeff++)->next=NULL;
1350                 }
1351             }
1352         }
1353     }
1354 }
1355
1356 /*
1357  * Perform the final rendering for a particular slice of data.
1358  * The slice number ranges from 0..(macroblock_height - 1).
1359  */
1360 static void render_slice(Vp3DecodeContext *s, int slice)
1361 {
1362     int x;
1363     int16_t *dequantizer;
1364     DECLARE_ALIGNED_16(DCTELEM, block[64]);
1365     int motion_x = 0xdeadbeef, motion_y = 0xdeadbeef;
1366     int motion_halfpel_index;
1367     uint8_t *motion_source;
1368     int plane;
1369     int current_macroblock_entry = slice * s->macroblock_width * 6;
1370
1371     if (slice >= s->macroblock_height)
1372         return;
1373
1374     for (plane = 0; plane < 3; plane++) {
1375         uint8_t *output_plane = s->current_frame.data    [plane];
1376         uint8_t *  last_plane = s->   last_frame.data    [plane];
1377         uint8_t *golden_plane = s-> golden_frame.data    [plane];
1378         int stride            = s->current_frame.linesize[plane];
1379         int plane_width       = s->width  >> !!plane;
1380         int plane_height      = s->height >> !!plane;
1381         int y =        slice *  FRAGMENT_PIXELS << !plane ;
1382         int slice_height = y + (FRAGMENT_PIXELS << !plane);
1383         int i = s->macroblock_fragments[current_macroblock_entry + plane + 3*!!plane];
1384
1385         if (!s->flipped_image) stride = -stride;
1386
1387
1388         if(FFABS(stride) > 2048)
1389             return; //various tables are fixed size
1390
1391         /* for each fragment row in the slice (both of them)... */
1392         for (; y < slice_height; y += 8) {
1393
1394             /* for each fragment in a row... */
1395             for (x = 0; x < plane_width; x += 8, i++) {
1396
1397                 if ((i < 0) || (i >= s->fragment_count)) {
1398                     av_log(s->avctx, AV_LOG_ERROR, "  vp3:render_slice(): bad fragment number (%d)\n", i);
1399                     return;
1400                 }
1401
1402                 /* transform if this block was coded */
1403                 if ((s->all_fragments[i].coding_method != MODE_COPY) &&
1404                     !((s->avctx->flags & CODEC_FLAG_GRAY) && plane)) {
1405
1406                     if ((s->all_fragments[i].coding_method == MODE_USING_GOLDEN) ||
1407                         (s->all_fragments[i].coding_method == MODE_GOLDEN_MV))
1408                         motion_source= golden_plane;
1409                     else
1410                         motion_source= last_plane;
1411
1412                     motion_source += s->all_fragments[i].first_pixel;
1413                     motion_halfpel_index = 0;
1414
1415                     /* sort out the motion vector if this fragment is coded
1416                      * using a motion vector method */
1417                     if ((s->all_fragments[i].coding_method > MODE_INTRA) &&
1418                         (s->all_fragments[i].coding_method != MODE_USING_GOLDEN)) {
1419                         int src_x, src_y;
1420                         motion_x = s->all_fragments[i].motion_x;
1421                         motion_y = s->all_fragments[i].motion_y;
1422                         if(plane){
1423                             motion_x= (motion_x>>1) | (motion_x&1);
1424                             motion_y= (motion_y>>1) | (motion_y&1);
1425                         }
1426
1427                         src_x= (motion_x>>1) + x;
1428                         src_y= (motion_y>>1) + y;
1429                         if ((motion_x == 127) || (motion_y == 127))
1430                             av_log(s->avctx, AV_LOG_ERROR, " help! got invalid motion vector! (%X, %X)\n", motion_x, motion_y);
1431
1432                         motion_halfpel_index = motion_x & 0x01;
1433                         motion_source += (motion_x >> 1);
1434
1435                         motion_halfpel_index |= (motion_y & 0x01) << 1;
1436                         motion_source += ((motion_y >> 1) * stride);
1437
1438                         if(src_x<0 || src_y<0 || src_x + 9 >= plane_width || src_y + 9 >= plane_height){
1439                             uint8_t *temp= s->edge_emu_buffer;
1440                             if(stride<0) temp -= 9*stride;
1441                             else temp += 9*stride;
1442
1443                             ff_emulated_edge_mc(temp, motion_source, stride, 9, 9, src_x, src_y, plane_width, plane_height);
1444                             motion_source= temp;
1445                         }
1446                     }
1447
1448
1449                     /* first, take care of copying a block from either the
1450                      * previous or the golden frame */
1451                     if (s->all_fragments[i].coding_method != MODE_INTRA) {
1452                         /* Note, it is possible to implement all MC cases with
1453                            put_no_rnd_pixels_l2 which would look more like the
1454                            VP3 source but this would be slower as
1455                            put_no_rnd_pixels_tab is better optimzed */
1456                         if(motion_halfpel_index != 3){
1457                             s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index](
1458                                 output_plane + s->all_fragments[i].first_pixel,
1459                                 motion_source, stride, 8);
1460                         }else{
1461                             int d= (motion_x ^ motion_y)>>31; // d is 0 if motion_x and _y have the same sign, else -1
1462                             s->dsp.put_no_rnd_pixels_l2[1](
1463                                 output_plane + s->all_fragments[i].first_pixel,
1464                                 motion_source - d,
1465                                 motion_source + stride + 1 + d,
1466                                 stride, 8);
1467                         }
1468                         dequantizer = s->qmat[s->all_fragments[i].qpi][1][plane];
1469                     }else{
1470                         dequantizer = s->qmat[s->all_fragments[i].qpi][0][plane];
1471                     }
1472
1473                     /* dequantize the DCT coefficients */
1474                     if(s->avctx->idct_algo==FF_IDCT_VP3){
1475                         Coeff *coeff= s->coeffs + i;
1476                         s->dsp.clear_block(block);
1477                         while(coeff->next){
1478                             block[coeff->index]= coeff->coeff * dequantizer[coeff->index];
1479                             coeff= coeff->next;
1480                         }
1481                     }else{
1482                         Coeff *coeff= s->coeffs + i;
1483                         s->dsp.clear_block(block);
1484                         while(coeff->next){
1485                             block[coeff->index]= (coeff->coeff * dequantizer[coeff->index] + 2)>>2;
1486                             coeff= coeff->next;
1487                         }
1488                     }
1489
1490                     /* invert DCT and place (or add) in final output */
1491
1492                     if (s->all_fragments[i].coding_method == MODE_INTRA) {
1493                         if(s->avctx->idct_algo!=FF_IDCT_VP3)
1494                             block[0] += 128<<3;
1495                         s->dsp.idct_put(
1496                             output_plane + s->all_fragments[i].first_pixel,
1497                             stride,
1498                             block);
1499                     } else {
1500                         s->dsp.idct_add(
1501                             output_plane + s->all_fragments[i].first_pixel,
1502                             stride,
1503                             block);
1504                     }
1505                 } else {
1506
1507                     /* copy directly from the previous frame */
1508                     s->dsp.put_pixels_tab[1][0](
1509                         output_plane + s->all_fragments[i].first_pixel,
1510                         last_plane + s->all_fragments[i].first_pixel,
1511                         stride, 8);
1512
1513                 }
1514 #if 0
1515                 /* perform the left edge filter if:
1516                  *   - the fragment is not on the left column
1517                  *   - the fragment is coded in this frame
1518                  *   - the fragment is not coded in this frame but the left
1519                  *     fragment is coded in this frame (this is done instead
1520                  *     of a right edge filter when rendering the left fragment
1521                  *     since this fragment is not available yet) */
1522                 if ((x > 0) &&
1523                     ((s->all_fragments[i].coding_method != MODE_COPY) ||
1524                      ((s->all_fragments[i].coding_method == MODE_COPY) &&
1525                       (s->all_fragments[i - 1].coding_method != MODE_COPY)) )) {
1526                     horizontal_filter(
1527                         output_plane + s->all_fragments[i].first_pixel + 7*stride,
1528                         -stride, s->bounding_values_array + 127);
1529                 }
1530
1531                 /* perform the top edge filter if:
1532                  *   - the fragment is not on the top row
1533                  *   - the fragment is coded in this frame
1534                  *   - the fragment is not coded in this frame but the above
1535                  *     fragment is coded in this frame (this is done instead
1536                  *     of a bottom edge filter when rendering the above
1537                  *     fragment since this fragment is not available yet) */
1538                 if ((y > 0) &&
1539                     ((s->all_fragments[i].coding_method != MODE_COPY) ||
1540                      ((s->all_fragments[i].coding_method == MODE_COPY) &&
1541                       (s->all_fragments[i - fragment_width].coding_method != MODE_COPY)) )) {
1542                     vertical_filter(
1543                         output_plane + s->all_fragments[i].first_pixel - stride,
1544                         -stride, s->bounding_values_array + 127);
1545                 }
1546 #endif
1547             }
1548         }
1549     }
1550
1551      /* this looks like a good place for slice dispatch... */
1552      /* algorithm:
1553       *   if (slice == s->macroblock_height - 1)
1554       *     dispatch (both last slice & 2nd-to-last slice);
1555       *   else if (slice > 0)
1556       *     dispatch (slice - 1);
1557       */
1558
1559     emms_c();
1560 }
1561
1562 static void apply_loop_filter(Vp3DecodeContext *s)
1563 {
1564     int plane;
1565     int x, y;
1566     int *bounding_values= s->bounding_values_array+127;
1567
1568 #if 0
1569     int bounding_values_array[256];
1570     int filter_limit;
1571
1572     /* find the right loop limit value */
1573     for (x = 63; x >= 0; x--) {
1574         if (vp31_ac_scale_factor[x] >= s->quality_index)
1575             break;
1576     }
1577     filter_limit = vp31_filter_limit_values[s->quality_index];
1578
1579     /* set up the bounding values */
1580     memset(bounding_values_array, 0, 256 * sizeof(int));
1581     for (x = 0; x < filter_limit; x++) {
1582         bounding_values[-x - filter_limit] = -filter_limit + x;
1583         bounding_values[-x] = -x;
1584         bounding_values[x] = x;
1585         bounding_values[x + filter_limit] = filter_limit - x;
1586     }
1587 #endif
1588
1589     for (plane = 0; plane < 3; plane++) {
1590         int width           = s->fragment_width  >> !!plane;
1591         int height          = s->fragment_height >> !!plane;
1592         int fragment        = s->fragment_start        [plane];
1593         int stride          = s->current_frame.linesize[plane];
1594         uint8_t *plane_data = s->current_frame.data    [plane];
1595         if (!s->flipped_image) stride = -stride;
1596
1597         for (y = 0; y < height; y++) {
1598
1599             for (x = 0; x < width; x++) {
1600                 /* do not perform left edge filter for left columns frags */
1601                 if ((x > 0) &&
1602                     (s->all_fragments[fragment].coding_method != MODE_COPY)) {
1603                     s->dsp.vp3_h_loop_filter(
1604                         plane_data + s->all_fragments[fragment].first_pixel,
1605                         stride, bounding_values);
1606                 }
1607
1608                 /* do not perform top edge filter for top row fragments */
1609                 if ((y > 0) &&
1610                     (s->all_fragments[fragment].coding_method != MODE_COPY)) {
1611                     s->dsp.vp3_v_loop_filter(
1612                         plane_data + s->all_fragments[fragment].first_pixel,
1613                         stride, bounding_values);
1614                 }
1615
1616                 /* do not perform right edge filter for right column
1617                  * fragments or if right fragment neighbor is also coded
1618                  * in this frame (it will be filtered in next iteration) */
1619                 if ((x < width - 1) &&
1620                     (s->all_fragments[fragment].coding_method != MODE_COPY) &&
1621                     (s->all_fragments[fragment + 1].coding_method == MODE_COPY)) {
1622                     s->dsp.vp3_h_loop_filter(
1623                         plane_data + s->all_fragments[fragment + 1].first_pixel,
1624                         stride, bounding_values);
1625                 }
1626
1627                 /* do not perform bottom edge filter for bottom row
1628                  * fragments or if bottom fragment neighbor is also coded
1629                  * in this frame (it will be filtered in the next row) */
1630                 if ((y < height - 1) &&
1631                     (s->all_fragments[fragment].coding_method != MODE_COPY) &&
1632                     (s->all_fragments[fragment + width].coding_method == MODE_COPY)) {
1633                     s->dsp.vp3_v_loop_filter(
1634                         plane_data + s->all_fragments[fragment + width].first_pixel,
1635                         stride, bounding_values);
1636                 }
1637
1638                 fragment++;
1639             }
1640         }
1641     }
1642 }
1643
1644 /*
1645  * This function computes the first pixel addresses for each fragment.
1646  * This function needs to be invoked after the first frame is allocated
1647  * so that it has access to the plane strides.
1648  */
1649 static void vp3_calculate_pixel_addresses(Vp3DecodeContext *s)
1650 {
1651 #define Y_INITIAL(chroma_shift)  s->flipped_image ? 1  : s->fragment_height >> chroma_shift
1652 #define Y_FINISHED(chroma_shift) s->flipped_image ? y <= s->fragment_height >> chroma_shift : y > 0
1653
1654     int i, x, y;
1655     const int y_inc = s->flipped_image ? 1 : -1;
1656
1657     /* figure out the first pixel addresses for each of the fragments */
1658     /* Y plane */
1659     i = 0;
1660     for (y = Y_INITIAL(0); Y_FINISHED(0); y += y_inc) {
1661         for (x = 0; x < s->fragment_width; x++) {
1662             s->all_fragments[i++].first_pixel =
1663                 s->golden_frame.linesize[0] * y * FRAGMENT_PIXELS -
1664                     s->golden_frame.linesize[0] +
1665                     x * FRAGMENT_PIXELS;
1666         }
1667     }
1668
1669     /* U plane */
1670     i = s->fragment_start[1];
1671     for (y = Y_INITIAL(1); Y_FINISHED(1); y += y_inc) {
1672         for (x = 0; x < s->fragment_width / 2; x++) {
1673             s->all_fragments[i++].first_pixel =
1674                 s->golden_frame.linesize[1] * y * FRAGMENT_PIXELS -
1675                     s->golden_frame.linesize[1] +
1676                     x * FRAGMENT_PIXELS;
1677         }
1678     }
1679
1680     /* V plane */
1681     i = s->fragment_start[2];
1682     for (y = Y_INITIAL(1); Y_FINISHED(1); y += y_inc) {
1683         for (x = 0; x < s->fragment_width / 2; x++) {
1684             s->all_fragments[i++].first_pixel =
1685                 s->golden_frame.linesize[2] * y * FRAGMENT_PIXELS -
1686                     s->golden_frame.linesize[2] +
1687                     x * FRAGMENT_PIXELS;
1688         }
1689     }
1690 }
1691
1692 /*
1693  * This is the ffmpeg/libavcodec API init function.
1694  */
1695 static av_cold int vp3_decode_init(AVCodecContext *avctx)
1696 {
1697     Vp3DecodeContext *s = avctx->priv_data;
1698     int i, inter, plane;
1699     int c_width;
1700     int c_height;
1701     int y_superblock_count;
1702     int c_superblock_count;
1703
1704     if (avctx->codec_tag == MKTAG('V','P','3','0'))
1705         s->version = 0;
1706     else
1707         s->version = 1;
1708
1709     s->avctx = avctx;
1710     s->width = FFALIGN(avctx->width, 16);
1711     s->height = FFALIGN(avctx->height, 16);
1712     avctx->pix_fmt = PIX_FMT_YUV420P;
1713     avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
1714     if(avctx->idct_algo==FF_IDCT_AUTO)
1715         avctx->idct_algo=FF_IDCT_VP3;
1716     dsputil_init(&s->dsp, avctx);
1717
1718     ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct);
1719
1720     /* initialize to an impossible value which will force a recalculation
1721      * in the first frame decode */
1722     for (i = 0; i < 3; i++)
1723         s->qps[i] = -1;
1724
1725     s->y_superblock_width = (s->width + 31) / 32;
1726     s->y_superblock_height = (s->height + 31) / 32;
1727     y_superblock_count = s->y_superblock_width * s->y_superblock_height;
1728
1729     /* work out the dimensions for the C planes */
1730     c_width = s->width / 2;
1731     c_height = s->height / 2;
1732     s->c_superblock_width = (c_width + 31) / 32;
1733     s->c_superblock_height = (c_height + 31) / 32;
1734     c_superblock_count = s->c_superblock_width * s->c_superblock_height;
1735
1736     s->superblock_count = y_superblock_count + (c_superblock_count * 2);
1737     s->u_superblock_start = y_superblock_count;
1738     s->v_superblock_start = s->u_superblock_start + c_superblock_count;
1739     s->superblock_coding = av_malloc(s->superblock_count);
1740
1741     s->macroblock_width = (s->width + 15) / 16;
1742     s->macroblock_height = (s->height + 15) / 16;
1743     s->macroblock_count = s->macroblock_width * s->macroblock_height;
1744
1745     s->fragment_width = s->width / FRAGMENT_PIXELS;
1746     s->fragment_height = s->height / FRAGMENT_PIXELS;
1747
1748     /* fragment count covers all 8x8 blocks for all 3 planes */
1749     s->fragment_count = s->fragment_width * s->fragment_height * 3 / 2;
1750     s->fragment_start[1] = s->fragment_width * s->fragment_height;
1751     s->fragment_start[2] = s->fragment_width * s->fragment_height * 5 / 4;
1752
1753     s->all_fragments = av_malloc(s->fragment_count * sizeof(Vp3Fragment));
1754     s->coeff_counts = av_malloc(s->fragment_count * sizeof(*s->coeff_counts));
1755     s->coeffs = av_malloc(s->fragment_count * sizeof(Coeff) * 65);
1756     s->coded_fragment_list = av_malloc(s->fragment_count * sizeof(int));
1757     s->pixel_addresses_initialized = 0;
1758
1759     if (!s->theora_tables)
1760     {
1761         for (i = 0; i < 64; i++) {
1762             s->coded_dc_scale_factor[i] = vp31_dc_scale_factor[i];
1763             s->coded_ac_scale_factor[i] = vp31_ac_scale_factor[i];
1764             s->base_matrix[0][i] = vp31_intra_y_dequant[i];
1765             s->base_matrix[1][i] = vp31_intra_c_dequant[i];
1766             s->base_matrix[2][i] = vp31_inter_dequant[i];
1767             s->filter_limit_values[i] = vp31_filter_limit_values[i];
1768         }
1769
1770         for(inter=0; inter<2; inter++){
1771             for(plane=0; plane<3; plane++){
1772                 s->qr_count[inter][plane]= 1;
1773                 s->qr_size [inter][plane][0]= 63;
1774                 s->qr_base [inter][plane][0]=
1775                 s->qr_base [inter][plane][1]= 2*inter + (!!plane)*!inter;
1776             }
1777         }
1778
1779         /* init VLC tables */
1780         for (i = 0; i < 16; i++) {
1781
1782             /* DC histograms */
1783             init_vlc(&s->dc_vlc[i], 5, 32,
1784                 &dc_bias[i][0][1], 4, 2,
1785                 &dc_bias[i][0][0], 4, 2, 0);
1786
1787             /* group 1 AC histograms */
1788             init_vlc(&s->ac_vlc_1[i], 5, 32,
1789                 &ac_bias_0[i][0][1], 4, 2,
1790                 &ac_bias_0[i][0][0], 4, 2, 0);
1791
1792             /* group 2 AC histograms */
1793             init_vlc(&s->ac_vlc_2[i], 5, 32,
1794                 &ac_bias_1[i][0][1], 4, 2,
1795                 &ac_bias_1[i][0][0], 4, 2, 0);
1796
1797             /* group 3 AC histograms */
1798             init_vlc(&s->ac_vlc_3[i], 5, 32,
1799                 &ac_bias_2[i][0][1], 4, 2,
1800                 &ac_bias_2[i][0][0], 4, 2, 0);
1801
1802             /* group 4 AC histograms */
1803             init_vlc(&s->ac_vlc_4[i], 5, 32,
1804                 &ac_bias_3[i][0][1], 4, 2,
1805                 &ac_bias_3[i][0][0], 4, 2, 0);
1806         }
1807     } else {
1808         for (i = 0; i < 16; i++) {
1809
1810             /* DC histograms */
1811             if (init_vlc(&s->dc_vlc[i], 5, 32,
1812                 &s->huffman_table[i][0][1], 4, 2,
1813                 &s->huffman_table[i][0][0], 4, 2, 0) < 0)
1814                 goto vlc_fail;
1815
1816             /* group 1 AC histograms */
1817             if (init_vlc(&s->ac_vlc_1[i], 5, 32,
1818                 &s->huffman_table[i+16][0][1], 4, 2,
1819                 &s->huffman_table[i+16][0][0], 4, 2, 0) < 0)
1820                 goto vlc_fail;
1821
1822             /* group 2 AC histograms */
1823             if (init_vlc(&s->ac_vlc_2[i], 5, 32,
1824                 &s->huffman_table[i+16*2][0][1], 4, 2,
1825                 &s->huffman_table[i+16*2][0][0], 4, 2, 0) < 0)
1826                 goto vlc_fail;
1827
1828             /* group 3 AC histograms */
1829             if (init_vlc(&s->ac_vlc_3[i], 5, 32,
1830                 &s->huffman_table[i+16*3][0][1], 4, 2,
1831                 &s->huffman_table[i+16*3][0][0], 4, 2, 0) < 0)
1832                 goto vlc_fail;
1833
1834             /* group 4 AC histograms */
1835             if (init_vlc(&s->ac_vlc_4[i], 5, 32,
1836                 &s->huffman_table[i+16*4][0][1], 4, 2,
1837                 &s->huffman_table[i+16*4][0][0], 4, 2, 0) < 0)
1838                 goto vlc_fail;
1839         }
1840     }
1841
1842     init_vlc(&s->superblock_run_length_vlc, 6, 34,
1843         &superblock_run_length_vlc_table[0][1], 4, 2,
1844         &superblock_run_length_vlc_table[0][0], 4, 2, 0);
1845
1846     init_vlc(&s->fragment_run_length_vlc, 5, 30,
1847         &fragment_run_length_vlc_table[0][1], 4, 2,
1848         &fragment_run_length_vlc_table[0][0], 4, 2, 0);
1849
1850     init_vlc(&s->mode_code_vlc, 3, 8,
1851         &mode_code_vlc_table[0][1], 2, 1,
1852         &mode_code_vlc_table[0][0], 2, 1, 0);
1853
1854     init_vlc(&s->motion_vector_vlc, 6, 63,
1855         &motion_vector_vlc_table[0][1], 2, 1,
1856         &motion_vector_vlc_table[0][0], 2, 1, 0);
1857
1858     /* work out the block mapping tables */
1859     s->superblock_fragments = av_malloc(s->superblock_count * 16 * sizeof(int));
1860     s->superblock_macroblocks = av_malloc(s->superblock_count * 4 * sizeof(int));
1861     s->macroblock_fragments = av_malloc(s->macroblock_count * 6 * sizeof(int));
1862     s->macroblock_coding = av_malloc(s->macroblock_count + 1);
1863     init_block_mapping(s);
1864
1865     for (i = 0; i < 3; i++) {
1866         s->current_frame.data[i] = NULL;
1867         s->last_frame.data[i] = NULL;
1868         s->golden_frame.data[i] = NULL;
1869     }
1870
1871     return 0;
1872
1873 vlc_fail:
1874     av_log(avctx, AV_LOG_FATAL, "Invalid huffman table\n");
1875     return -1;
1876 }
1877
1878 /*
1879  * This is the ffmpeg/libavcodec API frame decode function.
1880  */
1881 static int vp3_decode_frame(AVCodecContext *avctx,
1882                             void *data, int *data_size,
1883                             AVPacket *avpkt)
1884 {
1885     const uint8_t *buf = avpkt->data;
1886     int buf_size = avpkt->size;
1887     Vp3DecodeContext *s = avctx->priv_data;
1888     GetBitContext gb;
1889     static int counter = 0;
1890     int i;
1891
1892     init_get_bits(&gb, buf, buf_size * 8);
1893
1894     if (s->theora && get_bits1(&gb))
1895     {
1896         av_log(avctx, AV_LOG_ERROR, "Header packet passed to frame decoder, skipping\n");
1897         return -1;
1898     }
1899
1900     s->keyframe = !get_bits1(&gb);
1901     if (!s->theora)
1902         skip_bits(&gb, 1);
1903     for (i = 0; i < 3; i++)
1904         s->last_qps[i] = s->qps[i];
1905
1906     s->nqps=0;
1907     do{
1908         s->qps[s->nqps++]= get_bits(&gb, 6);
1909     } while(s->theora >= 0x030200 && s->nqps<3 && get_bits1(&gb));
1910     for (i = s->nqps; i < 3; i++)
1911         s->qps[i] = -1;
1912
1913     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1914         av_log(s->avctx, AV_LOG_INFO, " VP3 %sframe #%d: Q index = %d\n",
1915             s->keyframe?"key":"", counter, s->qps[0]);
1916     counter++;
1917
1918     if (s->qps[0] != s->last_qps[0])
1919         init_loop_filter(s);
1920
1921     for (i = 0; i < s->nqps; i++)
1922         // reinit all dequantizers if the first one changed, because
1923         // the DC of the first quantizer must be used for all matrices
1924         if (s->qps[i] != s->last_qps[i] || s->qps[0] != s->last_qps[0])
1925             init_dequantizer(s, i);
1926
1927     if (avctx->skip_frame >= AVDISCARD_NONKEY && !s->keyframe)
1928         return buf_size;
1929
1930     if (s->keyframe) {
1931         if (!s->theora)
1932         {
1933             skip_bits(&gb, 4); /* width code */
1934             skip_bits(&gb, 4); /* height code */
1935             if (s->version)
1936             {
1937                 s->version = get_bits(&gb, 5);
1938                 if (counter == 1)
1939                     av_log(s->avctx, AV_LOG_DEBUG, "VP version: %d\n", s->version);
1940             }
1941         }
1942         if (s->version || s->theora)
1943         {
1944                 if (get_bits1(&gb))
1945                     av_log(s->avctx, AV_LOG_ERROR, "Warning, unsupported keyframe coding type?!\n");
1946             skip_bits(&gb, 2); /* reserved? */
1947         }
1948
1949         if (s->last_frame.data[0] == s->golden_frame.data[0]) {
1950             if (s->golden_frame.data[0])
1951                 avctx->release_buffer(avctx, &s->golden_frame);
1952             s->last_frame= s->golden_frame; /* ensure that we catch any access to this released frame */
1953         } else {
1954             if (s->golden_frame.data[0])
1955                 avctx->release_buffer(avctx, &s->golden_frame);
1956             if (s->last_frame.data[0])
1957                 avctx->release_buffer(avctx, &s->last_frame);
1958         }
1959
1960         s->golden_frame.reference = 3;
1961         if(avctx->get_buffer(avctx, &s->golden_frame) < 0) {
1962             av_log(s->avctx, AV_LOG_ERROR, "vp3: get_buffer() failed\n");
1963             return -1;
1964         }
1965
1966         /* golden frame is also the current frame */
1967         s->current_frame= s->golden_frame;
1968
1969         /* time to figure out pixel addresses? */
1970         if (!s->pixel_addresses_initialized)
1971         {
1972             vp3_calculate_pixel_addresses(s);
1973             s->pixel_addresses_initialized = 1;
1974         }
1975     } else {
1976         /* allocate a new current frame */
1977         s->current_frame.reference = 3;
1978         if (!s->pixel_addresses_initialized) {
1979             av_log(s->avctx, AV_LOG_ERROR, "vp3: first frame not a keyframe\n");
1980             return -1;
1981         }
1982         if(avctx->get_buffer(avctx, &s->current_frame) < 0) {
1983             av_log(s->avctx, AV_LOG_ERROR, "vp3: get_buffer() failed\n");
1984             return -1;
1985         }
1986     }
1987
1988     s->current_frame.qscale_table= s->qscale_table; //FIXME allocate individual tables per AVFrame
1989     s->current_frame.qstride= 0;
1990
1991     init_frame(s, &gb);
1992
1993     if (unpack_superblocks(s, &gb)){
1994         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_superblocks\n");
1995         return -1;
1996     }
1997     if (unpack_modes(s, &gb)){
1998         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_modes\n");
1999         return -1;
2000     }
2001     if (unpack_vectors(s, &gb)){
2002         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_vectors\n");
2003         return -1;
2004     }
2005     if (unpack_block_qpis(s, &gb)){
2006         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_block_qpis\n");
2007         return -1;
2008     }
2009     if (unpack_dct_coeffs(s, &gb)){
2010         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_dct_coeffs\n");
2011         return -1;
2012     }
2013
2014     for (i = 0; i < s->macroblock_height; i++)
2015         render_slice(s, i);
2016
2017     apply_loop_filter(s);
2018
2019     *data_size=sizeof(AVFrame);
2020     *(AVFrame*)data= s->current_frame;
2021
2022     /* release the last frame, if it is allocated and if it is not the
2023      * golden frame */
2024     if ((s->last_frame.data[0]) &&
2025         (s->last_frame.data[0] != s->golden_frame.data[0]))
2026         avctx->release_buffer(avctx, &s->last_frame);
2027
2028     /* shuffle frames (last = current) */
2029     s->last_frame= s->current_frame;
2030     s->current_frame.data[0]= NULL; /* ensure that we catch any access to this released frame */
2031
2032     return buf_size;
2033 }
2034
2035 /*
2036  * This is the ffmpeg/libavcodec API module cleanup function.
2037  */
2038 static av_cold int vp3_decode_end(AVCodecContext *avctx)
2039 {
2040     Vp3DecodeContext *s = avctx->priv_data;
2041     int i;
2042
2043     av_free(s->superblock_coding);
2044     av_free(s->all_fragments);
2045     av_free(s->coeff_counts);
2046     av_free(s->coeffs);
2047     av_free(s->coded_fragment_list);
2048     av_free(s->superblock_fragments);
2049     av_free(s->superblock_macroblocks);
2050     av_free(s->macroblock_fragments);
2051     av_free(s->macroblock_coding);
2052
2053     for (i = 0; i < 16; i++) {
2054         free_vlc(&s->dc_vlc[i]);
2055         free_vlc(&s->ac_vlc_1[i]);
2056         free_vlc(&s->ac_vlc_2[i]);
2057         free_vlc(&s->ac_vlc_3[i]);
2058         free_vlc(&s->ac_vlc_4[i]);
2059     }
2060
2061     free_vlc(&s->superblock_run_length_vlc);
2062     free_vlc(&s->fragment_run_length_vlc);
2063     free_vlc(&s->mode_code_vlc);
2064     free_vlc(&s->motion_vector_vlc);
2065
2066     /* release all frames */
2067     if (s->golden_frame.data[0] && s->golden_frame.data[0] != s->last_frame.data[0])
2068         avctx->release_buffer(avctx, &s->golden_frame);
2069     if (s->last_frame.data[0])
2070         avctx->release_buffer(avctx, &s->last_frame);
2071     /* no need to release the current_frame since it will always be pointing
2072      * to the same frame as either the golden or last frame */
2073
2074     return 0;
2075 }
2076
2077 static int read_huffman_tree(AVCodecContext *avctx, GetBitContext *gb)
2078 {
2079     Vp3DecodeContext *s = avctx->priv_data;
2080
2081     if (get_bits1(gb)) {
2082         int token;
2083         if (s->entries >= 32) { /* overflow */
2084             av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
2085             return -1;
2086         }
2087         token = get_bits(gb, 5);
2088         //av_log(avctx, AV_LOG_DEBUG, "hti %d hbits %x token %d entry : %d size %d\n", s->hti, s->hbits, token, s->entries, s->huff_code_size);
2089         s->huffman_table[s->hti][token][0] = s->hbits;
2090         s->huffman_table[s->hti][token][1] = s->huff_code_size;
2091         s->entries++;
2092     }
2093     else {
2094         if (s->huff_code_size >= 32) {/* overflow */
2095             av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
2096             return -1;
2097         }
2098         s->huff_code_size++;
2099         s->hbits <<= 1;
2100         if (read_huffman_tree(avctx, gb))
2101             return -1;
2102         s->hbits |= 1;
2103         if (read_huffman_tree(avctx, gb))
2104             return -1;
2105         s->hbits >>= 1;
2106         s->huff_code_size--;
2107     }
2108     return 0;
2109 }
2110
2111 #if CONFIG_THEORA_DECODER
2112 static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
2113 {
2114     Vp3DecodeContext *s = avctx->priv_data;
2115     int visible_width, visible_height;
2116
2117     s->theora = get_bits_long(gb, 24);
2118     av_log(avctx, AV_LOG_DEBUG, "Theora bitstream version %X\n", s->theora);
2119
2120     /* 3.2.0 aka alpha3 has the same frame orientation as original vp3 */
2121     /* but previous versions have the image flipped relative to vp3 */
2122     if (s->theora < 0x030200)
2123     {
2124         s->flipped_image = 1;
2125         av_log(avctx, AV_LOG_DEBUG, "Old (<alpha3) Theora bitstream, flipped image\n");
2126     }
2127
2128     visible_width  = s->width  = get_bits(gb, 16) << 4;
2129     visible_height = s->height = get_bits(gb, 16) << 4;
2130
2131     if(avcodec_check_dimensions(avctx, s->width, s->height)){
2132         av_log(avctx, AV_LOG_ERROR, "Invalid dimensions (%dx%d)\n", s->width, s->height);
2133         s->width= s->height= 0;
2134         return -1;
2135     }
2136
2137     if (s->theora >= 0x030400)
2138     {
2139         skip_bits(gb, 32); /* total number of superblocks in a frame */
2140         // fixme, the next field is 36bits long
2141         skip_bits(gb, 32); /* total number of blocks in a frame */
2142         skip_bits(gb, 4); /* total number of blocks in a frame */
2143         skip_bits(gb, 32); /* total number of macroblocks in a frame */
2144     }
2145
2146     if (s->theora >= 0x030200) {
2147         visible_width  = get_bits_long(gb, 24);
2148         visible_height = get_bits_long(gb, 24);
2149
2150         skip_bits(gb, 8); /* offset x */
2151         skip_bits(gb, 8); /* offset y */
2152     }
2153
2154     skip_bits(gb, 32); /* fps numerator */
2155     skip_bits(gb, 32); /* fps denumerator */
2156     skip_bits(gb, 24); /* aspect numerator */
2157     skip_bits(gb, 24); /* aspect denumerator */
2158
2159     if (s->theora < 0x030200)
2160         skip_bits(gb, 5); /* keyframe frequency force */
2161     skip_bits(gb, 8); /* colorspace */
2162     if (s->theora >= 0x030400)
2163         skip_bits(gb, 2); /* pixel format: 420,res,422,444 */
2164     skip_bits(gb, 24); /* bitrate */
2165
2166     skip_bits(gb, 6); /* quality hint */
2167
2168     if (s->theora >= 0x030200)
2169     {
2170         skip_bits(gb, 5); /* keyframe frequency force */
2171
2172         if (s->theora < 0x030400)
2173             skip_bits(gb, 5); /* spare bits */
2174     }
2175
2176 //    align_get_bits(gb);
2177
2178     if (   visible_width  <= s->width  && visible_width  > s->width-16
2179         && visible_height <= s->height && visible_height > s->height-16)
2180         avcodec_set_dimensions(avctx, visible_width, visible_height);
2181     else
2182         avcodec_set_dimensions(avctx, s->width, s->height);
2183
2184     return 0;
2185 }
2186
2187 static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
2188 {
2189     Vp3DecodeContext *s = avctx->priv_data;
2190     int i, n, matrices, inter, plane;
2191
2192     if (s->theora >= 0x030200) {
2193         n = get_bits(gb, 3);
2194         /* loop filter limit values table */
2195         for (i = 0; i < 64; i++) {
2196             s->filter_limit_values[i] = get_bits(gb, n);
2197             if (s->filter_limit_values[i] > 127) {
2198                 av_log(avctx, AV_LOG_ERROR, "filter limit value too large (%i > 127), clamping\n", s->filter_limit_values[i]);
2199                 s->filter_limit_values[i] = 127;
2200             }
2201         }
2202     }
2203
2204     if (s->theora >= 0x030200)
2205         n = get_bits(gb, 4) + 1;
2206     else
2207         n = 16;
2208     /* quality threshold table */
2209     for (i = 0; i < 64; i++)
2210         s->coded_ac_scale_factor[i] = get_bits(gb, n);
2211
2212     if (s->theora >= 0x030200)
2213         n = get_bits(gb, 4) + 1;
2214     else
2215         n = 16;
2216     /* dc scale factor table */
2217     for (i = 0; i < 64; i++)
2218         s->coded_dc_scale_factor[i] = get_bits(gb, n);
2219
2220     if (s->theora >= 0x030200)
2221         matrices = get_bits(gb, 9) + 1;
2222     else
2223         matrices = 3;
2224
2225     if(matrices > 384){
2226         av_log(avctx, AV_LOG_ERROR, "invalid number of base matrixes\n");
2227         return -1;
2228     }
2229
2230     for(n=0; n<matrices; n++){
2231         for (i = 0; i < 64; i++)
2232             s->base_matrix[n][i]= get_bits(gb, 8);
2233     }
2234
2235     for (inter = 0; inter <= 1; inter++) {
2236         for (plane = 0; plane <= 2; plane++) {
2237             int newqr= 1;
2238             if (inter || plane > 0)
2239                 newqr = get_bits1(gb);
2240             if (!newqr) {
2241                 int qtj, plj;
2242                 if(inter && get_bits1(gb)){
2243                     qtj = 0;
2244                     plj = plane;
2245                 }else{
2246                     qtj= (3*inter + plane - 1) / 3;
2247                     plj= (plane + 2) % 3;
2248                 }
2249                 s->qr_count[inter][plane]= s->qr_count[qtj][plj];
2250                 memcpy(s->qr_size[inter][plane], s->qr_size[qtj][plj], sizeof(s->qr_size[0][0]));
2251                 memcpy(s->qr_base[inter][plane], s->qr_base[qtj][plj], sizeof(s->qr_base[0][0]));
2252             } else {
2253                 int qri= 0;
2254                 int qi = 0;
2255
2256                 for(;;){
2257                     i= get_bits(gb, av_log2(matrices-1)+1);
2258                     if(i>= matrices){
2259                         av_log(avctx, AV_LOG_ERROR, "invalid base matrix index\n");
2260                         return -1;
2261                     }
2262                     s->qr_base[inter][plane][qri]= i;
2263                     if(qi >= 63)
2264                         break;
2265                     i = get_bits(gb, av_log2(63-qi)+1) + 1;
2266                     s->qr_size[inter][plane][qri++]= i;
2267                     qi += i;
2268                 }
2269
2270                 if (qi > 63) {
2271                     av_log(avctx, AV_LOG_ERROR, "invalid qi %d > 63\n", qi);
2272                     return -1;
2273                 }
2274                 s->qr_count[inter][plane]= qri;
2275             }
2276         }
2277     }
2278
2279     /* Huffman tables */
2280     for (s->hti = 0; s->hti < 80; s->hti++) {
2281         s->entries = 0;
2282         s->huff_code_size = 1;
2283         if (!get_bits1(gb)) {
2284             s->hbits = 0;
2285             if(read_huffman_tree(avctx, gb))
2286                 return -1;
2287             s->hbits = 1;
2288             if(read_huffman_tree(avctx, gb))
2289                 return -1;
2290         }
2291     }
2292
2293     s->theora_tables = 1;
2294
2295     return 0;
2296 }
2297
2298 static av_cold int theora_decode_init(AVCodecContext *avctx)
2299 {
2300     Vp3DecodeContext *s = avctx->priv_data;
2301     GetBitContext gb;
2302     int ptype;
2303     uint8_t *header_start[3];
2304     int header_len[3];
2305     int i;
2306
2307     s->theora = 1;
2308
2309     if (!avctx->extradata_size)
2310     {
2311         av_log(avctx, AV_LOG_ERROR, "Missing extradata!\n");
2312         return -1;
2313     }
2314
2315     if (ff_split_xiph_headers(avctx->extradata, avctx->extradata_size,
2316                               42, header_start, header_len) < 0) {
2317         av_log(avctx, AV_LOG_ERROR, "Corrupt extradata\n");
2318         return -1;
2319     }
2320
2321   for(i=0;i<3;i++) {
2322     init_get_bits(&gb, header_start[i], header_len[i]);
2323
2324     ptype = get_bits(&gb, 8);
2325
2326      if (!(ptype & 0x80))
2327      {
2328         av_log(avctx, AV_LOG_ERROR, "Invalid extradata!\n");
2329 //        return -1;
2330      }
2331
2332     // FIXME: Check for this as well.
2333     skip_bits_long(&gb, 6*8); /* "theora" */
2334
2335     switch(ptype)
2336     {
2337         case 0x80:
2338             theora_decode_header(avctx, &gb);
2339                 break;
2340         case 0x81:
2341 // FIXME: is this needed? it breaks sometimes
2342 //            theora_decode_comments(avctx, gb);
2343             break;
2344         case 0x82:
2345             if (theora_decode_tables(avctx, &gb))
2346                 return -1;
2347             break;
2348         default:
2349             av_log(avctx, AV_LOG_ERROR, "Unknown Theora config packet: %d\n", ptype&~0x80);
2350             break;
2351     }
2352     if(ptype != 0x81 && 8*header_len[i] != get_bits_count(&gb))
2353         av_log(avctx, AV_LOG_WARNING, "%d bits left in packet %X\n", 8*header_len[i] - get_bits_count(&gb), ptype);
2354     if (s->theora < 0x030200)
2355         break;
2356   }
2357
2358     return vp3_decode_init(avctx);
2359 }
2360
2361 AVCodec theora_decoder = {
2362     "theora",
2363     CODEC_TYPE_VIDEO,
2364     CODEC_ID_THEORA,
2365     sizeof(Vp3DecodeContext),
2366     theora_decode_init,
2367     NULL,
2368     vp3_decode_end,
2369     vp3_decode_frame,
2370     CODEC_CAP_DR1,
2371     NULL,
2372     .long_name = NULL_IF_CONFIG_SMALL("Theora"),
2373 };
2374 #endif
2375
2376 AVCodec vp3_decoder = {
2377     "vp3",
2378     CODEC_TYPE_VIDEO,
2379     CODEC_ID_VP3,
2380     sizeof(Vp3DecodeContext),
2381     vp3_decode_init,
2382     NULL,
2383     vp3_decode_end,
2384     vp3_decode_frame,
2385     CODEC_CAP_DR1,
2386     NULL,
2387     .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
2388 };