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