3 * Copyright (C) 2003 the ffmpeg project
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 * VP3 Video Decoder by Mike Melanson (melanson@pcisys.net)
20 * For more information about the VP3 coding process, visit:
21 * http://www.pcisys.net/~melanson/codecs/
23 * Theora decoder by Alex Beregszaszi
29 * On2 VP3 Video Decoder
40 #include "mpegvideo.h"
45 #define FRAGMENT_PIXELS 8
50 * Define one or more of the following compile-time variables to 1 to obtain
51 * elaborate information about certain aspects of the decoding process.
53 * KEYFRAMES_ONLY: set this to 1 to only see keyframes (VP3 slideshow mode)
54 * DEBUG_VP3: high-level decoding flow
55 * DEBUG_INIT: initialization parameters
56 * DEBUG_DEQUANTIZERS: display how the dequanization tables are built
57 * DEBUG_BLOCK_CODING: unpacking the superblock/macroblock/fragment coding
58 * DEBUG_MODES: unpacking the coding modes for individual fragments
59 * DEBUG_VECTORS: display the motion vectors
60 * DEBUG_TOKEN: display exhaustive information about each DCT token
61 * DEBUG_VLC: display the VLCs as they are extracted from the stream
62 * DEBUG_DC_PRED: display the process of reversing DC prediction
63 * DEBUG_IDCT: show every detail of the IDCT process
66 #define KEYFRAMES_ONLY 0
70 #define DEBUG_DEQUANTIZERS 0
71 #define DEBUG_BLOCK_CODING 0
73 #define DEBUG_VECTORS 0
76 #define DEBUG_DC_PRED 0
80 #define debug_vp3 printf
82 static inline void debug_vp3(const char *format, ...) { }
86 #define debug_init printf
88 static inline void debug_init(const char *format, ...) { }
91 #if DEBUG_DEQUANTIZERS
92 #define debug_dequantizers printf
94 static inline void debug_dequantizers(const char *format, ...) { }
97 #if DEBUG_BLOCK_CODING
98 #define debug_block_coding printf
100 static inline void debug_block_coding(const char *format, ...) { }
104 #define debug_modes printf
106 static inline void debug_modes(const char *format, ...) { }
110 #define debug_vectors printf
112 static inline void debug_vectors(const char *format, ...) { }
116 #define debug_token printf
118 static inline void debug_token(const char *format, ...) { }
122 #define debug_vlc printf
124 static inline void debug_vlc(const char *format, ...) { }
128 #define debug_dc_pred printf
130 static inline void debug_dc_pred(const char *format, ...) { }
134 #define debug_idct printf
136 static inline void debug_idct(const char *format, ...) { }
139 typedef struct Vp3Fragment {
146 /* address of first pixel taking into account which plane the fragment
147 * lives on as well as the plane stride */
149 /* this is the macroblock that the fragment belongs to */
153 #define SB_NOT_CODED 0
154 #define SB_PARTIALLY_CODED 1
155 #define SB_FULLY_CODED 2
157 #define MODE_INTER_NO_MV 0
159 #define MODE_INTER_PLUS_MV 2
160 #define MODE_INTER_LAST_MV 3
161 #define MODE_INTER_PRIOR_LAST 4
162 #define MODE_USING_GOLDEN 5
163 #define MODE_GOLDEN_MV 6
164 #define MODE_INTER_FOURMV 7
165 #define CODING_MODE_COUNT 8
167 /* special internal mode */
170 /* There are 6 preset schemes, plus a free-form scheme */
171 static int ModeAlphabet[7][CODING_MODE_COUNT] =
173 /* this is the custom scheme */
174 { 0, 0, 0, 0, 0, 0, 0, 0 },
176 /* scheme 1: Last motion vector dominates */
177 { MODE_INTER_LAST_MV, MODE_INTER_PRIOR_LAST,
178 MODE_INTER_PLUS_MV, MODE_INTER_NO_MV,
179 MODE_INTRA, MODE_USING_GOLDEN,
180 MODE_GOLDEN_MV, MODE_INTER_FOURMV },
183 { MODE_INTER_LAST_MV, MODE_INTER_PRIOR_LAST,
184 MODE_INTER_NO_MV, MODE_INTER_PLUS_MV,
185 MODE_INTRA, MODE_USING_GOLDEN,
186 MODE_GOLDEN_MV, MODE_INTER_FOURMV },
189 { MODE_INTER_LAST_MV, MODE_INTER_PLUS_MV,
190 MODE_INTER_PRIOR_LAST, MODE_INTER_NO_MV,
191 MODE_INTRA, MODE_USING_GOLDEN,
192 MODE_GOLDEN_MV, MODE_INTER_FOURMV },
195 { MODE_INTER_LAST_MV, MODE_INTER_PLUS_MV,
196 MODE_INTER_NO_MV, MODE_INTER_PRIOR_LAST,
197 MODE_INTRA, MODE_USING_GOLDEN,
198 MODE_GOLDEN_MV, MODE_INTER_FOURMV },
200 /* scheme 5: No motion vector dominates */
201 { MODE_INTER_NO_MV, MODE_INTER_LAST_MV,
202 MODE_INTER_PRIOR_LAST, MODE_INTER_PLUS_MV,
203 MODE_INTRA, MODE_USING_GOLDEN,
204 MODE_GOLDEN_MV, MODE_INTER_FOURMV },
207 { MODE_INTER_NO_MV, MODE_USING_GOLDEN,
208 MODE_INTER_LAST_MV, MODE_INTER_PRIOR_LAST,
209 MODE_INTER_PLUS_MV, MODE_INTRA,
210 MODE_GOLDEN_MV, MODE_INTER_FOURMV },
214 #define MIN_DEQUANT_VAL 2
216 typedef struct Vp3DecodeContext {
217 AVCodecContext *avctx;
218 int theora, theora_tables;
220 AVFrame golden_frame;
222 AVFrame current_frame;
228 int last_quality_index;
230 int superblock_count;
231 int superblock_width;
232 int superblock_height;
233 int y_superblock_width;
234 int y_superblock_height;
235 int c_superblock_width;
236 int c_superblock_height;
237 int u_superblock_start;
238 int v_superblock_start;
239 unsigned char *superblock_coding;
241 int macroblock_count;
242 int macroblock_width;
243 int macroblock_height;
249 Vp3Fragment *all_fragments;
250 int u_fragment_start;
251 int v_fragment_start;
254 uint16_t coded_dc_scale_factor[64];
255 uint32_t coded_quality_threshold[64];
256 uint16_t coded_intra_y_dequant[64];
257 uint16_t coded_intra_c_dequant[64];
258 uint16_t coded_inter_dequant[64];
260 /* this is a list of indices into the all_fragments array indicating
261 * which of the fragments are coded */
262 int *coded_fragment_list;
263 int coded_fragment_list_index;
264 int pixel_addresses_inited;
272 int16_t intra_y_dequant[64];
273 int16_t intra_c_dequant[64];
274 int16_t inter_dequant[64];
276 /* This table contains superblock_count * 16 entries. Each set of 16
277 * numbers corresponds to the fragment indices 0..15 of the superblock.
278 * An entry will be -1 to indicate that no entry corresponds to that
280 int *superblock_fragments;
282 /* This table contains superblock_count * 4 entries. Each set of 4
283 * numbers corresponds to the macroblock indices 0..3 of the superblock.
284 * An entry will be -1 to indicate that no entry corresponds to that
286 int *superblock_macroblocks;
288 /* This table contains macroblock_count * 6 entries. Each set of 6
289 * numbers corresponds to the fragment indices 0..5 which comprise
290 * the macroblock (4 Y fragments and 2 C fragments). */
291 int *macroblock_fragments;
292 /* This is an array that indicates how a particular macroblock
294 unsigned char *macroblock_coding;
296 int first_coded_y_fragment;
297 int first_coded_c_fragment;
298 int last_coded_y_fragment;
299 int last_coded_c_fragment;
301 uint8_t edge_emu_buffer[9*2048]; //FIXME dynamic alloc
302 uint8_t qscale_table[2048]; //FIXME dynamic alloc (width+15)/16
305 /************************************************************************
307 ************************************************************************/
309 #define IdctAdjustBeforeShift 8
318 void vp3_idct_c(int16_t *input_data, int16_t *dequant_matrix,
319 int16_t *output_data)
321 int32_t intermediate_data[64];
322 int32_t *ip = intermediate_data;
323 int16_t *op = output_data;
325 int32_t A_, B_, C_, D_, _Ad, _Bd, _Cd, _Dd, E_, F_, G_, H_;
326 int32_t _Ed, _Gd, _Add, _Bdd, _Fd, _Hd;
331 debug_idct("raw coefficient block:\n");
332 for (i = 0; i < 8; i++) {
333 for (j = 0; j < 8; j++) {
334 debug_idct(" %5d", input_data[i * 8 + j]);
340 for (i = 0; i < 64; i++) {
341 j = dezigzag_index[i];
342 intermediate_data[j] = dequant_matrix[i] * input_data[i];
345 debug_idct("dequantized block:\n");
346 for (i = 0; i < 8; i++) {
347 for (j = 0; j < 8; j++) {
348 debug_idct(" %5d", intermediate_data[i * 8 + j]);
354 /* Inverse DCT on the rows now */
355 for (i = 0; i < 8; i++) {
356 /* Check for non-zero values */
357 if ( ip[0] | ip[1] | ip[2] | ip[3] | ip[4] | ip[5] | ip[6] | ip[7] ) {
358 t1 = (int32_t)(xC1S7 * ip[1]);
359 t2 = (int32_t)(xC7S1 * ip[7]);
364 t1 = (int32_t)(xC7S1 * ip[1]);
365 t2 = (int32_t)(xC1S7 * ip[7]);
370 t1 = (int32_t)(xC3S5 * ip[3]);
371 t2 = (int32_t)(xC5S3 * ip[5]);
376 t1 = (int32_t)(xC3S5 * ip[5]);
377 t2 = (int32_t)(xC5S3 * ip[3]);
383 t1 = (int32_t)(xC4S4 * (A_ - C_));
387 t1 = (int32_t)(xC4S4 * (B_ - D_));
395 t1 = (int32_t)(xC4S4 * (ip[0] + ip[4]));
399 t1 = (int32_t)(xC4S4 * (ip[0] - ip[4]));
403 t1 = (int32_t)(xC2S6 * ip[2]);
404 t2 = (int32_t)(xC6S2 * ip[6]);
409 t1 = (int32_t)(xC6S2 * ip[2]);
410 t2 = (int32_t)(xC2S6 * ip[6]);
425 /* Final sequence of operations over-write original inputs. */
426 ip[0] = (int16_t)((_Gd + _Cd ) >> 0);
427 ip[7] = (int16_t)((_Gd - _Cd ) >> 0);
429 ip[1] = (int16_t)((_Add + _Hd ) >> 0);
430 ip[2] = (int16_t)((_Add - _Hd ) >> 0);
432 ip[3] = (int16_t)((_Ed + _Dd ) >> 0);
433 ip[4] = (int16_t)((_Ed - _Dd ) >> 0);
435 ip[5] = (int16_t)((_Fd + _Bdd ) >> 0);
436 ip[6] = (int16_t)((_Fd - _Bdd ) >> 0);
440 ip += 8; /* next row */
443 ip = intermediate_data;
445 for ( i = 0; i < 8; i++) {
446 /* Check for non-zero values (bitwise or faster than ||) */
447 if ( ip[0 * 8] | ip[1 * 8] | ip[2 * 8] | ip[3 * 8] |
448 ip[4 * 8] | ip[5 * 8] | ip[6 * 8] | ip[7 * 8] ) {
450 t1 = (int32_t)(xC1S7 * ip[1*8]);
451 t2 = (int32_t)(xC7S1 * ip[7*8]);
456 t1 = (int32_t)(xC7S1 * ip[1*8]);
457 t2 = (int32_t)(xC1S7 * ip[7*8]);
462 t1 = (int32_t)(xC3S5 * ip[3*8]);
463 t2 = (int32_t)(xC5S3 * ip[5*8]);
468 t1 = (int32_t)(xC3S5 * ip[5*8]);
469 t2 = (int32_t)(xC5S3 * ip[3*8]);
475 t1 = (int32_t)(xC4S4 * (A_ - C_));
479 t1 = (int32_t)(xC4S4 * (B_ - D_));
487 t1 = (int32_t)(xC4S4 * (ip[0*8] + ip[4*8]));
491 t1 = (int32_t)(xC4S4 * (ip[0*8] - ip[4*8]));
495 t1 = (int32_t)(xC2S6 * ip[2*8]);
496 t2 = (int32_t)(xC6S2 * ip[6*8]);
501 t1 = (int32_t)(xC6S2 * ip[2*8]);
502 t2 = (int32_t)(xC2S6 * ip[6*8]);
517 _Gd += IdctAdjustBeforeShift;
518 _Add += IdctAdjustBeforeShift;
519 _Ed += IdctAdjustBeforeShift;
520 _Fd += IdctAdjustBeforeShift;
522 /* Final sequence of operations over-write original inputs. */
523 op[0*8] = (int16_t)((_Gd + _Cd ) >> 4);
524 op[7*8] = (int16_t)((_Gd - _Cd ) >> 4);
526 op[1*8] = (int16_t)((_Add + _Hd ) >> 4);
527 op[2*8] = (int16_t)((_Add - _Hd ) >> 4);
529 op[3*8] = (int16_t)((_Ed + _Dd ) >> 4);
530 op[4*8] = (int16_t)((_Ed - _Dd ) >> 4);
532 op[5*8] = (int16_t)((_Fd + _Bdd ) >> 4);
533 op[6*8] = (int16_t)((_Fd - _Bdd ) >> 4);
547 ip++; /* next column */
552 void vp3_idct_put(int16_t *input_data, int16_t *dequant_matrix,
553 uint8_t *dest, int stride)
555 int16_t transformed_data[64];
559 vp3_idct_c(input_data, dequant_matrix, transformed_data);
561 /* place in final output */
562 op = transformed_data;
563 for (i = 0; i < 8; i++) {
564 for (j = 0; j < 8; j++) {
570 *dest = (uint8_t)(*op + 128);
574 dest += (stride - 8);
578 void vp3_idct_add(int16_t *input_data, int16_t *dequant_matrix,
579 uint8_t *dest, int stride)
581 int16_t transformed_data[64];
586 vp3_idct_c(input_data, dequant_matrix, transformed_data);
588 /* place in final output */
589 op = transformed_data;
590 for (i = 0; i < 8; i++) {
591 for (j = 0; j < 8; j++) {
592 sample = *dest + *op;
595 else if (sample > 255)
598 *dest = (uint8_t)(sample & 0xFF);
602 dest += (stride - 8);
606 /************************************************************************
607 * VP3 specific functions
608 ************************************************************************/
611 * This function sets up all of the various blocks mappings:
612 * superblocks <-> fragments, macroblocks <-> fragments,
613 * superblocks <-> macroblocks
615 * Returns 0 is successful; returns 1 if *anything* went wrong.
617 static int init_block_mapping(Vp3DecodeContext *s)
620 signed int hilbert_walk_y[16];
621 signed int hilbert_walk_c[16];
622 signed int hilbert_walk_mb[4];
624 int current_fragment = 0;
625 int current_width = 0;
626 int current_height = 0;
629 int superblock_row_inc = 0;
631 int mapping_index = 0;
633 int current_macroblock;
636 signed char travel_width[16] = {
643 signed char travel_height[16] = {
650 signed char travel_width_mb[4] = {
654 signed char travel_height_mb[4] = {
658 debug_vp3(" vp3: initialize block mapping tables\n");
660 /* figure out hilbert pattern per these frame dimensions */
661 hilbert_walk_y[0] = 1;
662 hilbert_walk_y[1] = 1;
663 hilbert_walk_y[2] = s->fragment_width;
664 hilbert_walk_y[3] = -1;
665 hilbert_walk_y[4] = s->fragment_width;
666 hilbert_walk_y[5] = s->fragment_width;
667 hilbert_walk_y[6] = 1;
668 hilbert_walk_y[7] = -s->fragment_width;
669 hilbert_walk_y[8] = 1;
670 hilbert_walk_y[9] = s->fragment_width;
671 hilbert_walk_y[10] = 1;
672 hilbert_walk_y[11] = -s->fragment_width;
673 hilbert_walk_y[12] = -s->fragment_width;
674 hilbert_walk_y[13] = -1;
675 hilbert_walk_y[14] = -s->fragment_width;
676 hilbert_walk_y[15] = 1;
678 hilbert_walk_c[0] = 1;
679 hilbert_walk_c[1] = 1;
680 hilbert_walk_c[2] = s->fragment_width / 2;
681 hilbert_walk_c[3] = -1;
682 hilbert_walk_c[4] = s->fragment_width / 2;
683 hilbert_walk_c[5] = s->fragment_width / 2;
684 hilbert_walk_c[6] = 1;
685 hilbert_walk_c[7] = -s->fragment_width / 2;
686 hilbert_walk_c[8] = 1;
687 hilbert_walk_c[9] = s->fragment_width / 2;
688 hilbert_walk_c[10] = 1;
689 hilbert_walk_c[11] = -s->fragment_width / 2;
690 hilbert_walk_c[12] = -s->fragment_width / 2;
691 hilbert_walk_c[13] = -1;
692 hilbert_walk_c[14] = -s->fragment_width / 2;
693 hilbert_walk_c[15] = 1;
695 hilbert_walk_mb[0] = 1;
696 hilbert_walk_mb[1] = s->macroblock_width;
697 hilbert_walk_mb[2] = 1;
698 hilbert_walk_mb[3] = -s->macroblock_width;
700 /* iterate through each superblock (all planes) and map the fragments */
701 for (i = 0; i < s->superblock_count; i++) {
702 debug_init(" superblock %d (u starts @ %d, v starts @ %d)\n",
703 i, s->u_superblock_start, s->v_superblock_start);
705 /* time to re-assign the limits? */
708 /* start of Y superblocks */
709 right_edge = s->fragment_width;
710 bottom_edge = s->fragment_height;
713 superblock_row_inc = 3 * s->fragment_width -
714 (s->y_superblock_width * 4 - s->fragment_width);
715 hilbert = hilbert_walk_y;
717 /* the first operation for this variable is to advance by 1 */
718 current_fragment = -1;
720 } else if (i == s->u_superblock_start) {
722 /* start of U superblocks */
723 right_edge = s->fragment_width / 2;
724 bottom_edge = s->fragment_height / 2;
727 superblock_row_inc = 3 * (s->fragment_width / 2) -
728 (s->c_superblock_width * 4 - s->fragment_width / 2);
729 hilbert = hilbert_walk_c;
731 /* the first operation for this variable is to advance by 1 */
732 current_fragment = s->u_fragment_start - 1;
734 } else if (i == s->v_superblock_start) {
736 /* start of V superblocks */
737 right_edge = s->fragment_width / 2;
738 bottom_edge = s->fragment_height / 2;
741 superblock_row_inc = 3 * (s->fragment_width / 2) -
742 (s->c_superblock_width * 4 - s->fragment_width / 2);
743 hilbert = hilbert_walk_c;
745 /* the first operation for this variable is to advance by 1 */
746 current_fragment = s->v_fragment_start - 1;
750 if (current_width >= right_edge - 1) {
751 /* reset width and move to next superblock row */
755 /* fragment is now at the start of a new superblock row */
756 current_fragment += superblock_row_inc;
759 /* iterate through all 16 fragments in a superblock */
760 for (j = 0; j < 16; j++) {
761 current_fragment += hilbert[j];
762 current_width += travel_width[j];
763 current_height += travel_height[j];
765 /* check if the fragment is in bounds */
766 if ((current_width < right_edge) &&
767 (current_height < bottom_edge)) {
768 s->superblock_fragments[mapping_index] = current_fragment;
769 debug_init(" mapping fragment %d to superblock %d, position %d (%d/%d x %d/%d)\n",
770 s->superblock_fragments[mapping_index], i, j,
771 current_width, right_edge, current_height, bottom_edge);
773 s->superblock_fragments[mapping_index] = -1;
774 debug_init(" superblock %d, position %d has no fragment (%d/%d x %d/%d)\n",
776 current_width, right_edge, current_height, bottom_edge);
783 /* initialize the superblock <-> macroblock mapping; iterate through
784 * all of the Y plane superblocks to build this mapping */
785 right_edge = s->macroblock_width;
786 bottom_edge = s->macroblock_height;
789 superblock_row_inc = s->macroblock_width -
790 (s->y_superblock_width * 2 - s->macroblock_width);;
791 hilbert = hilbert_walk_mb;
793 current_macroblock = -1;
794 for (i = 0; i < s->u_superblock_start; i++) {
796 if (current_width >= right_edge - 1) {
797 /* reset width and move to next superblock row */
801 /* macroblock is now at the start of a new superblock row */
802 current_macroblock += superblock_row_inc;
805 /* iterate through each potential macroblock in the superblock */
806 for (j = 0; j < 4; j++) {
807 current_macroblock += hilbert_walk_mb[j];
808 current_width += travel_width_mb[j];
809 current_height += travel_height_mb[j];
811 /* check if the macroblock is in bounds */
812 if ((current_width < right_edge) &&
813 (current_height < bottom_edge)) {
814 s->superblock_macroblocks[mapping_index] = current_macroblock;
815 debug_init(" mapping macroblock %d to superblock %d, position %d (%d/%d x %d/%d)\n",
816 s->superblock_macroblocks[mapping_index], i, j,
817 current_width, right_edge, current_height, bottom_edge);
819 s->superblock_macroblocks[mapping_index] = -1;
820 debug_init(" superblock %d, position %d has no macroblock (%d/%d x %d/%d)\n",
822 current_width, right_edge, current_height, bottom_edge);
829 /* initialize the macroblock <-> fragment mapping */
830 current_fragment = 0;
831 current_macroblock = 0;
833 for (i = 0; i < s->fragment_height; i += 2) {
835 for (j = 0; j < s->fragment_width; j += 2) {
837 debug_init(" macroblock %d contains fragments: ", current_macroblock);
838 s->all_fragments[current_fragment].macroblock = current_macroblock;
839 s->macroblock_fragments[mapping_index++] = current_fragment;
840 debug_init("%d ", current_fragment);
842 if (j + 1 < s->fragment_width) {
843 s->all_fragments[current_fragment + 1].macroblock = current_macroblock;
844 s->macroblock_fragments[mapping_index++] = current_fragment + 1;
845 debug_init("%d ", current_fragment + 1);
847 s->macroblock_fragments[mapping_index++] = -1;
849 if (i + 1 < s->fragment_height) {
850 s->all_fragments[current_fragment + s->fragment_width].macroblock =
852 s->macroblock_fragments[mapping_index++] =
853 current_fragment + s->fragment_width;
854 debug_init("%d ", current_fragment + s->fragment_width);
856 s->macroblock_fragments[mapping_index++] = -1;
858 if ((j + 1 < s->fragment_width) && (i + 1 < s->fragment_height)) {
859 s->all_fragments[current_fragment + s->fragment_width + 1].macroblock =
861 s->macroblock_fragments[mapping_index++] =
862 current_fragment + s->fragment_width + 1;
863 debug_init("%d ", current_fragment + s->fragment_width + 1);
865 s->macroblock_fragments[mapping_index++] = -1;
868 c_fragment = s->u_fragment_start +
869 (i * s->fragment_width / 4) + (j / 2);
870 s->all_fragments[c_fragment].macroblock = s->macroblock_count;
871 s->macroblock_fragments[mapping_index++] = c_fragment;
872 debug_init("%d ", c_fragment);
874 c_fragment = s->v_fragment_start +
875 (i * s->fragment_width / 4) + (j / 2);
876 s->all_fragments[c_fragment].macroblock = s->macroblock_count;
877 s->macroblock_fragments[mapping_index++] = c_fragment;
878 debug_init("%d ", c_fragment);
882 if (j + 2 <= s->fragment_width)
883 current_fragment += 2;
886 current_macroblock++;
889 current_fragment += s->fragment_width;
892 return 0; /* successful path out */
896 * This function unpacks a single token (which should be in the range 0..31)
897 * and returns a zero run (number of zero coefficients in current DCT matrix
898 * before next non-zero coefficient), the next DCT coefficient, and the
899 * number of consecutive, non-EOB'd DCT blocks to EOB.
901 static void unpack_token(GetBitContext *gb, int token, int *zero_run,
902 DCTELEM *coeff, int *eob_run)
910 debug_token(" vp3 token %d: ", token);
914 debug_token("DCT_EOB_TOKEN, EOB next block\n");
919 debug_token("DCT_EOB_PAIR_TOKEN, EOB next 2 blocks\n");
924 debug_token("DCT_EOB_TRIPLE_TOKEN, EOB next 3 blocks\n");
929 debug_token("DCT_REPEAT_RUN_TOKEN, ");
930 *eob_run = get_bits(gb, 2) + 4;
931 debug_token("EOB the next %d blocks\n", *eob_run);
935 debug_token("DCT_REPEAT_RUN2_TOKEN, ");
936 *eob_run = get_bits(gb, 3) + 8;
937 debug_token("EOB the next %d blocks\n", *eob_run);
941 debug_token("DCT_REPEAT_RUN3_TOKEN, ");
942 *eob_run = get_bits(gb, 4) + 16;
943 debug_token("EOB the next %d blocks\n", *eob_run);
947 debug_token("DCT_REPEAT_RUN4_TOKEN, ");
948 *eob_run = get_bits(gb, 12);
949 debug_token("EOB the next %d blocks\n", *eob_run);
953 debug_token("DCT_SHORT_ZRL_TOKEN, ");
954 /* note that this token actually indicates that (3 extra bits) + 1 0s
955 * should be output; this case specifies a run of (3 EBs) 0s and a
956 * coefficient of 0. */
957 *zero_run = get_bits(gb, 3);
959 debug_token("skip the next %d positions in output matrix\n", *zero_run + 1);
963 debug_token("DCT_ZRL_TOKEN, ");
964 /* note that this token actually indicates that (6 extra bits) + 1 0s
965 * should be output; this case specifies a run of (6 EBs) 0s and a
966 * coefficient of 0. */
967 *zero_run = get_bits(gb, 6);
969 debug_token("skip the next %d positions in output matrix\n", *zero_run + 1);
973 debug_token("ONE_TOKEN, output 1\n");
978 debug_token("MINUS_ONE_TOKEN, output -1\n");
983 debug_token("TWO_TOKEN, output 2\n");
988 debug_token("MINUS_TWO_TOKEN, output -2\n");
996 debug_token("LOW_VAL_TOKENS, ");
998 *coeff = -(3 + (token - 13));
1000 *coeff = 3 + (token - 13);
1001 debug_token("output %d\n", *coeff);
1005 debug_token("DCT_VAL_CATEGORY3, ");
1006 sign = get_bits(gb, 1);
1007 *coeff = 7 + get_bits(gb, 1);
1010 debug_token("output %d\n", *coeff);
1014 debug_token("DCT_VAL_CATEGORY4, ");
1015 sign = get_bits(gb, 1);
1016 *coeff = 9 + get_bits(gb, 2);
1019 debug_token("output %d\n", *coeff);
1023 debug_token("DCT_VAL_CATEGORY5, ");
1024 sign = get_bits(gb, 1);
1025 *coeff = 13 + get_bits(gb, 3);
1028 debug_token("output %d\n", *coeff);
1032 debug_token("DCT_VAL_CATEGORY6, ");
1033 sign = get_bits(gb, 1);
1034 *coeff = 21 + get_bits(gb, 4);
1037 debug_token("output %d\n", *coeff);
1041 debug_token("DCT_VAL_CATEGORY7, ");
1042 sign = get_bits(gb, 1);
1043 *coeff = 37 + get_bits(gb, 5);
1046 debug_token("output %d\n", *coeff);
1050 debug_token("DCT_VAL_CATEGORY8, ");
1051 sign = get_bits(gb, 1);
1052 *coeff = 69 + get_bits(gb, 9);
1055 debug_token("output %d\n", *coeff);
1063 debug_token("DCT_RUN_CATEGORY1, ");
1064 *zero_run = token - 22;
1065 if (get_bits(gb, 1))
1069 debug_token("output %d 0s, then %d\n", *zero_run, *coeff);
1073 debug_token("DCT_RUN_CATEGORY1B, ");
1074 if (get_bits(gb, 1))
1078 *zero_run = 6 + get_bits(gb, 2);
1079 debug_token("output %d 0s, then %d\n", *zero_run, *coeff);
1083 debug_token("DCT_RUN_CATEGORY1C, ");
1084 if (get_bits(gb, 1))
1088 *zero_run = 10 + get_bits(gb, 3);
1089 debug_token("output %d 0s, then %d\n", *zero_run, *coeff);
1093 debug_token("DCT_RUN_CATEGORY2, ");
1094 sign = get_bits(gb, 1);
1095 *coeff = 2 + get_bits(gb, 1);
1099 debug_token("output %d 0s, then %d\n", *zero_run, *coeff);
1103 debug_token("DCT_RUN_CATEGORY2, ");
1104 sign = get_bits(gb, 1);
1105 *coeff = 2 + get_bits(gb, 1);
1108 *zero_run = 2 + get_bits(gb, 1);
1109 debug_token("output %d 0s, then %d\n", *zero_run, *coeff);
1113 av_log(NULL, AV_LOG_ERROR, " vp3: help! Got a bad token: %d > 31\n", token);
1120 * This function wipes out all of the fragment data.
1122 static void init_frame(Vp3DecodeContext *s, GetBitContext *gb)
1126 /* zero out all of the fragment information */
1127 s->coded_fragment_list_index = 0;
1128 for (i = 0; i < s->fragment_count; i++) {
1129 memset(s->all_fragments[i].coeffs, 0, 64 * sizeof(DCTELEM));
1130 s->all_fragments[i].coeff_count = 0;
1131 s->all_fragments[i].last_coeff = 0;
1132 s->all_fragments[i].motion_x = 0xbeef;
1133 s->all_fragments[i].motion_y = 0xbeef;
1138 * This function sets of the dequantization tables used for a particular
1141 static void init_dequantizer(Vp3DecodeContext *s)
1144 int quality_scale = s->coded_quality_threshold[s->quality_index];
1145 int dc_scale_factor = s->coded_dc_scale_factor[s->quality_index];
1148 debug_vp3(" vp3: initializing dequantization tables\n");
1151 * Scale dequantizers:
1157 * where sf = dc_scale_factor for DC quantizer
1158 * or quality_scale for AC quantizer
1160 * Then, saturate the result to a lower limit of MIN_DEQUANT_VAL.
1164 /* scale DC quantizers */
1165 s->intra_y_dequant[0] = s->coded_intra_y_dequant[0] * dc_scale_factor / 100;
1166 if (s->intra_y_dequant[0] < MIN_DEQUANT_VAL * 2)
1167 s->intra_y_dequant[0] = MIN_DEQUANT_VAL * 2;
1168 s->intra_y_dequant[0] *= SCALER;
1170 s->intra_c_dequant[0] = s->coded_intra_c_dequant[0] * dc_scale_factor / 100;
1171 if (s->intra_c_dequant[0] < MIN_DEQUANT_VAL * 2)
1172 s->intra_c_dequant[0] = MIN_DEQUANT_VAL * 2;
1173 s->intra_c_dequant[0] *= SCALER;
1175 s->inter_dequant[0] = s->coded_inter_dequant[0] * dc_scale_factor / 100;
1176 if (s->inter_dequant[0] < MIN_DEQUANT_VAL * 4)
1177 s->inter_dequant[0] = MIN_DEQUANT_VAL * 4;
1178 s->inter_dequant[0] *= SCALER;
1180 /* scale AC quantizers, zigzag at the same time in preparation for
1181 * the dequantization phase */
1182 for (i = 1; i < 64; i++) {
1184 j = zigzag_index[i];
1186 s->intra_y_dequant[j] = s->coded_intra_y_dequant[i] * quality_scale / 100;
1187 if (s->intra_y_dequant[j] < MIN_DEQUANT_VAL)
1188 s->intra_y_dequant[j] = MIN_DEQUANT_VAL;
1189 s->intra_y_dequant[j] *= SCALER;
1191 s->intra_c_dequant[j] = s->coded_intra_c_dequant[i] * quality_scale / 100;
1192 if (s->intra_c_dequant[j] < MIN_DEQUANT_VAL)
1193 s->intra_c_dequant[j] = MIN_DEQUANT_VAL;
1194 s->intra_c_dequant[j] *= SCALER;
1196 s->inter_dequant[j] = s->coded_inter_dequant[i] * quality_scale / 100;
1197 if (s->inter_dequant[j] < MIN_DEQUANT_VAL * 2)
1198 s->inter_dequant[j] = MIN_DEQUANT_VAL * 2;
1199 s->inter_dequant[j] *= SCALER;
1202 memset(s->qscale_table, (FFMAX(s->intra_y_dequant[1], s->intra_c_dequant[1])+8)/16, 512); //FIXME finetune
1204 /* print debug information as requested */
1205 debug_dequantizers("intra Y dequantizers:\n");
1206 for (i = 0; i < 8; i++) {
1207 for (j = i * 8; j < i * 8 + 8; j++) {
1208 debug_dequantizers(" %4d,", s->intra_y_dequant[j]);
1210 debug_dequantizers("\n");
1212 debug_dequantizers("\n");
1214 debug_dequantizers("intra C dequantizers:\n");
1215 for (i = 0; i < 8; i++) {
1216 for (j = i * 8; j < i * 8 + 8; j++) {
1217 debug_dequantizers(" %4d,", s->intra_c_dequant[j]);
1219 debug_dequantizers("\n");
1221 debug_dequantizers("\n");
1223 debug_dequantizers("interframe dequantizers:\n");
1224 for (i = 0; i < 8; i++) {
1225 for (j = i * 8; j < i * 8 + 8; j++) {
1226 debug_dequantizers(" %4d,", s->inter_dequant[j]);
1228 debug_dequantizers("\n");
1230 debug_dequantizers("\n");
1234 * This function is used to fetch runs of 1s or 0s from the bitstream for
1235 * use in determining which superblocks are fully and partially coded.
1237 * Codeword RunLength
1244 * 111111xxxxxxxxxxxx 34-4129
1246 static int get_superblock_run_length(GetBitContext *gb)
1249 if (get_bits(gb, 1) == 0)
1252 else if (get_bits(gb, 1) == 0)
1253 return (2 + get_bits(gb, 1));
1255 else if (get_bits(gb, 1) == 0)
1256 return (4 + get_bits(gb, 1));
1258 else if (get_bits(gb, 1) == 0)
1259 return (6 + get_bits(gb, 2));
1261 else if (get_bits(gb, 1) == 0)
1262 return (10 + get_bits(gb, 3));
1264 else if (get_bits(gb, 1) == 0)
1265 return (18 + get_bits(gb, 4));
1268 return (34 + get_bits(gb, 12));
1273 * This function is used to fetch runs of 1s or 0s from the bitstream for
1274 * use in determining which particular fragments are coded.
1276 * Codeword RunLength
1284 static int get_fragment_run_length(GetBitContext *gb)
1287 if (get_bits(gb, 1) == 0)
1288 return (1 + get_bits(gb, 1));
1290 else if (get_bits(gb, 1) == 0)
1291 return (3 + get_bits(gb, 1));
1293 else if (get_bits(gb, 1) == 0)
1294 return (5 + get_bits(gb, 1));
1296 else if (get_bits(gb, 1) == 0)
1297 return (7 + get_bits(gb, 2));
1299 else if (get_bits(gb, 1) == 0)
1300 return (11 + get_bits(gb, 2));
1303 return (15 + get_bits(gb, 4));
1308 * This function decodes a VLC from the bitstream and returns a number
1309 * that ranges from 0..7. The number indicates which of the 8 coding
1323 static int get_mode_code(GetBitContext *gb)
1326 if (get_bits(gb, 1) == 0)
1329 else if (get_bits(gb, 1) == 0)
1332 else if (get_bits(gb, 1) == 0)
1335 else if (get_bits(gb, 1) == 0)
1338 else if (get_bits(gb, 1) == 0)
1341 else if (get_bits(gb, 1) == 0)
1344 else if (get_bits(gb, 1) == 0)
1353 * This function extracts a motion vector from the bitstream using a VLC
1354 * scheme. 3 bits are fetched from the bitstream and 1 of 8 actions is
1355 * taken depending on the value on those 3 bits:
1360 * 3: if (next bit is 1) return -2, else return 2
1361 * 4: if (next bit is 1) return -3, else return 3
1362 * 5: return 4 + (next 2 bits), next bit is sign
1363 * 6: return 8 + (next 3 bits), next bit is sign
1364 * 7: return 16 + (next 4 bits), next bit is sign
1366 static int get_motion_vector_vlc(GetBitContext *gb)
1370 bits = get_bits(gb, 3);
1387 if (get_bits(gb, 1) == 0)
1394 if (get_bits(gb, 1) == 0)
1401 bits = 4 + get_bits(gb, 2);
1402 if (get_bits(gb, 1) == 1)
1407 bits = 8 + get_bits(gb, 3);
1408 if (get_bits(gb, 1) == 1)
1413 bits = 16 + get_bits(gb, 4);
1414 if (get_bits(gb, 1) == 1)
1424 * This function fetches a 5-bit number from the stream followed by
1425 * a sign and calls it a motion vector.
1427 static int get_motion_vector_fixed(GetBitContext *gb)
1432 bits = get_bits(gb, 5);
1434 if (get_bits(gb, 1) == 1)
1441 * This function unpacks all of the superblock/macroblock/fragment coding
1442 * information from the bitstream.
1444 static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
1447 int current_superblock = 0;
1448 int current_run = 0;
1449 int decode_fully_flags = 0;
1450 int decode_partial_blocks = 0;
1451 int first_c_fragment_seen;
1454 int current_fragment;
1456 debug_vp3(" vp3: unpacking superblock coding\n");
1460 debug_vp3(" keyframe-- all superblocks are fully coded\n");
1461 memset(s->superblock_coding, SB_FULLY_CODED, s->superblock_count);
1465 /* unpack the list of partially-coded superblocks */
1466 bit = get_bits(gb, 1);
1467 /* toggle the bit because as soon as the first run length is
1468 * fetched the bit will be toggled again */
1470 while (current_superblock < s->superblock_count) {
1471 if (current_run == 0) {
1473 current_run = get_superblock_run_length(gb);
1474 debug_block_coding(" setting superblocks %d..%d to %s\n",
1476 current_superblock + current_run - 1,
1477 (bit) ? "partially coded" : "not coded");
1479 /* if any of the superblocks are not partially coded, flag
1480 * a boolean to decode the list of fully-coded superblocks */
1482 decode_fully_flags = 1;
1485 /* make a note of the fact that there are partially coded
1487 decode_partial_blocks = 1;
1490 s->superblock_coding[current_superblock++] =
1491 (bit) ? SB_PARTIALLY_CODED : SB_NOT_CODED;
1495 /* unpack the list of fully coded superblocks if any of the blocks were
1496 * not marked as partially coded in the previous step */
1497 if (decode_fully_flags) {
1499 current_superblock = 0;
1501 bit = get_bits(gb, 1);
1502 /* toggle the bit because as soon as the first run length is
1503 * fetched the bit will be toggled again */
1505 while (current_superblock < s->superblock_count) {
1507 /* skip any superblocks already marked as partially coded */
1508 if (s->superblock_coding[current_superblock] == SB_NOT_CODED) {
1510 if (current_run == 0) {
1512 current_run = get_superblock_run_length(gb);
1515 debug_block_coding(" setting superblock %d to %s\n",
1517 (bit) ? "fully coded" : "not coded");
1518 s->superblock_coding[current_superblock] =
1519 (bit) ? SB_FULLY_CODED : SB_NOT_CODED;
1522 current_superblock++;
1526 /* if there were partial blocks, initialize bitstream for
1527 * unpacking fragment codings */
1528 if (decode_partial_blocks) {
1531 bit = get_bits(gb, 1);
1532 /* toggle the bit because as soon as the first run length is
1533 * fetched the bit will be toggled again */
1538 /* figure out which fragments are coded; iterate through each
1539 * superblock (all planes) */
1540 s->coded_fragment_list_index = 0;
1541 s->first_coded_y_fragment = s->first_coded_c_fragment = 0;
1542 s->last_coded_y_fragment = s->last_coded_c_fragment = -1;
1543 first_c_fragment_seen = 0;
1544 memset(s->macroblock_coding, MODE_COPY, s->macroblock_count);
1545 for (i = 0; i < s->superblock_count; i++) {
1547 /* iterate through all 16 fragments in a superblock */
1548 for (j = 0; j < 16; j++) {
1550 /* if the fragment is in bounds, check its coding status */
1551 current_fragment = s->superblock_fragments[i * 16 + j];
1552 if (current_fragment >= s->fragment_count) {
1553 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_superblocks(): bad fragment number (%d >= %d)\n",
1554 current_fragment, s->fragment_count);
1557 if (current_fragment != -1) {
1558 if (s->superblock_coding[i] == SB_NOT_CODED) {
1560 /* copy all the fragments from the prior frame */
1561 s->all_fragments[current_fragment].coding_method =
1564 } else if (s->superblock_coding[i] == SB_PARTIALLY_CODED) {
1566 /* fragment may or may not be coded; this is the case
1567 * that cares about the fragment coding runs */
1568 if (current_run == 0) {
1570 current_run = get_fragment_run_length(gb);
1574 /* default mode; actual mode will be decoded in
1576 s->all_fragments[current_fragment].coding_method =
1578 s->coded_fragment_list[s->coded_fragment_list_index] =
1580 if ((current_fragment >= s->u_fragment_start) &&
1581 (s->last_coded_y_fragment == -1) &&
1582 (!first_c_fragment_seen)) {
1583 s->first_coded_c_fragment = s->coded_fragment_list_index;
1584 s->last_coded_y_fragment = s->first_coded_c_fragment - 1;
1585 first_c_fragment_seen = 1;
1587 s->coded_fragment_list_index++;
1588 s->macroblock_coding[s->all_fragments[current_fragment].macroblock] = MODE_INTER_NO_MV;
1589 debug_block_coding(" superblock %d is partially coded, fragment %d is coded\n",
1590 i, current_fragment);
1592 /* not coded; copy this fragment from the prior frame */
1593 s->all_fragments[current_fragment].coding_method =
1595 debug_block_coding(" superblock %d is partially coded, fragment %d is not coded\n",
1596 i, current_fragment);
1603 /* fragments are fully coded in this superblock; actual
1604 * coding will be determined in next step */
1605 s->all_fragments[current_fragment].coding_method =
1607 s->coded_fragment_list[s->coded_fragment_list_index] =
1609 if ((current_fragment >= s->u_fragment_start) &&
1610 (s->last_coded_y_fragment == -1) &&
1611 (!first_c_fragment_seen)) {
1612 s->first_coded_c_fragment = s->coded_fragment_list_index;
1613 s->last_coded_y_fragment = s->first_coded_c_fragment - 1;
1614 first_c_fragment_seen = 1;
1616 s->coded_fragment_list_index++;
1617 s->macroblock_coding[s->all_fragments[current_fragment].macroblock] = MODE_INTER_NO_MV;
1618 debug_block_coding(" superblock %d is fully coded, fragment %d is coded\n",
1619 i, current_fragment);
1625 if (!first_c_fragment_seen)
1626 /* only Y fragments coded in this frame */
1627 s->last_coded_y_fragment = s->coded_fragment_list_index - 1;
1629 /* end the list of coded C fragments */
1630 s->last_coded_c_fragment = s->coded_fragment_list_index - 1;
1632 debug_block_coding(" %d total coded fragments, y: %d -> %d, c: %d -> %d\n",
1633 s->coded_fragment_list_index,
1634 s->first_coded_y_fragment,
1635 s->last_coded_y_fragment,
1636 s->first_coded_c_fragment,
1637 s->last_coded_c_fragment);
1643 * This function unpacks all the coding mode data for individual macroblocks
1644 * from the bitstream.
1646 static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
1650 int current_macroblock;
1651 int current_fragment;
1654 debug_vp3(" vp3: unpacking encoding modes\n");
1657 debug_vp3(" keyframe-- all blocks are coded as INTRA\n");
1659 for (i = 0; i < s->fragment_count; i++)
1660 s->all_fragments[i].coding_method = MODE_INTRA;
1664 /* fetch the mode coding scheme for this frame */
1665 scheme = get_bits(gb, 3);
1666 debug_modes(" using mode alphabet %d\n", scheme);
1668 /* is it a custom coding scheme? */
1670 debug_modes(" custom mode alphabet ahead:\n");
1671 for (i = 0; i < 8; i++)
1672 ModeAlphabet[scheme][get_bits(gb, 3)] = i;
1675 for (i = 0; i < 8; i++)
1676 debug_modes(" mode[%d][%d] = %d\n", scheme, i,
1677 ModeAlphabet[scheme][i]);
1679 /* iterate through all of the macroblocks that contain 1 or more
1680 * coded fragments */
1681 for (i = 0; i < s->u_superblock_start; i++) {
1683 for (j = 0; j < 4; j++) {
1684 current_macroblock = s->superblock_macroblocks[i * 4 + j];
1685 if ((current_macroblock == -1) ||
1686 (s->macroblock_coding[current_macroblock] == MODE_COPY))
1688 if (current_macroblock >= s->macroblock_count) {
1689 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_modes(): bad macroblock number (%d >= %d)\n",
1690 current_macroblock, s->macroblock_count);
1694 /* mode 7 means get 3 bits for each coding mode */
1696 coding_mode = get_bits(gb, 3);
1698 coding_mode = ModeAlphabet[scheme][get_mode_code(gb)];
1700 s->macroblock_coding[current_macroblock] = coding_mode;
1701 for (k = 0; k < 6; k++) {
1703 s->macroblock_fragments[current_macroblock * 6 + k];
1704 if (current_fragment == -1)
1706 if (current_fragment >= s->fragment_count) {
1707 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_modes(): bad fragment number (%d >= %d)\n",
1708 current_fragment, s->fragment_count);
1711 if (s->all_fragments[current_fragment].coding_method !=
1713 s->all_fragments[current_fragment].coding_method =
1717 debug_modes(" coding method for macroblock starting @ fragment %d = %d\n",
1718 s->macroblock_fragments[current_macroblock * 6], coding_mode);
1727 * This function unpacks all the motion vectors for the individual
1728 * macroblocks from the bitstream.
1730 static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
1736 int last_motion_x = 0;
1737 int last_motion_y = 0;
1738 int prior_last_motion_x = 0;
1739 int prior_last_motion_y = 0;
1740 int current_macroblock;
1741 int current_fragment;
1743 debug_vp3(" vp3: unpacking motion vectors\n");
1746 debug_vp3(" keyframe-- there are no motion vectors\n");
1750 memset(motion_x, 0, 6 * sizeof(int));
1751 memset(motion_y, 0, 6 * sizeof(int));
1753 /* coding mode 0 is the VLC scheme; 1 is the fixed code scheme */
1754 coding_mode = get_bits(gb, 1);
1755 debug_vectors(" using %s scheme for unpacking motion vectors\n",
1756 (coding_mode == 0) ? "VLC" : "fixed-length");
1758 /* iterate through all of the macroblocks that contain 1 or more
1759 * coded fragments */
1760 for (i = 0; i < s->u_superblock_start; i++) {
1762 for (j = 0; j < 4; j++) {
1763 current_macroblock = s->superblock_macroblocks[i * 4 + j];
1764 if ((current_macroblock == -1) ||
1765 (s->macroblock_coding[current_macroblock] == MODE_COPY))
1767 if (current_macroblock >= s->macroblock_count) {
1768 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_vectors(): bad macroblock number (%d >= %d)\n",
1769 current_macroblock, s->macroblock_count);
1773 current_fragment = s->macroblock_fragments[current_macroblock * 6];
1774 if (current_fragment >= s->fragment_count) {
1775 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_vectors(): bad fragment number (%d >= %d\n",
1776 current_fragment, s->fragment_count);
1779 switch (s->macroblock_coding[current_macroblock]) {
1781 case MODE_INTER_PLUS_MV:
1782 case MODE_GOLDEN_MV:
1783 /* all 6 fragments use the same motion vector */
1784 if (coding_mode == 0) {
1785 motion_x[0] = get_motion_vector_vlc(gb);
1786 motion_y[0] = get_motion_vector_vlc(gb);
1788 motion_x[0] = get_motion_vector_fixed(gb);
1789 motion_y[0] = get_motion_vector_fixed(gb);
1791 for (k = 1; k < 6; k++) {
1792 motion_x[k] = motion_x[0];
1793 motion_y[k] = motion_y[0];
1796 /* vector maintenance, only on MODE_INTER_PLUS_MV */
1797 if (s->macroblock_coding[current_macroblock] ==
1798 MODE_INTER_PLUS_MV) {
1799 prior_last_motion_x = last_motion_x;
1800 prior_last_motion_y = last_motion_y;
1801 last_motion_x = motion_x[0];
1802 last_motion_y = motion_y[0];
1806 case MODE_INTER_FOURMV:
1807 /* fetch 4 vectors from the bitstream, one for each
1808 * Y fragment, then average for the C fragment vectors */
1809 motion_x[4] = motion_y[4] = 0;
1810 for (k = 0; k < 4; k++) {
1811 if (coding_mode == 0) {
1812 motion_x[k] = get_motion_vector_vlc(gb);
1813 motion_y[k] = get_motion_vector_vlc(gb);
1815 motion_x[k] = get_motion_vector_fixed(gb);
1816 motion_y[k] = get_motion_vector_fixed(gb);
1818 motion_x[4] += motion_x[k];
1819 motion_y[4] += motion_y[k];
1822 if (motion_x[4] >= 0)
1823 motion_x[4] = (motion_x[4] + 2) / 4;
1825 motion_x[4] = (motion_x[4] - 2) / 4;
1826 motion_x[5] = motion_x[4];
1828 if (motion_y[4] >= 0)
1829 motion_y[4] = (motion_y[4] + 2) / 4;
1831 motion_y[4] = (motion_y[4] - 2) / 4;
1832 motion_y[5] = motion_y[4];
1834 /* vector maintenance; vector[3] is treated as the
1835 * last vector in this case */
1836 prior_last_motion_x = last_motion_x;
1837 prior_last_motion_y = last_motion_y;
1838 last_motion_x = motion_x[3];
1839 last_motion_y = motion_y[3];
1842 case MODE_INTER_LAST_MV:
1843 /* all 6 fragments use the last motion vector */
1844 motion_x[0] = last_motion_x;
1845 motion_y[0] = last_motion_y;
1846 for (k = 1; k < 6; k++) {
1847 motion_x[k] = motion_x[0];
1848 motion_y[k] = motion_y[0];
1851 /* no vector maintenance (last vector remains the
1855 case MODE_INTER_PRIOR_LAST:
1856 /* all 6 fragments use the motion vector prior to the
1857 * last motion vector */
1858 motion_x[0] = prior_last_motion_x;
1859 motion_y[0] = prior_last_motion_y;
1860 for (k = 1; k < 6; k++) {
1861 motion_x[k] = motion_x[0];
1862 motion_y[k] = motion_y[0];
1865 /* vector maintenance */
1866 prior_last_motion_x = last_motion_x;
1867 prior_last_motion_y = last_motion_y;
1868 last_motion_x = motion_x[0];
1869 last_motion_y = motion_y[0];
1873 /* covers intra, inter without MV, golden without MV */
1874 memset(motion_x, 0, 6 * sizeof(int));
1875 memset(motion_y, 0, 6 * sizeof(int));
1877 /* no vector maintenance */
1881 /* assign the motion vectors to the correct fragments */
1882 debug_vectors(" vectors for macroblock starting @ fragment %d (coding method %d):\n",
1884 s->macroblock_coding[current_macroblock]);
1885 for (k = 0; k < 6; k++) {
1887 s->macroblock_fragments[current_macroblock * 6 + k];
1888 if (current_fragment == -1)
1890 if (current_fragment >= s->fragment_count) {
1891 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_vectors(): bad fragment number (%d >= %d)\n",
1892 current_fragment, s->fragment_count);
1895 s->all_fragments[current_fragment].motion_x = motion_x[k];
1896 s->all_fragments[current_fragment].motion_y = motion_y[k];
1897 debug_vectors(" vector %d: fragment %d = (%d, %d)\n",
1898 k, current_fragment, motion_x[k], motion_y[k]);
1908 * This function is called by unpack_dct_coeffs() to extract the VLCs from
1909 * the bitstream. The VLCs encode tokens which are used to unpack DCT
1910 * data. This function unpacks all the VLCs for either the Y plane or both
1911 * C planes, and is called for DC coefficients or different AC coefficient
1912 * levels (since different coefficient types require different VLC tables.
1914 * This function returns a residual eob run. E.g, if a particular token gave
1915 * instructions to EOB the next 5 fragments and there were only 2 fragments
1916 * left in the current fragment range, 3 would be returned so that it could
1917 * be passed into the next call to this same function.
1919 static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
1920 VLC *table, int coeff_index,
1921 int first_fragment, int last_fragment,
1928 Vp3Fragment *fragment;
1930 if ((first_fragment >= s->fragment_count) ||
1931 (last_fragment >= s->fragment_count)) {
1933 av_log(s->avctx, AV_LOG_ERROR, " vp3:unpack_vlcs(): bad fragment number (%d -> %d ?)\n",
1934 first_fragment, last_fragment);
1938 for (i = first_fragment; i <= last_fragment; i++) {
1940 fragment = &s->all_fragments[s->coded_fragment_list[i]];
1941 if (fragment->coeff_count > coeff_index)
1945 /* decode a VLC into a token */
1946 token = get_vlc2(gb, table->table, 5, 3);
1947 debug_vlc(" token = %2d, ", token);
1948 /* use the token to get a zero run, a coefficient, and an eob run */
1949 unpack_token(gb, token, &zero_run, &coeff, &eob_run);
1953 fragment->coeff_count += zero_run;
1954 if (fragment->coeff_count < 64)
1955 fragment->coeffs[fragment->coeff_count++] = coeff;
1956 debug_vlc(" fragment %d coeff = %d\n",
1957 s->coded_fragment_list[i], fragment->coeffs[coeff_index]);
1959 fragment->last_coeff = fragment->coeff_count;
1960 fragment->coeff_count = 64;
1961 debug_vlc(" fragment %d eob with %d coefficients\n",
1962 s->coded_fragment_list[i], fragment->last_coeff);
1971 * This function unpacks all of the DCT coefficient data from the
1974 static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
1981 int residual_eob_run = 0;
1983 /* fetch the DC table indices */
1984 dc_y_table = get_bits(gb, 4);
1985 dc_c_table = get_bits(gb, 4);
1987 /* unpack the Y plane DC coefficients */
1988 debug_vp3(" vp3: unpacking Y plane DC coefficients using table %d\n",
1990 residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_y_table], 0,
1991 s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
1993 /* unpack the C plane DC coefficients */
1994 debug_vp3(" vp3: unpacking C plane DC coefficients using table %d\n",
1996 residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
1997 s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
1999 /* fetch the AC table indices */
2000 ac_y_table = get_bits(gb, 4);
2001 ac_c_table = get_bits(gb, 4);
2003 /* unpack the group 1 AC coefficients (coeffs 1-5) */
2004 for (i = 1; i <= 5; i++) {
2006 debug_vp3(" vp3: unpacking level %d Y plane AC coefficients using table %d\n",
2008 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_1[ac_y_table], i,
2009 s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
2011 debug_vp3(" vp3: unpacking level %d C plane AC coefficients using table %d\n",
2013 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_1[ac_c_table], i,
2014 s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
2017 /* unpack the group 2 AC coefficients (coeffs 6-14) */
2018 for (i = 6; i <= 14; i++) {
2020 debug_vp3(" vp3: unpacking level %d Y plane AC coefficients using table %d\n",
2022 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_2[ac_y_table], i,
2023 s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
2025 debug_vp3(" vp3: unpacking level %d C plane AC coefficients using table %d\n",
2027 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_2[ac_c_table], i,
2028 s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
2031 /* unpack the group 3 AC coefficients (coeffs 15-27) */
2032 for (i = 15; i <= 27; i++) {
2034 debug_vp3(" vp3: unpacking level %d Y plane AC coefficients using table %d\n",
2036 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_3[ac_y_table], i,
2037 s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
2039 debug_vp3(" vp3: unpacking level %d C plane AC coefficients using table %d\n",
2041 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_3[ac_c_table], i,
2042 s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
2045 /* unpack the group 4 AC coefficients (coeffs 28-63) */
2046 for (i = 28; i <= 63; i++) {
2048 debug_vp3(" vp3: unpacking level %d Y plane AC coefficients using table %d\n",
2050 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_4[ac_y_table], i,
2051 s->first_coded_y_fragment, s->last_coded_y_fragment, residual_eob_run);
2053 debug_vp3(" vp3: unpacking level %d C plane AC coefficients using table %d\n",
2055 residual_eob_run = unpack_vlcs(s, gb, &s->ac_vlc_4[ac_c_table], i,
2056 s->first_coded_c_fragment, s->last_coded_c_fragment, residual_eob_run);
2063 * This function reverses the DC prediction for each coded fragment in
2064 * the frame. Much of this function is adapted directly from the original
2067 #define COMPATIBLE_FRAME(x) \
2068 (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
2069 #define FRAME_CODED(x) (s->all_fragments[x].coding_method != MODE_COPY)
2070 static inline int iabs (int x) { return ((x < 0) ? -x : x); }
2072 static void reverse_dc_prediction(Vp3DecodeContext *s,
2075 int fragment_height)
2084 int i = first_fragment;
2087 * Fragment prediction groups:
2095 * Note: Groups 5 and 7 do not exist as it would mean that the
2096 * fragment's x coordinate is both 0 and (width - 1) at the same time.
2098 int predictor_group;
2101 /* validity flags for the left, up-left, up, and up-right fragments */
2102 int fl, ful, fu, fur;
2104 /* DC values for the left, up-left, up, and up-right fragments */
2105 int vl, vul, vu, vur;
2107 /* indices for the left, up-left, up, and up-right fragments */
2111 * The 6 fields mean:
2112 * 0: up-left multiplier
2114 * 2: up-right multiplier
2115 * 3: left multiplier
2117 * 5: right bit shift divisor (e.g., 7 means >>=7, a.k.a. div by 128)
2119 int predictor_transform[16][6] = {
2120 { 0, 0, 0, 0, 0, 0 },
2121 { 0, 0, 0, 1, 0, 0 }, // PL
2122 { 0, 0, 1, 0, 0, 0 }, // PUR
2123 { 0, 0, 53, 75, 127, 7 }, // PUR|PL
2124 { 0, 1, 0, 0, 0, 0 }, // PU
2125 { 0, 1, 0, 1, 1, 1 }, // PU|PL
2126 { 0, 1, 0, 0, 0, 0 }, // PU|PUR
2127 { 0, 0, 53, 75, 127, 7 }, // PU|PUR|PL
2128 { 1, 0, 0, 0, 0, 0 }, // PUL
2129 { 0, 0, 0, 1, 0, 0 }, // PUL|PL
2130 { 1, 0, 1, 0, 1, 1 }, // PUL|PUR
2131 { 0, 0, 53, 75, 127, 7 }, // PUL|PUR|PL
2132 { 0, 1, 0, 0, 0, 0 }, // PUL|PU
2133 {-26, 29, 0, 29, 31, 5 }, // PUL|PU|PL
2134 { 3, 10, 3, 0, 15, 4 }, // PUL|PU|PUR
2135 {-26, 29, 0, 29, 31, 5 } // PUL|PU|PUR|PL
2138 /* This table shows which types of blocks can use other blocks for
2139 * prediction. For example, INTRA is the only mode in this table to
2140 * have a frame number of 0. That means INTRA blocks can only predict
2141 * from other INTRA blocks. There are 2 golden frame coding types;
2142 * blocks encoding in these modes can only predict from other blocks
2143 * that were encoded with these 1 of these 2 modes. */
2144 unsigned char compatible_frame[8] = {
2145 1, /* MODE_INTER_NO_MV */
2147 1, /* MODE_INTER_PLUS_MV */
2148 1, /* MODE_INTER_LAST_MV */
2149 1, /* MODE_INTER_PRIOR_MV */
2150 2, /* MODE_USING_GOLDEN */
2151 2, /* MODE_GOLDEN_MV */
2152 1 /* MODE_INTER_FOUR_MV */
2154 int current_frame_type;
2156 /* there is a last DC predictor for each of the 3 frame types */
2161 debug_vp3(" vp3: reversing DC prediction\n");
2163 vul = vu = vur = vl = 0;
2164 last_dc[0] = last_dc[1] = last_dc[2] = 0;
2166 /* for each fragment row... */
2167 for (y = 0; y < fragment_height; y++) {
2169 /* for each fragment in a row... */
2170 for (x = 0; x < fragment_width; x++, i++) {
2172 /* reverse prediction if this block was coded */
2173 if (s->all_fragments[i].coding_method != MODE_COPY) {
2175 current_frame_type =
2176 compatible_frame[s->all_fragments[i].coding_method];
2177 predictor_group = (x == 0) + ((y == 0) << 1) +
2178 ((x + 1 == fragment_width) << 2);
2179 debug_dc_pred(" frag %d: group %d, orig DC = %d, ",
2180 i, predictor_group, s->all_fragments[i].coeffs[0]);
2182 switch (predictor_group) {
2185 /* main body of fragments; consider all 4 possible
2186 * fragments for prediction */
2188 /* calculate the indices of the predicting fragments */
2189 ul = i - fragment_width - 1;
2190 u = i - fragment_width;
2191 ur = i - fragment_width + 1;
2194 /* fetch the DC values for the predicting fragments */
2195 vul = s->all_fragments[ul].coeffs[0];
2196 vu = s->all_fragments[u].coeffs[0];
2197 vur = s->all_fragments[ur].coeffs[0];
2198 vl = s->all_fragments[l].coeffs[0];
2200 /* figure out which fragments are valid */
2201 ful = FRAME_CODED(ul) && COMPATIBLE_FRAME(ul);
2202 fu = FRAME_CODED(u) && COMPATIBLE_FRAME(u);
2203 fur = FRAME_CODED(ur) && COMPATIBLE_FRAME(ur);
2204 fl = FRAME_CODED(l) && COMPATIBLE_FRAME(l);
2206 /* decide which predictor transform to use */
2207 transform = (fl*PL) | (fu*PU) | (ful*PUL) | (fur*PUR);
2212 /* left column of fragments, not including top corner;
2213 * only consider up and up-right fragments */
2215 /* calculate the indices of the predicting fragments */
2216 u = i - fragment_width;
2217 ur = i - fragment_width + 1;
2219 /* fetch the DC values for the predicting fragments */
2220 vu = s->all_fragments[u].coeffs[0];
2221 vur = s->all_fragments[ur].coeffs[0];
2223 /* figure out which fragments are valid */
2224 fur = FRAME_CODED(ur) && COMPATIBLE_FRAME(ur);
2225 fu = FRAME_CODED(u) && COMPATIBLE_FRAME(u);
2227 /* decide which predictor transform to use */
2228 transform = (fu*PU) | (fur*PUR);
2234 /* top row of fragments, not including top-left frag;
2235 * only consider the left fragment for prediction */
2237 /* calculate the indices of the predicting fragments */
2240 /* fetch the DC values for the predicting fragments */
2241 vl = s->all_fragments[l].coeffs[0];
2243 /* figure out which fragments are valid */
2244 fl = FRAME_CODED(l) && COMPATIBLE_FRAME(l);
2246 /* decide which predictor transform to use */
2247 transform = (fl*PL);
2252 /* top-left fragment */
2254 /* nothing to predict from in this case */
2260 /* right column of fragments, not including top corner;
2261 * consider up-left, up, and left fragments for
2264 /* calculate the indices of the predicting fragments */
2265 ul = i - fragment_width - 1;
2266 u = i - fragment_width;
2269 /* fetch the DC values for the predicting fragments */
2270 vul = s->all_fragments[ul].coeffs[0];
2271 vu = s->all_fragments[u].coeffs[0];
2272 vl = s->all_fragments[l].coeffs[0];
2274 /* figure out which fragments are valid */
2275 ful = FRAME_CODED(ul) && COMPATIBLE_FRAME(ul);
2276 fu = FRAME_CODED(u) && COMPATIBLE_FRAME(u);
2277 fl = FRAME_CODED(l) && COMPATIBLE_FRAME(l);
2279 /* decide which predictor transform to use */
2280 transform = (fl*PL) | (fu*PU) | (ful*PUL);
2286 debug_dc_pred("transform = %d, ", transform);
2288 if (transform == 0) {
2290 /* if there were no fragments to predict from, use last
2292 s->all_fragments[i].coeffs[0] += last_dc[current_frame_type];
2293 debug_dc_pred("from last DC (%d) = %d\n",
2294 current_frame_type, s->all_fragments[i].coeffs[0]);
2298 /* apply the appropriate predictor transform */
2300 (predictor_transform[transform][0] * vul) +
2301 (predictor_transform[transform][1] * vu) +
2302 (predictor_transform[transform][2] * vur) +
2303 (predictor_transform[transform][3] * vl);
2305 /* if there is a shift value in the transform, add
2306 * the sign bit before the shift */
2307 if (predictor_transform[transform][5] != 0) {
2308 predicted_dc += ((predicted_dc >> 15) &
2309 predictor_transform[transform][4]);
2310 predicted_dc >>= predictor_transform[transform][5];
2313 /* check for outranging on the [ul u l] and
2314 * [ul u ur l] predictors */
2315 if ((transform == 13) || (transform == 15)) {
2316 if (iabs(predicted_dc - vu) > 128)
2318 else if (iabs(predicted_dc - vl) > 128)
2320 else if (iabs(predicted_dc - vul) > 128)
2324 /* at long last, apply the predictor */
2325 s->all_fragments[i].coeffs[0] += predicted_dc;
2326 debug_dc_pred("from pred DC = %d\n",
2327 s->all_fragments[i].coeffs[0]);
2331 last_dc[current_frame_type] = s->all_fragments[i].coeffs[0];
2338 * This function performs the final rendering of each fragment's data
2339 * onto the output frame.
2341 static void render_fragments(Vp3DecodeContext *s,
2345 int plane /* 0 = Y, 1 = U, 2 = V */)
2349 int i = first_fragment;
2350 int16_t *dequantizer;
2351 unsigned char *output_plane;
2352 unsigned char *last_plane;
2353 unsigned char *golden_plane;
2355 int motion_x, motion_y;
2356 int upper_motion_limit, lower_motion_limit;
2357 int motion_halfpel_index;
2358 uint8_t *motion_source;
2360 debug_vp3(" vp3: rendering final fragments for %s\n",
2361 (plane == 0) ? "Y plane" : (plane == 1) ? "U plane" : "V plane");
2363 /* set up plane-specific parameters */
2365 dequantizer = s->intra_y_dequant;
2366 output_plane = s->current_frame.data[0];
2367 last_plane = s->last_frame.data[0];
2368 golden_plane = s->golden_frame.data[0];
2369 stride = s->current_frame.linesize[0];
2370 if (!s->flipped_image) stride = -stride;
2371 upper_motion_limit = 7 * s->current_frame.linesize[0];
2372 lower_motion_limit = height * s->current_frame.linesize[0] + width - 8;
2373 } else if (plane == 1) {
2374 dequantizer = s->intra_c_dequant;
2375 output_plane = s->current_frame.data[1];
2376 last_plane = s->last_frame.data[1];
2377 golden_plane = s->golden_frame.data[1];
2378 stride = s->current_frame.linesize[1];
2379 if (!s->flipped_image) stride = -stride;
2380 upper_motion_limit = 7 * s->current_frame.linesize[1];
2381 lower_motion_limit = height * s->current_frame.linesize[1] + width - 8;
2383 dequantizer = s->intra_c_dequant;
2384 output_plane = s->current_frame.data[2];
2385 last_plane = s->last_frame.data[2];
2386 golden_plane = s->golden_frame.data[2];
2387 stride = s->current_frame.linesize[2];
2388 if (!s->flipped_image) stride = -stride;
2389 upper_motion_limit = 7 * s->current_frame.linesize[2];
2390 lower_motion_limit = height * s->current_frame.linesize[2] + width - 8;
2393 /* for each fragment row... */
2394 for (y = 0; y < height; y += 8) {
2396 /* for each fragment in a row... */
2397 for (x = 0; x < width; x += 8, i++) {
2399 if ((i < 0) || (i >= s->fragment_count)) {
2400 av_log(s->avctx, AV_LOG_ERROR, " vp3:render_fragments(): bad fragment number (%d)\n", i);
2404 /* transform if this block was coded */
2405 if (s->all_fragments[i].coding_method != MODE_COPY) {
2407 if ((s->all_fragments[i].coding_method == MODE_USING_GOLDEN) ||
2408 (s->all_fragments[i].coding_method == MODE_GOLDEN_MV))
2409 motion_source= golden_plane;
2411 motion_source= last_plane;
2413 motion_source += s->all_fragments[i].first_pixel;
2414 motion_halfpel_index = 0;
2416 /* sort out the motion vector if this fragment is coded
2417 * using a motion vector method */
2418 if ((s->all_fragments[i].coding_method > MODE_INTRA) &&
2419 (s->all_fragments[i].coding_method != MODE_USING_GOLDEN)) {
2421 motion_x = s->all_fragments[i].motion_x;
2422 motion_y = s->all_fragments[i].motion_y;
2424 motion_x= (motion_x>>1) | (motion_x&1);
2425 motion_y= (motion_y>>1) | (motion_y&1);
2428 src_x= (motion_x>>1) + x;
2429 src_y= (motion_y>>1) + y;
2430 if ((motion_x == 0xbeef) || (motion_y == 0xbeef))
2431 av_log(s->avctx, AV_LOG_ERROR, " help! got beefy vector! (%X, %X)\n", motion_x, motion_y);
2433 motion_halfpel_index = motion_x & 0x01;
2434 motion_source += (motion_x >> 1);
2436 // motion_y = -motion_y;
2437 motion_halfpel_index |= (motion_y & 0x01) << 1;
2438 motion_source += ((motion_y >> 1) * stride);
2440 if(src_x<0 || src_y<0 || src_x + 9 >= width || src_y + 9 >= height){
2441 uint8_t *temp= s->edge_emu_buffer;
2442 if(stride<0) temp -= 9*stride;
2443 else temp += 9*stride;
2445 ff_emulated_edge_mc(temp, motion_source, stride, 9, 9, src_x, src_y, width, height);
2446 motion_source= temp;
2450 /* first, take care of copying a block from either the
2451 * previous or the golden frame */
2452 if (s->all_fragments[i].coding_method != MODE_INTRA) {
2454 s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index](
2455 output_plane + s->all_fragments[i].first_pixel,
2460 /* dequantize the DCT coefficients */
2461 debug_idct("fragment %d, coding mode %d, DC = %d, dequant = %d:\n",
2462 i, s->all_fragments[i].coding_method,
2463 s->all_fragments[i].coeffs[0], dequantizer[0]);
2465 /* invert DCT and place (or add) in final output */
2466 if (s->all_fragments[i].coding_method == MODE_INTRA) {
2467 vp3_idct_put(s->all_fragments[i].coeffs, dequantizer,
2468 output_plane + s->all_fragments[i].first_pixel,
2471 vp3_idct_add(s->all_fragments[i].coeffs, dequantizer,
2472 output_plane + s->all_fragments[i].first_pixel,
2476 debug_idct("block after idct_%s():\n",
2477 (s->all_fragments[i].coding_method == MODE_INTRA)?
2479 for (m = 0; m < 8; m++) {
2480 for (n = 0; n < 8; n++) {
2481 debug_idct(" %3d", *(output_plane +
2482 s->all_fragments[i].first_pixel + (m * stride + n)));
2490 /* copy directly from the previous frame */
2491 s->dsp.put_pixels_tab[1][0](
2492 output_plane + s->all_fragments[i].first_pixel,
2493 last_plane + s->all_fragments[i].first_pixel,
2505 * This function computes the first pixel addresses for each fragment.
2506 * This function needs to be invoked after the first frame is allocated
2507 * so that it has access to the plane strides.
2509 static void vp3_calculate_pixel_addresses(Vp3DecodeContext *s)
2514 /* figure out the first pixel addresses for each of the fragments */
2517 for (y = s->fragment_height; y > 0; y--) {
2518 for (x = 0; x < s->fragment_width; x++) {
2519 s->all_fragments[i++].first_pixel =
2520 s->golden_frame.linesize[0] * y * FRAGMENT_PIXELS -
2521 s->golden_frame.linesize[0] +
2522 x * FRAGMENT_PIXELS;
2523 debug_init(" fragment %d, first pixel @ %d\n",
2524 i-1, s->all_fragments[i-1].first_pixel);
2529 i = s->u_fragment_start;
2530 for (y = s->fragment_height / 2; y > 0; y--) {
2531 for (x = 0; x < s->fragment_width / 2; x++) {
2532 s->all_fragments[i++].first_pixel =
2533 s->golden_frame.linesize[1] * y * FRAGMENT_PIXELS -
2534 s->golden_frame.linesize[1] +
2535 x * FRAGMENT_PIXELS;
2536 debug_init(" fragment %d, first pixel @ %d\n",
2537 i-1, s->all_fragments[i-1].first_pixel);
2542 i = s->v_fragment_start;
2543 for (y = s->fragment_height / 2; y > 0; y--) {
2544 for (x = 0; x < s->fragment_width / 2; x++) {
2545 s->all_fragments[i++].first_pixel =
2546 s->golden_frame.linesize[2] * y * FRAGMENT_PIXELS -
2547 s->golden_frame.linesize[2] +
2548 x * FRAGMENT_PIXELS;
2549 debug_init(" fragment %d, first pixel @ %d\n",
2550 i-1, s->all_fragments[i-1].first_pixel);
2555 /* FIXME: this should be merged with the above! */
2556 static void theora_calculate_pixel_addresses(Vp3DecodeContext *s)
2561 /* figure out the first pixel addresses for each of the fragments */
2564 for (y = 1; y <= s->fragment_height; y++) {
2565 for (x = 0; x < s->fragment_width; x++) {
2566 s->all_fragments[i++].first_pixel =
2567 s->golden_frame.linesize[0] * y * FRAGMENT_PIXELS -
2568 s->golden_frame.linesize[0] +
2569 x * FRAGMENT_PIXELS;
2570 debug_init(" fragment %d, first pixel @ %d\n",
2571 i-1, s->all_fragments[i-1].first_pixel);
2576 i = s->u_fragment_start;
2577 for (y = 1; y <= s->fragment_height / 2; y++) {
2578 for (x = 0; x < s->fragment_width / 2; x++) {
2579 s->all_fragments[i++].first_pixel =
2580 s->golden_frame.linesize[1] * y * FRAGMENT_PIXELS -
2581 s->golden_frame.linesize[1] +
2582 x * FRAGMENT_PIXELS;
2583 debug_init(" fragment %d, first pixel @ %d\n",
2584 i-1, s->all_fragments[i-1].first_pixel);
2589 i = s->v_fragment_start;
2590 for (y = 1; y <= s->fragment_height / 2; y++) {
2591 for (x = 0; x < s->fragment_width / 2; x++) {
2592 s->all_fragments[i++].first_pixel =
2593 s->golden_frame.linesize[2] * y * FRAGMENT_PIXELS -
2594 s->golden_frame.linesize[2] +
2595 x * FRAGMENT_PIXELS;
2596 debug_init(" fragment %d, first pixel @ %d\n",
2597 i-1, s->all_fragments[i-1].first_pixel);
2603 * This is the ffmpeg/libavcodec API init function.
2605 static int vp3_decode_init(AVCodecContext *avctx)
2607 Vp3DecodeContext *s = avctx->priv_data;
2611 int y_superblock_count;
2612 int c_superblock_count;
2616 s->width = avctx->width;
2617 s->height = avctx->height;
2619 s->width = (avctx->width + 15) & 0xFFFFFFF0;
2620 s->height = (avctx->height + 15) & 0xFFFFFFF0;
2622 avctx->pix_fmt = PIX_FMT_YUV420P;
2623 avctx->has_b_frames = 0;
2624 dsputil_init(&s->dsp, avctx);
2626 /* initialize to an impossible value which will force a recalculation
2627 * in the first frame decode */
2628 s->quality_index = -1;
2630 s->y_superblock_width = (s->width + 31) / 32;
2631 s->y_superblock_height = (s->height + 31) / 32;
2632 y_superblock_count = s->y_superblock_width * s->y_superblock_height;
2634 /* work out the dimensions for the C planes */
2635 c_width = s->width / 2;
2636 c_height = s->height / 2;
2637 s->c_superblock_width = (c_width + 31) / 32;
2638 s->c_superblock_height = (c_height + 31) / 32;
2639 c_superblock_count = s->c_superblock_width * s->c_superblock_height;
2641 s->superblock_count = y_superblock_count + (c_superblock_count * 2);
2642 s->u_superblock_start = y_superblock_count;
2643 s->v_superblock_start = s->u_superblock_start + c_superblock_count;
2644 s->superblock_coding = av_malloc(s->superblock_count);
2646 s->macroblock_width = (s->width + 15) / 16;
2647 s->macroblock_height = (s->height + 15) / 16;
2648 s->macroblock_count = s->macroblock_width * s->macroblock_height;
2650 s->fragment_width = s->width / FRAGMENT_PIXELS;
2651 s->fragment_height = s->height / FRAGMENT_PIXELS;
2653 /* fragment count covers all 8x8 blocks for all 3 planes */
2654 s->fragment_count = s->fragment_width * s->fragment_height * 3 / 2;
2655 s->u_fragment_start = s->fragment_width * s->fragment_height;
2656 s->v_fragment_start = s->fragment_width * s->fragment_height * 5 / 4;
2658 debug_init(" Y plane: %d x %d\n", s->width, s->height);
2659 debug_init(" C plane: %d x %d\n", c_width, c_height);
2660 debug_init(" Y superblocks: %d x %d, %d total\n",
2661 s->y_superblock_width, s->y_superblock_height, y_superblock_count);
2662 debug_init(" C superblocks: %d x %d, %d total\n",
2663 s->c_superblock_width, s->c_superblock_height, c_superblock_count);
2664 debug_init(" total superblocks = %d, U starts @ %d, V starts @ %d\n",
2665 s->superblock_count, s->u_superblock_start, s->v_superblock_start);
2666 debug_init(" macroblocks: %d x %d, %d total\n",
2667 s->macroblock_width, s->macroblock_height, s->macroblock_count);
2668 debug_init(" %d fragments, %d x %d, u starts @ %d, v starts @ %d\n",
2672 s->u_fragment_start,
2673 s->v_fragment_start);
2675 s->all_fragments = av_malloc(s->fragment_count * sizeof(Vp3Fragment));
2676 s->coded_fragment_list = av_malloc(s->fragment_count * sizeof(int));
2677 s->pixel_addresses_inited = 0;
2679 if (!s->theora_tables)
2681 for (i = 0; i < 64; i++)
2682 s->coded_dc_scale_factor[i] = vp31_dc_scale_factor[i];
2683 for (i = 0; i < 64; i++)
2684 s->coded_quality_threshold[i] = vp31_quality_threshold[i];
2685 for (i = 0; i < 64; i++)
2686 s->coded_intra_y_dequant[i] = vp31_intra_y_dequant[i];
2687 for (i = 0; i < 64; i++)
2688 s->coded_intra_c_dequant[i] = vp31_intra_c_dequant[i];
2689 for (i = 0; i < 64; i++)
2690 s->coded_inter_dequant[i] = vp31_inter_dequant[i];
2693 /* init VLC tables */
2694 for (i = 0; i < 16; i++) {
2697 init_vlc(&s->dc_vlc[i], 5, 32,
2698 &dc_bias[i][0][1], 4, 2,
2699 &dc_bias[i][0][0], 4, 2);
2701 /* group 1 AC histograms */
2702 init_vlc(&s->ac_vlc_1[i], 5, 32,
2703 &ac_bias_0[i][0][1], 4, 2,
2704 &ac_bias_0[i][0][0], 4, 2);
2706 /* group 2 AC histograms */
2707 init_vlc(&s->ac_vlc_2[i], 5, 32,
2708 &ac_bias_1[i][0][1], 4, 2,
2709 &ac_bias_1[i][0][0], 4, 2);
2711 /* group 3 AC histograms */
2712 init_vlc(&s->ac_vlc_3[i], 5, 32,
2713 &ac_bias_2[i][0][1], 4, 2,
2714 &ac_bias_2[i][0][0], 4, 2);
2716 /* group 4 AC histograms */
2717 init_vlc(&s->ac_vlc_4[i], 5, 32,
2718 &ac_bias_3[i][0][1], 4, 2,
2719 &ac_bias_3[i][0][0], 4, 2);
2722 /* build quantization zigzag table */
2723 for (i = 0; i < 64; i++)
2724 zigzag_index[dezigzag_index[i]] = i;
2726 /* work out the block mapping tables */
2727 s->superblock_fragments = av_malloc(s->superblock_count * 16 * sizeof(int));
2728 s->superblock_macroblocks = av_malloc(s->superblock_count * 4 * sizeof(int));
2729 s->macroblock_fragments = av_malloc(s->macroblock_count * 6 * sizeof(int));
2730 s->macroblock_coding = av_malloc(s->macroblock_count + 1);
2731 init_block_mapping(s);
2733 for (i = 0; i < 3; i++) {
2734 s->current_frame.data[i] = NULL;
2735 s->last_frame.data[i] = NULL;
2736 s->golden_frame.data[i] = NULL;
2743 * This is the ffmpeg/libavcodec API frame decode function.
2745 static int vp3_decode_frame(AVCodecContext *avctx,
2746 void *data, int *data_size,
2747 uint8_t *buf, int buf_size)
2749 Vp3DecodeContext *s = avctx->priv_data;
2751 static int counter = 0;
2755 init_get_bits(&gb, buf, buf_size * 8);
2757 if (s->theora && get_bits1(&gb))
2759 av_log(s->avctx, AV_LOG_ERROR, "Theora: bad frame indicator\n");
2763 s->keyframe = !get_bits1(&gb);
2766 s->last_quality_index = s->quality_index;
2767 s->quality_index = get_bits(&gb, 6);
2771 av_log(s->avctx, AV_LOG_ERROR, "Theora: warning, unsupported keyframe coding type?!\n");
2772 skip_bits(&gb, 2); /* reserved? */
2778 s->last_quality_index = s->quality_index;
2779 s->quality_index = get_bits(&gb, 6);
2782 debug_vp3(" VP3 %sframe #%d: Q index = %d\n",
2783 s->keyframe?"key":"", counter, s->quality_index);
2786 if (s->quality_index != s->last_quality_index)
2787 init_dequantizer(s);
2790 /* skip the other 2 header bytes for now */
2791 if (!s->theora) skip_bits(&gb, 16);
2792 if (s->last_frame.data[0] == s->golden_frame.data[0]) {
2793 if (s->golden_frame.data[0])
2794 avctx->release_buffer(avctx, &s->golden_frame);
2795 s->last_frame= s->golden_frame; /* ensure that we catch any access to this released frame */
2797 if (s->golden_frame.data[0])
2798 avctx->release_buffer(avctx, &s->golden_frame);
2799 if (s->last_frame.data[0])
2800 avctx->release_buffer(avctx, &s->last_frame);
2803 s->golden_frame.reference = 3;
2804 if(avctx->get_buffer(avctx, &s->golden_frame) < 0) {
2805 av_log(s->avctx, AV_LOG_ERROR, "vp3: get_buffer() failed\n");
2809 /* golden frame is also the current frame */
2810 memcpy(&s->current_frame, &s->golden_frame, sizeof(AVFrame));
2812 /* time to figure out pixel addresses? */
2813 if (!s->pixel_addresses_inited)
2815 if (!s->flipped_image)
2816 vp3_calculate_pixel_addresses(s);
2818 theora_calculate_pixel_addresses(s);
2821 /* allocate a new current frame */
2822 s->current_frame.reference = 3;
2823 if(avctx->get_buffer(avctx, &s->current_frame) < 0) {
2824 av_log(s->avctx, AV_LOG_ERROR, "vp3: get_buffer() failed\n");
2829 s->current_frame.qscale_table= s->qscale_table; //FIXME allocate individual tables per AVFrame
2830 s->current_frame.qstride= 0;
2837 memcpy(s->current_frame.data[0], s->golden_frame.data[0],
2838 s->current_frame.linesize[0] * s->height);
2839 memcpy(s->current_frame.data[1], s->golden_frame.data[1],
2840 s->current_frame.linesize[1] * s->height / 2);
2841 memcpy(s->current_frame.data[2], s->golden_frame.data[2],
2842 s->current_frame.linesize[2] * s->height / 2);
2847 if (unpack_superblocks(s, &gb) ||
2848 unpack_modes(s, &gb) ||
2849 unpack_vectors(s, &gb) ||
2850 unpack_dct_coeffs(s, &gb)) {
2852 av_log(s->avctx, AV_LOG_ERROR, " vp3: could not decode frame\n");
2856 reverse_dc_prediction(s, 0, s->fragment_width, s->fragment_height);
2857 render_fragments(s, 0, s->width, s->height, 0);
2859 if ((avctx->flags & CODEC_FLAG_GRAY) == 0) {
2860 reverse_dc_prediction(s, s->u_fragment_start,
2861 s->fragment_width / 2, s->fragment_height / 2);
2862 reverse_dc_prediction(s, s->v_fragment_start,
2863 s->fragment_width / 2, s->fragment_height / 2);
2864 render_fragments(s, s->u_fragment_start, s->width / 2, s->height / 2, 1);
2865 render_fragments(s, s->v_fragment_start, s->width / 2, s->height / 2, 2);
2867 memset(s->current_frame.data[1], 0x80, s->width * s->height / 4);
2868 memset(s->current_frame.data[2], 0x80, s->width * s->height / 4);
2875 *data_size=sizeof(AVFrame);
2876 *(AVFrame*)data= s->current_frame;
2878 /* release the last frame, if it is allocated and if it is not the
2880 if ((s->last_frame.data[0]) &&
2881 (s->last_frame.data[0] != s->golden_frame.data[0]))
2882 avctx->release_buffer(avctx, &s->last_frame);
2884 /* shuffle frames (last = current) */
2885 memcpy(&s->last_frame, &s->current_frame, sizeof(AVFrame));
2886 s->current_frame.data[0]= NULL; /* ensure that we catch any access to this released frame */
2892 * This is the ffmpeg/libavcodec API module cleanup function.
2894 static int vp3_decode_end(AVCodecContext *avctx)
2896 Vp3DecodeContext *s = avctx->priv_data;
2898 av_free(s->all_fragments);
2899 av_free(s->coded_fragment_list);
2900 av_free(s->superblock_fragments);
2901 av_free(s->superblock_macroblocks);
2902 av_free(s->macroblock_fragments);
2903 av_free(s->macroblock_coding);
2905 /* release all frames */
2906 if (s->golden_frame.data[0] && s->golden_frame.data[0] != s->last_frame.data[0])
2907 avctx->release_buffer(avctx, &s->golden_frame);
2908 if (s->last_frame.data[0])
2909 avctx->release_buffer(avctx, &s->last_frame);
2910 /* no need to release the current_frame since it will always be pointing
2911 * to the same frame as either the golden or last frame */
2916 static int theora_decode_header(AVCodecContext *avctx, GetBitContext gb)
2918 Vp3DecodeContext *s = avctx->priv_data;
2919 int major, minor, micro;
2921 major = get_bits(&gb, 8); /* version major */
2922 minor = get_bits(&gb, 8); /* version minor */
2923 micro = get_bits(&gb, 8); /* version micro */
2924 av_log(avctx, AV_LOG_INFO, "Theora bitstream version %d.%d.%d\n",
2925 major, minor, micro);
2927 /* 3.3.0 aka alpha3 has the same frame orientation as original vp3 */
2928 /* but previous versions have the image flipped relative to vp3 */
2929 if ((major <= 3) && (minor < 3))
2931 s->flipped_image = 1;
2932 av_log(avctx, AV_LOG_DEBUG, "Old (<alpha3) Theora bitstream, flipped image\n");
2935 s->width = get_bits(&gb, 16) << 4;
2936 s->height = get_bits(&gb, 16) << 4;
2938 skip_bits(&gb, 24); /* frame width */
2939 skip_bits(&gb, 24); /* frame height */
2941 skip_bits(&gb, 8); /* offset x */
2942 skip_bits(&gb, 8); /* offset y */
2944 skip_bits(&gb, 32); /* fps numerator */
2945 skip_bits(&gb, 32); /* fps denumerator */
2946 skip_bits(&gb, 24); /* aspect numerator */
2947 skip_bits(&gb, 24); /* aspect denumerator */
2949 skip_bits(&gb, 5); /* keyframe frequency force */
2950 skip_bits(&gb, 8); /* colorspace */
2951 skip_bits(&gb, 24); /* bitrate */
2953 skip_bits(&gb, 6); /* last(?) quality index */
2955 // align_get_bits(&gb);
2957 avctx->width = s->width;
2958 avctx->height = s->height;
2960 vp3_decode_init(avctx);
2965 static int theora_decode_comments(AVCodecContext *avctx, GetBitContext gb)
2967 int nb_comments, i, tmp;
2969 tmp = get_bits(&gb, 32);
2973 nb_comments = get_bits(&gb, 32);
2974 for (i = 0; i < nb_comments; i++)
2976 tmp = get_bits(&gb, 32);
2984 static int theora_decode_tables(AVCodecContext *avctx, GetBitContext gb)
2986 Vp3DecodeContext *s = avctx->priv_data;
2989 /* quality threshold table */
2990 for (i = 0; i < 64; i++)
2991 s->coded_quality_threshold[i] = get_bits(&gb, 16);
2993 /* dc scale factor table */
2994 for (i = 0; i < 64; i++)
2995 s->coded_dc_scale_factor[i] = get_bits(&gb, 16);
2998 for (i = 0; i < 64; i++)
2999 s->coded_intra_y_dequant[i] = get_bits(&gb, 8);
3002 for (i = 0; i < 64; i++)
3003 s->coded_intra_c_dequant[i] = get_bits(&gb, 8);
3006 for (i = 0; i < 64; i++)
3007 s->coded_inter_dequant[i] = get_bits(&gb, 8);
3009 s->theora_tables = 1;
3014 static int theora_decode_init(AVCodecContext *avctx)
3016 Vp3DecodeContext *s = avctx->priv_data;
3022 if (!avctx->extradata_size)
3025 init_get_bits(&gb, avctx->extradata, avctx->extradata_size);
3027 ptype = get_bits(&gb, 8);
3028 debug_vp3("Theora headerpacket type: %x\n", ptype);
3030 if (!(ptype & 0x80))
3033 skip_bits(&gb, 6*8); /* "theora" */
3038 theora_decode_header(avctx, gb);
3039 vp3_decode_init(avctx);
3042 theora_decode_comments(avctx, gb);
3045 theora_decode_tables(avctx, gb);
3052 AVCodec vp3_decoder = {
3056 sizeof(Vp3DecodeContext),
3065 AVCodec theora_decoder = {
3069 sizeof(Vp3DecodeContext),