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