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