Do loop filter per-row rather than per-frame
[ffmpeg.git] / 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                 /* vector maintenance, only on MODE_INTER_PLUS_MV */
895                 if (s->macroblock_coding[current_macroblock] ==
896                     MODE_INTER_PLUS_MV) {
897                     prior_last_motion_x = last_motion_x;
898                     prior_last_motion_y = last_motion_y;
899                     last_motion_x = motion_x[0];
900                     last_motion_y = motion_y[0];
901                 }
902                 break;
903
904             case MODE_INTER_FOURMV:
905                 /* vector maintenance */
906                 prior_last_motion_x = last_motion_x;
907                 prior_last_motion_y = last_motion_y;
908
909                 /* fetch 4 vectors from the bitstream, one for each
910                  * Y fragment, then average for the C fragment vectors */
911                 motion_x[4] = motion_y[4] = 0;
912                 for (k = 0; k < 4; k++) {
913                     for (l = 0; l < s->coded_fragment_list_index; l++)
914                         if (s->coded_fragment_list[l] == s->macroblock_fragments[6*current_macroblock + k])
915                             break;
916                     if (l < s->coded_fragment_list_index) {
917                         if (coding_mode == 0) {
918                             motion_x[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
919                             motion_y[k] = motion_vector_table[get_vlc2(gb, s->motion_vector_vlc.table, 6, 2)];
920                         } else {
921                             motion_x[k] = fixed_motion_vector_table[get_bits(gb, 6)];
922                             motion_y[k] = fixed_motion_vector_table[get_bits(gb, 6)];
923                         }
924                         last_motion_x = motion_x[k];
925                         last_motion_y = motion_y[k];
926                     } else {
927                         motion_x[k] = 0;
928                         motion_y[k] = 0;
929                     }
930                     motion_x[4] += motion_x[k];
931                     motion_y[4] += motion_y[k];
932                 }
933
934                 motion_x[5]=
935                 motion_x[4]= RSHIFT(motion_x[4], 2);
936                 motion_y[5]=
937                 motion_y[4]= RSHIFT(motion_y[4], 2);
938                 break;
939
940             case MODE_INTER_LAST_MV:
941                 /* all 6 fragments use the last motion vector */
942                 motion_x[0] = last_motion_x;
943                 motion_y[0] = last_motion_y;
944
945                 /* no vector maintenance (last vector remains the
946                  * last vector) */
947                 break;
948
949             case MODE_INTER_PRIOR_LAST:
950                 /* all 6 fragments use the motion vector prior to the
951                  * last motion vector */
952                 motion_x[0] = prior_last_motion_x;
953                 motion_y[0] = prior_last_motion_y;
954
955                 /* vector maintenance */
956                 prior_last_motion_x = last_motion_x;
957                 prior_last_motion_y = last_motion_y;
958                 last_motion_x = motion_x[0];
959                 last_motion_y = motion_y[0];
960                 break;
961
962             default:
963                 /* covers intra, inter without MV, golden without MV */
964                 motion_x[0] = 0;
965                 motion_y[0] = 0;
966
967                 /* no vector maintenance */
968                 break;
969             }
970
971             /* assign the motion vectors to the correct fragments */
972             for (k = 0; k < 6; k++) {
973                 current_fragment =
974                     s->macroblock_fragments[current_macroblock * 6 + k];
975                 if (current_fragment == -1)
976                     continue;
977                 if (current_fragment >= s->fragment_count) {
978                     av_log(s->avctx, AV_LOG_ERROR, "  vp3:unpack_vectors(): bad fragment number (%d >= %d)\n",
979                         current_fragment, s->fragment_count);
980                     return 1;
981                 }
982                 if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
983                     s->all_fragments[current_fragment].motion_x = motion_x[k];
984                     s->all_fragments[current_fragment].motion_y = motion_y[k];
985                 } else {
986                     s->all_fragments[current_fragment].motion_x = motion_x[0];
987                     s->all_fragments[current_fragment].motion_y = motion_y[0];
988                 }
989             }
990         }
991     }
992
993     return 0;
994 }
995
996 static int unpack_block_qpis(Vp3DecodeContext *s, GetBitContext *gb)
997 {
998     int qpi, i, j, bit, run_length, blocks_decoded, num_blocks_at_qpi;
999     int num_blocks = s->coded_fragment_list_index;
1000
1001     for (qpi = 0; qpi < s->nqps-1 && num_blocks > 0; qpi++) {
1002         i = blocks_decoded = num_blocks_at_qpi = 0;
1003
1004         bit = get_bits1(gb);
1005
1006         do {
1007             run_length = get_vlc2(gb, s->superblock_run_length_vlc.table, 6, 2) + 1;
1008             if (run_length == 34)
1009                 run_length += get_bits(gb, 12);
1010             blocks_decoded += run_length;
1011
1012             if (!bit)
1013                 num_blocks_at_qpi += run_length;
1014
1015             for (j = 0; j < run_length; i++) {
1016                 if (i >= s->coded_fragment_list_index)
1017                     return -1;
1018
1019                 if (s->all_fragments[s->coded_fragment_list[i]].qpi == qpi) {
1020                     s->all_fragments[s->coded_fragment_list[i]].qpi += bit;
1021                     j++;
1022                 }
1023             }
1024
1025             if (run_length == 4129)
1026                 bit = get_bits1(gb);
1027             else
1028                 bit ^= 1;
1029         } while (blocks_decoded < num_blocks);
1030
1031         num_blocks -= num_blocks_at_qpi;
1032     }
1033
1034     return 0;
1035 }
1036
1037 /*
1038  * This function is called by unpack_dct_coeffs() to extract the VLCs from
1039  * the bitstream. The VLCs encode tokens which are used to unpack DCT
1040  * data. This function unpacks all the VLCs for either the Y plane or both
1041  * C planes, and is called for DC coefficients or different AC coefficient
1042  * levels (since different coefficient types require different VLC tables.
1043  *
1044  * This function returns a residual eob run. E.g, if a particular token gave
1045  * instructions to EOB the next 5 fragments and there were only 2 fragments
1046  * left in the current fragment range, 3 would be returned so that it could
1047  * be passed into the next call to this same function.
1048  */
1049 static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
1050                         VLC *table, int coeff_index,
1051                         int y_plane,
1052                         int eob_run)
1053 {
1054     int i;
1055     int token;
1056     int zero_run = 0;
1057     DCTELEM coeff = 0;
1058     Vp3Fragment *fragment;
1059     int bits_to_get;
1060     int next_fragment;
1061     int previous_fragment;
1062     int fragment_num;
1063     int *list_head;
1064
1065     /* local references to structure members to avoid repeated deferences */
1066     uint8_t *perm= s->scantable.permutated;
1067     int *coded_fragment_list = s->coded_fragment_list;
1068     Vp3Fragment *all_fragments = s->all_fragments;
1069     uint8_t *coeff_counts = s->coeff_counts;
1070     VLC_TYPE (*vlc_table)[2] = table->table;
1071     int *fast_fragment_list = s->fast_fragment_list;
1072
1073     if (y_plane) {
1074         next_fragment = s->fragment_list_y_head;
1075         list_head = &s->fragment_list_y_head;
1076     } else {
1077         next_fragment = s->fragment_list_c_head;
1078         list_head = &s->fragment_list_c_head;
1079     }
1080
1081     i = next_fragment;
1082     previous_fragment = -1;  /* this indicates that the previous fragment is actually the list head */
1083     while (i != -1) {
1084         fragment_num = coded_fragment_list[i];
1085
1086         if (coeff_counts[fragment_num] > coeff_index) {
1087             previous_fragment = i;
1088             i = fast_fragment_list[i];
1089             continue;
1090         }
1091         fragment = &all_fragments[fragment_num];
1092
1093         if (!eob_run) {
1094             /* decode a VLC into a token */
1095             token = get_vlc2(gb, vlc_table, 5, 3);
1096             /* use the token to get a zero run, a coefficient, and an eob run */
1097             if (token <= 6) {
1098                 eob_run = eob_run_base[token];
1099                 if (eob_run_get_bits[token])
1100                     eob_run += get_bits(gb, eob_run_get_bits[token]);
1101                 coeff = zero_run = 0;
1102             } else {
1103                 bits_to_get = coeff_get_bits[token];
1104                 if (bits_to_get)
1105                     bits_to_get = get_bits(gb, bits_to_get);
1106                 coeff = coeff_tables[token][bits_to_get];
1107
1108                 zero_run = zero_run_base[token];
1109                 if (zero_run_get_bits[token])
1110                     zero_run += get_bits(gb, zero_run_get_bits[token]);
1111             }
1112         }
1113
1114         if (!eob_run) {
1115             coeff_counts[fragment_num] += zero_run;
1116             if (coeff_counts[fragment_num] < 64){
1117                 fragment->next_coeff->coeff= coeff;
1118                 fragment->next_coeff->index= perm[coeff_counts[fragment_num]++]; //FIXME perm here already?
1119                 fragment->next_coeff->next= s->next_coeff;
1120                 s->next_coeff->next=NULL;
1121                 fragment->next_coeff= s->next_coeff++;
1122             }
1123             /* previous fragment is now this fragment */
1124             previous_fragment = i;
1125         } else {
1126             coeff_counts[fragment_num] |= 128;
1127             eob_run--;
1128             /* remove this fragment from the list */
1129             if (previous_fragment != -1)
1130                 fast_fragment_list[previous_fragment] = fast_fragment_list[i];
1131             else
1132                 *list_head = fast_fragment_list[i];
1133             /* previous fragment remains unchanged */
1134         }
1135
1136         i = fast_fragment_list[i];
1137     }
1138
1139     return eob_run;
1140 }
1141
1142 static void reverse_dc_prediction(Vp3DecodeContext *s,
1143                                   int first_fragment,
1144                                   int fragment_width,
1145                                   int fragment_height);
1146 /*
1147  * This function unpacks all of the DCT coefficient data from the
1148  * bitstream.
1149  */
1150 static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
1151 {
1152     int i;
1153     int dc_y_table;
1154     int dc_c_table;
1155     int ac_y_table;
1156     int ac_c_table;
1157     int residual_eob_run = 0;
1158     VLC *y_tables[64];
1159     VLC *c_tables[64];
1160
1161     /* fetch the DC table indexes */
1162     dc_y_table = get_bits(gb, 4);
1163     dc_c_table = get_bits(gb, 4);
1164
1165     /* unpack the Y plane DC coefficients */
1166     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_y_table], 0,
1167         1, residual_eob_run);
1168
1169     /* reverse prediction of the Y-plane DC coefficients */
1170     reverse_dc_prediction(s, 0, s->fragment_width, s->fragment_height);
1171
1172     /* unpack the C plane DC coefficients */
1173     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
1174         0, residual_eob_run);
1175
1176     /* reverse prediction of the C-plane DC coefficients */
1177     if (!(s->avctx->flags & CODEC_FLAG_GRAY))
1178     {
1179         reverse_dc_prediction(s, s->fragment_start[1],
1180             s->fragment_width / 2, s->fragment_height / 2);
1181         reverse_dc_prediction(s, s->fragment_start[2],
1182             s->fragment_width / 2, s->fragment_height / 2);
1183     }
1184
1185     /* fetch the AC table indexes */
1186     ac_y_table = get_bits(gb, 4);
1187     ac_c_table = get_bits(gb, 4);
1188
1189     /* build tables of AC VLC tables */
1190     for (i = 1; i <= 5; i++) {
1191         y_tables[i] = &s->ac_vlc_1[ac_y_table];
1192         c_tables[i] = &s->ac_vlc_1[ac_c_table];
1193     }
1194     for (i = 6; i <= 14; i++) {
1195         y_tables[i] = &s->ac_vlc_2[ac_y_table];
1196         c_tables[i] = &s->ac_vlc_2[ac_c_table];
1197     }
1198     for (i = 15; i <= 27; i++) {
1199         y_tables[i] = &s->ac_vlc_3[ac_y_table];
1200         c_tables[i] = &s->ac_vlc_3[ac_c_table];
1201     }
1202     for (i = 28; i <= 63; i++) {
1203         y_tables[i] = &s->ac_vlc_4[ac_y_table];
1204         c_tables[i] = &s->ac_vlc_4[ac_c_table];
1205     }
1206
1207     /* decode all AC coefficents */
1208     for (i = 1; i <= 63; i++) {
1209         if (s->fragment_list_y_head != -1)
1210             residual_eob_run = unpack_vlcs(s, gb, y_tables[i], i,
1211                 1, residual_eob_run);
1212
1213         if (s->fragment_list_c_head != -1)
1214             residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
1215                 0, residual_eob_run);
1216     }
1217
1218     return 0;
1219 }
1220
1221 /*
1222  * This function reverses the DC prediction for each coded fragment in
1223  * the frame. Much of this function is adapted directly from the original
1224  * VP3 source code.
1225  */
1226 #define COMPATIBLE_FRAME(x) \
1227   (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
1228 #define DC_COEFF(u) (s->coeffs[u].index ? 0 : s->coeffs[u].coeff) //FIXME do somethin to simplify this
1229
1230 static void reverse_dc_prediction(Vp3DecodeContext *s,
1231                                   int first_fragment,
1232                                   int fragment_width,
1233                                   int fragment_height)
1234 {
1235
1236 #define PUL 8
1237 #define PU 4
1238 #define PUR 2
1239 #define PL 1
1240
1241     int x, y;
1242     int i = first_fragment;
1243
1244     int predicted_dc;
1245
1246     /* DC values for the left, up-left, up, and up-right fragments */
1247     int vl, vul, vu, vur;
1248
1249     /* indexes for the left, up-left, up, and up-right fragments */
1250     int l, ul, u, ur;
1251
1252     /*
1253      * The 6 fields mean:
1254      *   0: up-left multiplier
1255      *   1: up multiplier
1256      *   2: up-right multiplier
1257      *   3: left multiplier
1258      */
1259     static const int predictor_transform[16][4] = {
1260         {  0,  0,  0,  0},
1261         {  0,  0,  0,128},        // PL
1262         {  0,  0,128,  0},        // PUR
1263         {  0,  0, 53, 75},        // PUR|PL
1264         {  0,128,  0,  0},        // PU
1265         {  0, 64,  0, 64},        // PU|PL
1266         {  0,128,  0,  0},        // PU|PUR
1267         {  0,  0, 53, 75},        // PU|PUR|PL
1268         {128,  0,  0,  0},        // PUL
1269         {  0,  0,  0,128},        // PUL|PL
1270         { 64,  0, 64,  0},        // PUL|PUR
1271         {  0,  0, 53, 75},        // PUL|PUR|PL
1272         {  0,128,  0,  0},        // PUL|PU
1273        {-104,116,  0,116},        // PUL|PU|PL
1274         { 24, 80, 24,  0},        // PUL|PU|PUR
1275        {-104,116,  0,116}         // PUL|PU|PUR|PL
1276     };
1277
1278     /* This table shows which types of blocks can use other blocks for
1279      * prediction. For example, INTRA is the only mode in this table to
1280      * have a frame number of 0. That means INTRA blocks can only predict
1281      * from other INTRA blocks. There are 2 golden frame coding types;
1282      * blocks encoding in these modes can only predict from other blocks
1283      * that were encoded with these 1 of these 2 modes. */
1284     static const unsigned char compatible_frame[9] = {
1285         1,    /* MODE_INTER_NO_MV */
1286         0,    /* MODE_INTRA */
1287         1,    /* MODE_INTER_PLUS_MV */
1288         1,    /* MODE_INTER_LAST_MV */
1289         1,    /* MODE_INTER_PRIOR_MV */
1290         2,    /* MODE_USING_GOLDEN */
1291         2,    /* MODE_GOLDEN_MV */
1292         1,    /* MODE_INTER_FOUR_MV */
1293         3     /* MODE_COPY */
1294     };
1295     int current_frame_type;
1296
1297     /* there is a last DC predictor for each of the 3 frame types */
1298     short last_dc[3];
1299
1300     int transform = 0;
1301
1302     vul = vu = vur = vl = 0;
1303     last_dc[0] = last_dc[1] = last_dc[2] = 0;
1304
1305     /* for each fragment row... */
1306     for (y = 0; y < fragment_height; y++) {
1307
1308         /* for each fragment in a row... */
1309         for (x = 0; x < fragment_width; x++, i++) {
1310
1311             /* reverse prediction if this block was coded */
1312             if (s->all_fragments[i].coding_method != MODE_COPY) {
1313
1314                 current_frame_type =
1315                     compatible_frame[s->all_fragments[i].coding_method];
1316
1317                 transform= 0;
1318                 if(x){
1319                     l= i-1;
1320                     vl = DC_COEFF(l);
1321                     if(COMPATIBLE_FRAME(l))
1322                         transform |= PL;
1323                 }
1324                 if(y){
1325                     u= i-fragment_width;
1326                     vu = DC_COEFF(u);
1327                     if(COMPATIBLE_FRAME(u))
1328                         transform |= PU;
1329                     if(x){
1330                         ul= i-fragment_width-1;
1331                         vul = DC_COEFF(ul);
1332                         if(COMPATIBLE_FRAME(ul))
1333                             transform |= PUL;
1334                     }
1335                     if(x + 1 < fragment_width){
1336                         ur= i-fragment_width+1;
1337                         vur = DC_COEFF(ur);
1338                         if(COMPATIBLE_FRAME(ur))
1339                             transform |= PUR;
1340                     }
1341                 }
1342
1343                 if (transform == 0) {
1344
1345                     /* if there were no fragments to predict from, use last
1346                      * DC saved */
1347                     predicted_dc = last_dc[current_frame_type];
1348                 } else {
1349
1350                     /* apply the appropriate predictor transform */
1351                     predicted_dc =
1352                         (predictor_transform[transform][0] * vul) +
1353                         (predictor_transform[transform][1] * vu) +
1354                         (predictor_transform[transform][2] * vur) +
1355                         (predictor_transform[transform][3] * vl);
1356
1357                     predicted_dc /= 128;
1358
1359                     /* check for outranging on the [ul u l] and
1360                      * [ul u ur l] predictors */
1361                     if ((transform == 15) || (transform == 13)) {
1362                         if (FFABS(predicted_dc - vu) > 128)
1363                             predicted_dc = vu;
1364                         else if (FFABS(predicted_dc - vl) > 128)
1365                             predicted_dc = vl;
1366                         else if (FFABS(predicted_dc - vul) > 128)
1367                             predicted_dc = vul;
1368                     }
1369                 }
1370
1371                 /* at long last, apply the predictor */
1372                 if(s->coeffs[i].index){
1373                     *s->next_coeff= s->coeffs[i];
1374                     s->coeffs[i].index=0;
1375                     s->coeffs[i].coeff=0;
1376                     s->coeffs[i].next= s->next_coeff++;
1377                 }
1378                 s->coeffs[i].coeff += predicted_dc;
1379                 /* save the DC */
1380                 last_dc[current_frame_type] = DC_COEFF(i);
1381                 if(DC_COEFF(i) && !(s->coeff_counts[i]&127)){
1382                     s->coeff_counts[i]= 129;
1383 //                    s->all_fragments[i].next_coeff= s->next_coeff;
1384                     s->coeffs[i].next= s->next_coeff;
1385                     (s->next_coeff++)->next=NULL;
1386                 }
1387             }
1388         }
1389     }
1390 }
1391
1392 static void apply_loop_filter(Vp3DecodeContext *s, int plane, int ystart, int yend)
1393 {
1394     int x, y;
1395     int *bounding_values= s->bounding_values_array+127;
1396
1397         int width           = s->fragment_width  >> !!plane;
1398         int height          = s->fragment_height >> !!plane;
1399         int fragment        = s->fragment_start        [plane] + ystart * width;
1400         int stride          = s->current_frame.linesize[plane];
1401         uint8_t *plane_data = s->current_frame.data    [plane];
1402         if (!s->flipped_image) stride = -stride;
1403
1404         for (y = ystart; y < yend; y++) {
1405
1406             for (x = 0; x < width; x++) {
1407                 /* This code basically just deblocks on the edges of coded blocks.
1408                  * However, it has to be much more complicated because of the
1409                  * braindamaged deblock ordering used in VP3/Theora. Order matters
1410                  * because some pixels get filtered twice. */
1411                 if( s->all_fragments[fragment].coding_method != MODE_COPY )
1412                 {
1413                     /* do not perform left edge filter for left columns frags */
1414                     if (x > 0) {
1415                         s->dsp.vp3_h_loop_filter(
1416                             plane_data + s->all_fragments[fragment].first_pixel,
1417                             stride, bounding_values);
1418                     }
1419
1420                     /* do not perform top edge filter for top row fragments */
1421                     if (y > 0) {
1422                         s->dsp.vp3_v_loop_filter(
1423                             plane_data + s->all_fragments[fragment].first_pixel,
1424                             stride, bounding_values);
1425                     }
1426
1427                     /* do not perform right edge filter for right column
1428                      * fragments or if right fragment neighbor is also coded
1429                      * in this frame (it will be filtered in next iteration) */
1430                     if ((x < width - 1) &&
1431                         (s->all_fragments[fragment + 1].coding_method == MODE_COPY)) {
1432                         s->dsp.vp3_h_loop_filter(
1433                             plane_data + s->all_fragments[fragment + 1].first_pixel,
1434                             stride, bounding_values);
1435                     }
1436
1437                     /* do not perform bottom edge filter for bottom row
1438                      * fragments or if bottom fragment neighbor is also coded
1439                      * in this frame (it will be filtered in the next row) */
1440                     if ((y < height - 1) &&
1441                         (s->all_fragments[fragment + width].coding_method == MODE_COPY)) {
1442                         s->dsp.vp3_v_loop_filter(
1443                             plane_data + s->all_fragments[fragment + width].first_pixel,
1444                             stride, bounding_values);
1445                     }
1446                 }
1447
1448                 fragment++;
1449             }
1450         }
1451 }
1452
1453 /*
1454  * Perform the final rendering for a particular slice of data.
1455  * The slice number ranges from 0..(macroblock_height - 1).
1456  */
1457 static void render_slice(Vp3DecodeContext *s, int slice)
1458 {
1459     int x;
1460     int16_t *dequantizer;
1461     DECLARE_ALIGNED_16(DCTELEM, block)[64];
1462     int motion_x = 0xdeadbeef, motion_y = 0xdeadbeef;
1463     int motion_halfpel_index;
1464     uint8_t *motion_source;
1465     int plane;
1466     int current_macroblock_entry = slice * s->macroblock_width * 6;
1467
1468     if (slice >= s->macroblock_height)
1469         return;
1470
1471     for (plane = 0; plane < 3; plane++) {
1472         uint8_t *output_plane = s->current_frame.data    [plane];
1473         uint8_t *  last_plane = s->   last_frame.data    [plane];
1474         uint8_t *golden_plane = s-> golden_frame.data    [plane];
1475         int stride            = s->current_frame.linesize[plane];
1476         int plane_width       = s->width  >> !!plane;
1477         int plane_height      = s->height >> !!plane;
1478         int y =        slice *  FRAGMENT_PIXELS << !plane ;
1479         int slice_height = y + (FRAGMENT_PIXELS << !plane);
1480         int i = s->macroblock_fragments[current_macroblock_entry + plane + 3*!!plane];
1481
1482         if (!s->flipped_image) stride = -stride;
1483
1484
1485         if(FFABS(stride) > 2048)
1486             return; //various tables are fixed size
1487
1488         /* for each fragment row in the slice (both of them)... */
1489         for (; y < slice_height; y += 8) {
1490
1491             /* for each fragment in a row... */
1492             for (x = 0; x < plane_width; x += 8, i++) {
1493
1494                 if ((i < 0) || (i >= s->fragment_count)) {
1495                     av_log(s->avctx, AV_LOG_ERROR, "  vp3:render_slice(): bad fragment number (%d)\n", i);
1496                     return;
1497                 }
1498
1499                 /* transform if this block was coded */
1500                 if ((s->all_fragments[i].coding_method != MODE_COPY) &&
1501                     !((s->avctx->flags & CODEC_FLAG_GRAY) && plane)) {
1502
1503                     if ((s->all_fragments[i].coding_method == MODE_USING_GOLDEN) ||
1504                         (s->all_fragments[i].coding_method == MODE_GOLDEN_MV))
1505                         motion_source= golden_plane;
1506                     else
1507                         motion_source= last_plane;
1508
1509                     motion_source += s->all_fragments[i].first_pixel;
1510                     motion_halfpel_index = 0;
1511
1512                     /* sort out the motion vector if this fragment is coded
1513                      * using a motion vector method */
1514                     if ((s->all_fragments[i].coding_method > MODE_INTRA) &&
1515                         (s->all_fragments[i].coding_method != MODE_USING_GOLDEN)) {
1516                         int src_x, src_y;
1517                         motion_x = s->all_fragments[i].motion_x;
1518                         motion_y = s->all_fragments[i].motion_y;
1519                         if(plane){
1520                             motion_x= (motion_x>>1) | (motion_x&1);
1521                             motion_y= (motion_y>>1) | (motion_y&1);
1522                         }
1523
1524                         src_x= (motion_x>>1) + x;
1525                         src_y= (motion_y>>1) + y;
1526                         if ((motion_x == 127) || (motion_y == 127))
1527                             av_log(s->avctx, AV_LOG_ERROR, " help! got invalid motion vector! (%X, %X)\n", motion_x, motion_y);
1528
1529                         motion_halfpel_index = motion_x & 0x01;
1530                         motion_source += (motion_x >> 1);
1531
1532                         motion_halfpel_index |= (motion_y & 0x01) << 1;
1533                         motion_source += ((motion_y >> 1) * stride);
1534
1535                         if(src_x<0 || src_y<0 || src_x + 9 >= plane_width || src_y + 9 >= plane_height){
1536                             uint8_t *temp= s->edge_emu_buffer;
1537                             if(stride<0) temp -= 9*stride;
1538                             else temp += 9*stride;
1539
1540                             ff_emulated_edge_mc(temp, motion_source, stride, 9, 9, src_x, src_y, plane_width, plane_height);
1541                             motion_source= temp;
1542                         }
1543                     }
1544
1545
1546                     /* first, take care of copying a block from either the
1547                      * previous or the golden frame */
1548                     if (s->all_fragments[i].coding_method != MODE_INTRA) {
1549                         /* Note, it is possible to implement all MC cases with
1550                            put_no_rnd_pixels_l2 which would look more like the
1551                            VP3 source but this would be slower as
1552                            put_no_rnd_pixels_tab is better optimzed */
1553                         if(motion_halfpel_index != 3){
1554                             s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index](
1555                                 output_plane + s->all_fragments[i].first_pixel,
1556                                 motion_source, stride, 8);
1557                         }else{
1558                             int d= (motion_x ^ motion_y)>>31; // d is 0 if motion_x and _y have the same sign, else -1
1559                             s->dsp.put_no_rnd_pixels_l2[1](
1560                                 output_plane + s->all_fragments[i].first_pixel,
1561                                 motion_source - d,
1562                                 motion_source + stride + 1 + d,
1563                                 stride, 8);
1564                         }
1565                         dequantizer = s->qmat[s->all_fragments[i].qpi][1][plane];
1566                     }else{
1567                         dequantizer = s->qmat[s->all_fragments[i].qpi][0][plane];
1568                     }
1569
1570                     /* dequantize the DCT coefficients */
1571                     if(s->avctx->idct_algo==FF_IDCT_VP3){
1572                         Coeff *coeff= s->coeffs + i;
1573                         s->dsp.clear_block(block);
1574                         while(coeff->next){
1575                             block[coeff->index]= coeff->coeff * dequantizer[coeff->index];
1576                             coeff= coeff->next;
1577                         }
1578                     }else{
1579                         Coeff *coeff= s->coeffs + i;
1580                         s->dsp.clear_block(block);
1581                         while(coeff->next){
1582                             block[coeff->index]= (coeff->coeff * dequantizer[coeff->index] + 2)>>2;
1583                             coeff= coeff->next;
1584                         }
1585                     }
1586
1587                     /* invert DCT and place (or add) in final output */
1588
1589                     if (s->all_fragments[i].coding_method == MODE_INTRA) {
1590                         if(s->avctx->idct_algo!=FF_IDCT_VP3)
1591                             block[0] += 128<<3;
1592                         s->dsp.idct_put(
1593                             output_plane + s->all_fragments[i].first_pixel,
1594                             stride,
1595                             block);
1596                     } else {
1597                         s->dsp.idct_add(
1598                             output_plane + s->all_fragments[i].first_pixel,
1599                             stride,
1600                             block);
1601                     }
1602                 } else {
1603
1604                     /* copy directly from the previous frame */
1605                     s->dsp.put_pixels_tab[1][0](
1606                         output_plane + s->all_fragments[i].first_pixel,
1607                         last_plane + s->all_fragments[i].first_pixel,
1608                         stride, 8);
1609
1610                 }
1611             }
1612             // Filter the previous block row. We can't filter the current row yet
1613             // since it needs pixels from the next row
1614             if (y > 0)
1615                 apply_loop_filter(s, plane, (y>>3)-1, (y>>3));
1616         }
1617     }
1618
1619      /* this looks like a good place for slice dispatch... */
1620      /* algorithm:
1621       *   if (slice == s->macroblock_height - 1)
1622       *     dispatch (both last slice & 2nd-to-last slice);
1623       *   else if (slice > 0)
1624       *     dispatch (slice - 1);
1625       */
1626
1627     emms_c();
1628 }
1629
1630 /*
1631  * This function computes the first pixel addresses for each fragment.
1632  * This function needs to be invoked after the first frame is allocated
1633  * so that it has access to the plane strides.
1634  */
1635 static void vp3_calculate_pixel_addresses(Vp3DecodeContext *s)
1636 {
1637 #define Y_INITIAL(chroma_shift)  s->flipped_image ? 1  : s->fragment_height >> chroma_shift
1638 #define Y_FINISHED(chroma_shift) s->flipped_image ? y <= s->fragment_height >> chroma_shift : y > 0
1639
1640     int i, x, y;
1641     const int y_inc = s->flipped_image ? 1 : -1;
1642
1643     /* figure out the first pixel addresses for each of the fragments */
1644     /* Y plane */
1645     i = 0;
1646     for (y = Y_INITIAL(0); Y_FINISHED(0); y += y_inc) {
1647         for (x = 0; x < s->fragment_width; x++) {
1648             s->all_fragments[i++].first_pixel =
1649                 s->golden_frame.linesize[0] * y * FRAGMENT_PIXELS -
1650                     s->golden_frame.linesize[0] +
1651                     x * FRAGMENT_PIXELS;
1652         }
1653     }
1654
1655     /* U plane */
1656     i = s->fragment_start[1];
1657     for (y = Y_INITIAL(1); Y_FINISHED(1); y += y_inc) {
1658         for (x = 0; x < s->fragment_width / 2; x++) {
1659             s->all_fragments[i++].first_pixel =
1660                 s->golden_frame.linesize[1] * y * FRAGMENT_PIXELS -
1661                     s->golden_frame.linesize[1] +
1662                     x * FRAGMENT_PIXELS;
1663         }
1664     }
1665
1666     /* V plane */
1667     i = s->fragment_start[2];
1668     for (y = Y_INITIAL(1); Y_FINISHED(1); y += y_inc) {
1669         for (x = 0; x < s->fragment_width / 2; x++) {
1670             s->all_fragments[i++].first_pixel =
1671                 s->golden_frame.linesize[2] * y * FRAGMENT_PIXELS -
1672                     s->golden_frame.linesize[2] +
1673                     x * FRAGMENT_PIXELS;
1674         }
1675     }
1676 }
1677
1678 /*
1679  * This is the ffmpeg/libavcodec API init function.
1680  */
1681 static av_cold int vp3_decode_init(AVCodecContext *avctx)
1682 {
1683     Vp3DecodeContext *s = avctx->priv_data;
1684     int i, inter, plane;
1685     int c_width;
1686     int c_height;
1687     int y_superblock_count;
1688     int c_superblock_count;
1689
1690     if (avctx->codec_tag == MKTAG('V','P','3','0'))
1691         s->version = 0;
1692     else
1693         s->version = 1;
1694
1695     s->avctx = avctx;
1696     s->width = FFALIGN(avctx->width, 16);
1697     s->height = FFALIGN(avctx->height, 16);
1698     avctx->pix_fmt = PIX_FMT_YUV420P;
1699     avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
1700     if(avctx->idct_algo==FF_IDCT_AUTO)
1701         avctx->idct_algo=FF_IDCT_VP3;
1702     dsputil_init(&s->dsp, avctx);
1703
1704     ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct);
1705
1706     /* initialize to an impossible value which will force a recalculation
1707      * in the first frame decode */
1708     for (i = 0; i < 3; i++)
1709         s->qps[i] = -1;
1710
1711     s->y_superblock_width = (s->width + 31) / 32;
1712     s->y_superblock_height = (s->height + 31) / 32;
1713     y_superblock_count = s->y_superblock_width * s->y_superblock_height;
1714
1715     /* work out the dimensions for the C planes */
1716     c_width = s->width / 2;
1717     c_height = s->height / 2;
1718     s->c_superblock_width = (c_width + 31) / 32;
1719     s->c_superblock_height = (c_height + 31) / 32;
1720     c_superblock_count = s->c_superblock_width * s->c_superblock_height;
1721
1722     s->superblock_count = y_superblock_count + (c_superblock_count * 2);
1723     s->u_superblock_start = y_superblock_count;
1724     s->v_superblock_start = s->u_superblock_start + c_superblock_count;
1725     s->superblock_coding = av_malloc(s->superblock_count);
1726
1727     s->macroblock_width = (s->width + 15) / 16;
1728     s->macroblock_height = (s->height + 15) / 16;
1729     s->macroblock_count = s->macroblock_width * s->macroblock_height;
1730
1731     s->fragment_width = s->width / FRAGMENT_PIXELS;
1732     s->fragment_height = s->height / FRAGMENT_PIXELS;
1733
1734     /* fragment count covers all 8x8 blocks for all 3 planes */
1735     s->fragment_count = s->fragment_width * s->fragment_height * 3 / 2;
1736     s->fragment_start[1] = s->fragment_width * s->fragment_height;
1737     s->fragment_start[2] = s->fragment_width * s->fragment_height * 5 / 4;
1738
1739     s->all_fragments = av_malloc(s->fragment_count * sizeof(Vp3Fragment));
1740     s->coeff_counts = av_malloc(s->fragment_count * sizeof(*s->coeff_counts));
1741     s->coeffs = av_malloc(s->fragment_count * sizeof(Coeff) * 65);
1742     s->coded_fragment_list = av_malloc(s->fragment_count * sizeof(int));
1743     s->fast_fragment_list = av_malloc(s->fragment_count * sizeof(int));
1744     s->pixel_addresses_initialized = 0;
1745     if (!s->superblock_coding || !s->all_fragments || !s->coeff_counts ||
1746         !s->coeffs || !s->coded_fragment_list || !s->fast_fragment_list) {
1747         vp3_decode_end(avctx);
1748         return -1;
1749     }
1750
1751     if (!s->theora_tables)
1752     {
1753         for (i = 0; i < 64; i++) {
1754             s->coded_dc_scale_factor[i] = vp31_dc_scale_factor[i];
1755             s->coded_ac_scale_factor[i] = vp31_ac_scale_factor[i];
1756             s->base_matrix[0][i] = vp31_intra_y_dequant[i];
1757             s->base_matrix[1][i] = vp31_intra_c_dequant[i];
1758             s->base_matrix[2][i] = vp31_inter_dequant[i];
1759             s->filter_limit_values[i] = vp31_filter_limit_values[i];
1760         }
1761
1762         for(inter=0; inter<2; inter++){
1763             for(plane=0; plane<3; plane++){
1764                 s->qr_count[inter][plane]= 1;
1765                 s->qr_size [inter][plane][0]= 63;
1766                 s->qr_base [inter][plane][0]=
1767                 s->qr_base [inter][plane][1]= 2*inter + (!!plane)*!inter;
1768             }
1769         }
1770
1771         /* init VLC tables */
1772         for (i = 0; i < 16; i++) {
1773
1774             /* DC histograms */
1775             init_vlc(&s->dc_vlc[i], 5, 32,
1776                 &dc_bias[i][0][1], 4, 2,
1777                 &dc_bias[i][0][0], 4, 2, 0);
1778
1779             /* group 1 AC histograms */
1780             init_vlc(&s->ac_vlc_1[i], 5, 32,
1781                 &ac_bias_0[i][0][1], 4, 2,
1782                 &ac_bias_0[i][0][0], 4, 2, 0);
1783
1784             /* group 2 AC histograms */
1785             init_vlc(&s->ac_vlc_2[i], 5, 32,
1786                 &ac_bias_1[i][0][1], 4, 2,
1787                 &ac_bias_1[i][0][0], 4, 2, 0);
1788
1789             /* group 3 AC histograms */
1790             init_vlc(&s->ac_vlc_3[i], 5, 32,
1791                 &ac_bias_2[i][0][1], 4, 2,
1792                 &ac_bias_2[i][0][0], 4, 2, 0);
1793
1794             /* group 4 AC histograms */
1795             init_vlc(&s->ac_vlc_4[i], 5, 32,
1796                 &ac_bias_3[i][0][1], 4, 2,
1797                 &ac_bias_3[i][0][0], 4, 2, 0);
1798         }
1799     } else {
1800         for (i = 0; i < 16; i++) {
1801
1802             /* DC histograms */
1803             if (init_vlc(&s->dc_vlc[i], 5, 32,
1804                 &s->huffman_table[i][0][1], 4, 2,
1805                 &s->huffman_table[i][0][0], 4, 2, 0) < 0)
1806                 goto vlc_fail;
1807
1808             /* group 1 AC histograms */
1809             if (init_vlc(&s->ac_vlc_1[i], 5, 32,
1810                 &s->huffman_table[i+16][0][1], 4, 2,
1811                 &s->huffman_table[i+16][0][0], 4, 2, 0) < 0)
1812                 goto vlc_fail;
1813
1814             /* group 2 AC histograms */
1815             if (init_vlc(&s->ac_vlc_2[i], 5, 32,
1816                 &s->huffman_table[i+16*2][0][1], 4, 2,
1817                 &s->huffman_table[i+16*2][0][0], 4, 2, 0) < 0)
1818                 goto vlc_fail;
1819
1820             /* group 3 AC histograms */
1821             if (init_vlc(&s->ac_vlc_3[i], 5, 32,
1822                 &s->huffman_table[i+16*3][0][1], 4, 2,
1823                 &s->huffman_table[i+16*3][0][0], 4, 2, 0) < 0)
1824                 goto vlc_fail;
1825
1826             /* group 4 AC histograms */
1827             if (init_vlc(&s->ac_vlc_4[i], 5, 32,
1828                 &s->huffman_table[i+16*4][0][1], 4, 2,
1829                 &s->huffman_table[i+16*4][0][0], 4, 2, 0) < 0)
1830                 goto vlc_fail;
1831         }
1832     }
1833
1834     init_vlc(&s->superblock_run_length_vlc, 6, 34,
1835         &superblock_run_length_vlc_table[0][1], 4, 2,
1836         &superblock_run_length_vlc_table[0][0], 4, 2, 0);
1837
1838     init_vlc(&s->fragment_run_length_vlc, 5, 30,
1839         &fragment_run_length_vlc_table[0][1], 4, 2,
1840         &fragment_run_length_vlc_table[0][0], 4, 2, 0);
1841
1842     init_vlc(&s->mode_code_vlc, 3, 8,
1843         &mode_code_vlc_table[0][1], 2, 1,
1844         &mode_code_vlc_table[0][0], 2, 1, 0);
1845
1846     init_vlc(&s->motion_vector_vlc, 6, 63,
1847         &motion_vector_vlc_table[0][1], 2, 1,
1848         &motion_vector_vlc_table[0][0], 2, 1, 0);
1849
1850     /* work out the block mapping tables */
1851     s->superblock_fragments = av_malloc(s->superblock_count * 16 * sizeof(int));
1852     s->superblock_macroblocks = av_malloc(s->superblock_count * 4 * sizeof(int));
1853     s->macroblock_fragments = av_malloc(s->macroblock_count * 6 * sizeof(int));
1854     s->macroblock_coding = av_malloc(s->macroblock_count + 1);
1855     if (!s->superblock_fragments || !s->superblock_macroblocks ||
1856         !s->macroblock_fragments || !s->macroblock_coding) {
1857         vp3_decode_end(avctx);
1858         return -1;
1859     }
1860     init_block_mapping(s);
1861
1862     for (i = 0; i < 3; i++) {
1863         s->current_frame.data[i] = NULL;
1864         s->last_frame.data[i] = NULL;
1865         s->golden_frame.data[i] = NULL;
1866     }
1867
1868     return 0;
1869
1870 vlc_fail:
1871     av_log(avctx, AV_LOG_FATAL, "Invalid huffman table\n");
1872     return -1;
1873 }
1874
1875 /*
1876  * This is the ffmpeg/libavcodec API frame decode function.
1877  */
1878 static int vp3_decode_frame(AVCodecContext *avctx,
1879                             void *data, int *data_size,
1880                             AVPacket *avpkt)
1881 {
1882     const uint8_t *buf = avpkt->data;
1883     int buf_size = avpkt->size;
1884     Vp3DecodeContext *s = avctx->priv_data;
1885     GetBitContext gb;
1886     static int counter = 0;
1887     int i;
1888
1889     init_get_bits(&gb, buf, buf_size * 8);
1890
1891     if (s->theora && get_bits1(&gb))
1892     {
1893         av_log(avctx, AV_LOG_ERROR, "Header packet passed to frame decoder, skipping\n");
1894         return -1;
1895     }
1896
1897     s->keyframe = !get_bits1(&gb);
1898     if (!s->theora)
1899         skip_bits(&gb, 1);
1900     for (i = 0; i < 3; i++)
1901         s->last_qps[i] = s->qps[i];
1902
1903     s->nqps=0;
1904     do{
1905         s->qps[s->nqps++]= get_bits(&gb, 6);
1906     } while(s->theora >= 0x030200 && s->nqps<3 && get_bits1(&gb));
1907     for (i = s->nqps; i < 3; i++)
1908         s->qps[i] = -1;
1909
1910     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1911         av_log(s->avctx, AV_LOG_INFO, " VP3 %sframe #%d: Q index = %d\n",
1912             s->keyframe?"key":"", counter, s->qps[0]);
1913     counter++;
1914
1915     if (s->qps[0] != s->last_qps[0])
1916         init_loop_filter(s);
1917
1918     for (i = 0; i < s->nqps; i++)
1919         // reinit all dequantizers if the first one changed, because
1920         // the DC of the first quantizer must be used for all matrices
1921         if (s->qps[i] != s->last_qps[i] || s->qps[0] != s->last_qps[0])
1922             init_dequantizer(s, i);
1923
1924     if (avctx->skip_frame >= AVDISCARD_NONKEY && !s->keyframe)
1925         return buf_size;
1926
1927     if (s->keyframe) {
1928         if (!s->theora)
1929         {
1930             skip_bits(&gb, 4); /* width code */
1931             skip_bits(&gb, 4); /* height code */
1932             if (s->version)
1933             {
1934                 s->version = get_bits(&gb, 5);
1935                 if (counter == 1)
1936                     av_log(s->avctx, AV_LOG_DEBUG, "VP version: %d\n", s->version);
1937             }
1938         }
1939         if (s->version || s->theora)
1940         {
1941                 if (get_bits1(&gb))
1942                     av_log(s->avctx, AV_LOG_ERROR, "Warning, unsupported keyframe coding type?!\n");
1943             skip_bits(&gb, 2); /* reserved? */
1944         }
1945
1946         if (s->last_frame.data[0] == s->golden_frame.data[0]) {
1947             if (s->golden_frame.data[0])
1948                 avctx->release_buffer(avctx, &s->golden_frame);
1949             s->last_frame= s->golden_frame; /* ensure that we catch any access to this released frame */
1950         } else {
1951             if (s->golden_frame.data[0])
1952                 avctx->release_buffer(avctx, &s->golden_frame);
1953             if (s->last_frame.data[0])
1954                 avctx->release_buffer(avctx, &s->last_frame);
1955         }
1956
1957         s->golden_frame.reference = 3;
1958         if(avctx->get_buffer(avctx, &s->golden_frame) < 0) {
1959             av_log(s->avctx, AV_LOG_ERROR, "vp3: get_buffer() failed\n");
1960             return -1;
1961         }
1962
1963         /* golden frame is also the current frame */
1964         s->current_frame= s->golden_frame;
1965
1966         /* time to figure out pixel addresses? */
1967         if (!s->pixel_addresses_initialized)
1968         {
1969             vp3_calculate_pixel_addresses(s);
1970             s->pixel_addresses_initialized = 1;
1971         }
1972     } else {
1973         /* allocate a new current frame */
1974         s->current_frame.reference = 3;
1975         if (!s->pixel_addresses_initialized) {
1976             av_log(s->avctx, AV_LOG_ERROR, "vp3: first frame not a keyframe\n");
1977             return -1;
1978         }
1979         if(avctx->get_buffer(avctx, &s->current_frame) < 0) {
1980             av_log(s->avctx, AV_LOG_ERROR, "vp3: get_buffer() failed\n");
1981             return -1;
1982         }
1983     }
1984
1985     s->current_frame.qscale_table= s->qscale_table; //FIXME allocate individual tables per AVFrame
1986     s->current_frame.qstride= 0;
1987
1988     init_frame(s, &gb);
1989
1990     if (unpack_superblocks(s, &gb)){
1991         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_superblocks\n");
1992         return -1;
1993     }
1994     if (unpack_modes(s, &gb)){
1995         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_modes\n");
1996         return -1;
1997     }
1998     if (unpack_vectors(s, &gb)){
1999         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_vectors\n");
2000         return -1;
2001     }
2002     if (unpack_block_qpis(s, &gb)){
2003         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_block_qpis\n");
2004         return -1;
2005     }
2006     if (unpack_dct_coeffs(s, &gb)){
2007         av_log(s->avctx, AV_LOG_ERROR, "error in unpack_dct_coeffs\n");
2008         return -1;
2009     }
2010
2011     for (i = 0; i < s->macroblock_height; i++)
2012         render_slice(s, i);
2013
2014     // filter the last row
2015     for (i = 0; i < 3; i++) {
2016         int row = (s->height >> (3+!!i)) - 1;
2017         apply_loop_filter(s, i, row, row+1);
2018     }
2019
2020     *data_size=sizeof(AVFrame);
2021     *(AVFrame*)data= s->current_frame;
2022
2023     /* release the last frame, if it is allocated and if it is not the
2024      * golden frame */
2025     if ((s->last_frame.data[0]) &&
2026         (s->last_frame.data[0] != s->golden_frame.data[0]))
2027         avctx->release_buffer(avctx, &s->last_frame);
2028
2029     /* shuffle frames (last = current) */
2030     s->last_frame= s->current_frame;
2031     s->current_frame.data[0]= NULL; /* ensure that we catch any access to this released frame */
2032
2033     return buf_size;
2034 }
2035
2036 /*
2037  * This is the ffmpeg/libavcodec API module cleanup function.
2038  */
2039 static av_cold int vp3_decode_end(AVCodecContext *avctx)
2040 {
2041     Vp3DecodeContext *s = avctx->priv_data;
2042     int i;
2043
2044     av_free(s->superblock_coding);
2045     av_free(s->all_fragments);
2046     av_free(s->coeff_counts);
2047     av_free(s->coeffs);
2048     av_free(s->coded_fragment_list);
2049     av_free(s->fast_fragment_list);
2050     av_free(s->superblock_fragments);
2051     av_free(s->superblock_macroblocks);
2052     av_free(s->macroblock_fragments);
2053     av_free(s->macroblock_coding);
2054
2055     for (i = 0; i < 16; i++) {
2056         free_vlc(&s->dc_vlc[i]);
2057         free_vlc(&s->ac_vlc_1[i]);
2058         free_vlc(&s->ac_vlc_2[i]);
2059         free_vlc(&s->ac_vlc_3[i]);
2060         free_vlc(&s->ac_vlc_4[i]);
2061     }
2062
2063     free_vlc(&s->superblock_run_length_vlc);
2064     free_vlc(&s->fragment_run_length_vlc);
2065     free_vlc(&s->mode_code_vlc);
2066     free_vlc(&s->motion_vector_vlc);
2067
2068     /* release all frames */
2069     if (s->golden_frame.data[0] && s->golden_frame.data[0] != s->last_frame.data[0])
2070         avctx->release_buffer(avctx, &s->golden_frame);
2071     if (s->last_frame.data[0])
2072         avctx->release_buffer(avctx, &s->last_frame);
2073     /* no need to release the current_frame since it will always be pointing
2074      * to the same frame as either the golden or last frame */
2075
2076     return 0;
2077 }
2078
2079 static int read_huffman_tree(AVCodecContext *avctx, GetBitContext *gb)
2080 {
2081     Vp3DecodeContext *s = avctx->priv_data;
2082
2083     if (get_bits1(gb)) {
2084         int token;
2085         if (s->entries >= 32) { /* overflow */
2086             av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
2087             return -1;
2088         }
2089         token = get_bits(gb, 5);
2090         //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);
2091         s->huffman_table[s->hti][token][0] = s->hbits;
2092         s->huffman_table[s->hti][token][1] = s->huff_code_size;
2093         s->entries++;
2094     }
2095     else {
2096         if (s->huff_code_size >= 32) {/* overflow */
2097             av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
2098             return -1;
2099         }
2100         s->huff_code_size++;
2101         s->hbits <<= 1;
2102         if (read_huffman_tree(avctx, gb))
2103             return -1;
2104         s->hbits |= 1;
2105         if (read_huffman_tree(avctx, gb))
2106             return -1;
2107         s->hbits >>= 1;
2108         s->huff_code_size--;
2109     }
2110     return 0;
2111 }
2112
2113 #if CONFIG_THEORA_DECODER
2114 static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
2115 {
2116     Vp3DecodeContext *s = avctx->priv_data;
2117     int visible_width, visible_height, colorspace;
2118
2119     s->theora = get_bits_long(gb, 24);
2120     av_log(avctx, AV_LOG_DEBUG, "Theora bitstream version %X\n", s->theora);
2121
2122     /* 3.2.0 aka alpha3 has the same frame orientation as original vp3 */
2123     /* but previous versions have the image flipped relative to vp3 */
2124     if (s->theora < 0x030200)
2125     {
2126         s->flipped_image = 1;
2127         av_log(avctx, AV_LOG_DEBUG, "Old (<alpha3) Theora bitstream, flipped image\n");
2128     }
2129
2130     visible_width  = s->width  = get_bits(gb, 16) << 4;
2131     visible_height = s->height = get_bits(gb, 16) << 4;
2132
2133     if(avcodec_check_dimensions(avctx, s->width, s->height)){
2134         av_log(avctx, AV_LOG_ERROR, "Invalid dimensions (%dx%d)\n", s->width, s->height);
2135         s->width= s->height= 0;
2136         return -1;
2137     }
2138
2139     if (s->theora >= 0x030200) {
2140         visible_width  = get_bits_long(gb, 24);
2141         visible_height = get_bits_long(gb, 24);
2142
2143         skip_bits(gb, 8); /* offset x */
2144         skip_bits(gb, 8); /* offset y */
2145     }
2146
2147     skip_bits(gb, 32); /* fps numerator */
2148     skip_bits(gb, 32); /* fps denumerator */
2149     skip_bits(gb, 24); /* aspect numerator */
2150     skip_bits(gb, 24); /* aspect denumerator */
2151
2152     if (s->theora < 0x030200)
2153         skip_bits(gb, 5); /* keyframe frequency force */
2154     colorspace = get_bits(gb, 8);
2155     skip_bits(gb, 24); /* bitrate */
2156
2157     skip_bits(gb, 6); /* quality hint */
2158
2159     if (s->theora >= 0x030200)
2160     {
2161         skip_bits(gb, 5); /* keyframe frequency force */
2162         skip_bits(gb, 2); /* pixel format: 420,res,422,444 */
2163         skip_bits(gb, 3); /* reserved */
2164     }
2165
2166 //    align_get_bits(gb);
2167
2168     if (   visible_width  <= s->width  && visible_width  > s->width-16
2169         && visible_height <= s->height && visible_height > s->height-16)
2170         avcodec_set_dimensions(avctx, visible_width, visible_height);
2171     else
2172         avcodec_set_dimensions(avctx, s->width, s->height);
2173
2174     if (colorspace == 1) {
2175         avctx->color_primaries = AVCOL_PRI_BT470M;
2176     } else if (colorspace == 2) {
2177         avctx->color_primaries = AVCOL_PRI_BT470BG;
2178     }
2179     if (colorspace == 1 || colorspace == 2) {
2180         avctx->colorspace = AVCOL_SPC_BT470BG;
2181         avctx->color_trc  = AVCOL_TRC_BT709;
2182     }
2183
2184     return 0;
2185 }
2186
2187 static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
2188 {
2189     Vp3DecodeContext *s = avctx->priv_data;
2190     int i, n, matrices, inter, plane;
2191
2192     if (s->theora >= 0x030200) {
2193         n = get_bits(gb, 3);
2194         /* loop filter limit values table */
2195         for (i = 0; i < 64; i++) {
2196             s->filter_limit_values[i] = get_bits(gb, n);
2197             if (s->filter_limit_values[i] > 127) {
2198                 av_log(avctx, AV_LOG_ERROR, "filter limit value too large (%i > 127), clamping\n", s->filter_limit_values[i]);
2199                 s->filter_limit_values[i] = 127;
2200             }
2201         }
2202     }
2203
2204     if (s->theora >= 0x030200)
2205         n = get_bits(gb, 4) + 1;
2206     else
2207         n = 16;
2208     /* quality threshold table */
2209     for (i = 0; i < 64; i++)
2210         s->coded_ac_scale_factor[i] = get_bits(gb, n);
2211
2212     if (s->theora >= 0x030200)
2213         n = get_bits(gb, 4) + 1;
2214     else
2215         n = 16;
2216     /* dc scale factor table */
2217     for (i = 0; i < 64; i++)
2218         s->coded_dc_scale_factor[i] = get_bits(gb, n);
2219
2220     if (s->theora >= 0x030200)
2221         matrices = get_bits(gb, 9) + 1;
2222     else
2223         matrices = 3;
2224
2225     if(matrices > 384){
2226         av_log(avctx, AV_LOG_ERROR, "invalid number of base matrixes\n");
2227         return -1;
2228     }
2229
2230     for(n=0; n<matrices; n++){
2231         for (i = 0; i < 64; i++)
2232             s->base_matrix[n][i]= get_bits(gb, 8);
2233     }
2234
2235     for (inter = 0; inter <= 1; inter++) {
2236         for (plane = 0; plane <= 2; plane++) {
2237             int newqr= 1;
2238             if (inter || plane > 0)
2239                 newqr = get_bits1(gb);
2240             if (!newqr) {
2241                 int qtj, plj;
2242                 if(inter && get_bits1(gb)){
2243                     qtj = 0;
2244                     plj = plane;
2245                 }else{
2246                     qtj= (3*inter + plane - 1) / 3;
2247                     plj= (plane + 2) % 3;
2248                 }
2249                 s->qr_count[inter][plane]= s->qr_count[qtj][plj];
2250                 memcpy(s->qr_size[inter][plane], s->qr_size[qtj][plj], sizeof(s->qr_size[0][0]));
2251                 memcpy(s->qr_base[inter][plane], s->qr_base[qtj][plj], sizeof(s->qr_base[0][0]));
2252             } else {
2253                 int qri= 0;
2254                 int qi = 0;
2255
2256                 for(;;){
2257                     i= get_bits(gb, av_log2(matrices-1)+1);
2258                     if(i>= matrices){
2259                         av_log(avctx, AV_LOG_ERROR, "invalid base matrix index\n");
2260                         return -1;
2261                     }
2262                     s->qr_base[inter][plane][qri]= i;
2263                     if(qi >= 63)
2264                         break;
2265                     i = get_bits(gb, av_log2(63-qi)+1) + 1;
2266                     s->qr_size[inter][plane][qri++]= i;
2267                     qi += i;
2268                 }
2269
2270                 if (qi > 63) {
2271                     av_log(avctx, AV_LOG_ERROR, "invalid qi %d > 63\n", qi);
2272                     return -1;
2273                 }
2274                 s->qr_count[inter][plane]= qri;
2275             }
2276         }
2277     }
2278
2279     /* Huffman tables */
2280     for (s->hti = 0; s->hti < 80; s->hti++) {
2281         s->entries = 0;
2282         s->huff_code_size = 1;
2283         if (!get_bits1(gb)) {
2284             s->hbits = 0;
2285             if(read_huffman_tree(avctx, gb))
2286                 return -1;
2287             s->hbits = 1;
2288             if(read_huffman_tree(avctx, gb))
2289                 return -1;
2290         }
2291     }
2292
2293     s->theora_tables = 1;
2294
2295     return 0;
2296 }
2297
2298 static av_cold int theora_decode_init(AVCodecContext *avctx)
2299 {
2300     Vp3DecodeContext *s = avctx->priv_data;
2301     GetBitContext gb;
2302     int ptype;
2303     uint8_t *header_start[3];
2304     int header_len[3];
2305     int i;
2306
2307     s->theora = 1;
2308
2309     if (!avctx->extradata_size)
2310     {
2311         av_log(avctx, AV_LOG_ERROR, "Missing extradata!\n");
2312         return -1;
2313     }
2314
2315     if (ff_split_xiph_headers(avctx->extradata, avctx->extradata_size,
2316                               42, header_start, header_len) < 0) {
2317         av_log(avctx, AV_LOG_ERROR, "Corrupt extradata\n");
2318         return -1;
2319     }
2320
2321   for(i=0;i<3;i++) {
2322     init_get_bits(&gb, header_start[i], header_len[i] * 8);
2323
2324     ptype = get_bits(&gb, 8);
2325
2326      if (!(ptype & 0x80))
2327      {
2328         av_log(avctx, AV_LOG_ERROR, "Invalid extradata!\n");
2329 //        return -1;
2330      }
2331
2332     // FIXME: Check for this as well.
2333     skip_bits_long(&gb, 6*8); /* "theora" */
2334
2335     switch(ptype)
2336     {
2337         case 0x80:
2338             theora_decode_header(avctx, &gb);
2339                 break;
2340         case 0x81:
2341 // FIXME: is this needed? it breaks sometimes
2342 //            theora_decode_comments(avctx, gb);
2343             break;
2344         case 0x82:
2345             if (theora_decode_tables(avctx, &gb))
2346                 return -1;
2347             break;
2348         default:
2349             av_log(avctx, AV_LOG_ERROR, "Unknown Theora config packet: %d\n", ptype&~0x80);
2350             break;
2351     }
2352     if(ptype != 0x81 && 8*header_len[i] != get_bits_count(&gb))
2353         av_log(avctx, AV_LOG_WARNING, "%d bits left in packet %X\n", 8*header_len[i] - get_bits_count(&gb), ptype);
2354     if (s->theora < 0x030200)
2355         break;
2356   }
2357
2358     return vp3_decode_init(avctx);
2359 }
2360
2361 AVCodec theora_decoder = {
2362     "theora",
2363     CODEC_TYPE_VIDEO,
2364     CODEC_ID_THEORA,
2365     sizeof(Vp3DecodeContext),
2366     theora_decode_init,
2367     NULL,
2368     vp3_decode_end,
2369     vp3_decode_frame,
2370     CODEC_CAP_DR1,
2371     NULL,
2372     .long_name = NULL_IF_CONFIG_SMALL("Theora"),
2373 };
2374 #endif
2375
2376 AVCodec vp3_decoder = {
2377     "vp3",
2378     CODEC_TYPE_VIDEO,
2379     CODEC_ID_VP3,
2380     sizeof(Vp3DecodeContext),
2381     vp3_decode_init,
2382     NULL,
2383     vp3_decode_end,
2384     vp3_decode_frame,
2385     CODEC_CAP_DR1,
2386     NULL,
2387     .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
2388 };