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