FFmpeg
vp3.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2004 The FFmpeg project
3  * Copyright (C) 2019 Peter Ross
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * On2 VP3/VP4 Video Decoder
25  *
26  * VP3 Video Decoder by Mike Melanson (mike at multimedia.cx)
27  * For more information about the VP3 coding process, visit:
28  * http://wiki.multimedia.cx/index.php?title=On2_VP3
29  *
30  * Theora decoder by Alex Beregszaszi
31  */
32 
33 #include "config_components.h"
34 
35 #include <stddef.h>
36 #include <string.h>
37 
38 #include "libavutil/attributes.h"
39 #include "libavutil/imgutils.h"
40 #include "libavutil/mem.h"
41 #include "libavutil/mem_internal.h"
42 #include "libavutil/thread.h"
43 
44 #include "avcodec.h"
45 #include "codec_internal.h"
46 #include "decode.h"
47 #include "get_bits.h"
48 #include "hpeldsp.h"
49 #include "jpegquanttables.h"
50 #include "mathops.h"
51 #include "progressframe.h"
52 #include "libavutil/refstruct.h"
53 #include "thread.h"
54 #include "videodsp.h"
55 #include "vp3data.h"
56 #include "vp4data.h"
57 #include "vp3dsp.h"
58 #include "xiph.h"
59 
60 #define VP3_MV_VLC_BITS 6
61 #define VP4_MV_VLC_BITS 6
62 #define SUPERBLOCK_VLC_BITS 6
63 
64 #define FRAGMENT_PIXELS 8
65 
66 // FIXME split things out into their own arrays
67 typedef struct Vp3Fragment {
68  int16_t dc;
69  uint8_t coding_method;
70  uint8_t qpi;
71 } Vp3Fragment;
72 
73 #define SB_NOT_CODED 0
74 #define SB_PARTIALLY_CODED 1
75 #define SB_FULLY_CODED 2
76 
77 // This is the maximum length of a single long bit run that can be encoded
78 // for superblock coding or block qps. Theora special-cases this to read a
79 // bit instead of flipping the current bit to allow for runs longer than 4129.
80 #define MAXIMUM_LONG_BIT_RUN 4129
81 
82 #define MODE_INTER_NO_MV 0
83 #define MODE_INTRA 1
84 #define MODE_INTER_PLUS_MV 2
85 #define MODE_INTER_LAST_MV 3
86 #define MODE_INTER_PRIOR_LAST 4
87 #define MODE_USING_GOLDEN 5
88 #define MODE_GOLDEN_MV 6
89 #define MODE_INTER_FOURMV 7
90 #define CODING_MODE_COUNT 8
91 
92 /* special internal mode */
93 #define MODE_COPY 8
94 
95 static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb);
96 static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb);
97 
98 
99 /* There are 6 preset schemes, plus a free-form scheme */
100 static const int ModeAlphabet[6][CODING_MODE_COUNT] = {
101  /* scheme 1: Last motion vector dominates */
106 
107  /* scheme 2 */
112 
113  /* scheme 3 */
118 
119  /* scheme 4 */
124 
125  /* scheme 5: No motion vector dominates */
130 
131  /* scheme 6 */
136 };
137 
138 static const uint8_t hilbert_offset[16][2] = {
139  { 0, 0 }, { 1, 0 }, { 1, 1 }, { 0, 1 },
140  { 0, 2 }, { 0, 3 }, { 1, 3 }, { 1, 2 },
141  { 2, 2 }, { 2, 3 }, { 3, 3 }, { 3, 2 },
142  { 3, 1 }, { 2, 1 }, { 2, 0 }, { 3, 0 }
143 };
144 
145 enum {
151 };
152 
153 static const uint8_t vp4_pred_block_type_map[8] = {
162 };
163 
164 static VLCElem superblock_run_length_vlc[88]; /* version < 2 */
165 static VLCElem fragment_run_length_vlc[56]; /* version < 2 */
166 static VLCElem motion_vector_vlc[112]; /* version < 2 */
167 
168 // The VP4 tables reuse this vlc.
169 static VLCElem mode_code_vlc[24 + 2108 * CONFIG_VP4_DECODER];
170 
171 #if CONFIG_VP4_DECODER
172 static const VLCElem *vp4_mv_vlc_table[2][7]; /* version >= 2 */
173 static const VLCElem *block_pattern_vlc[2]; /* version >= 2 */
174 #endif
175 
176 typedef struct {
177  int dc;
178  int type;
179 } VP4Predictor;
180 
181 #define MIN_DEQUANT_VAL 2
182 
183 typedef struct HuffEntry {
184  uint8_t len, sym;
185 } HuffEntry;
186 
187 typedef struct HuffTable {
189  uint8_t nb_entries;
190 } HuffTable;
191 
192 typedef struct CoeffVLCs {
193  const VLCElem *vlc_tabs[80];
194  VLC vlcs[80];
195 } CoeffVLCs;
196 
197 typedef struct Vp3DecodeContext {
200  int version;
201  int width, height;
206  int keyframe;
207  uint8_t idct_permutation[64];
208  uint8_t idct_scantable[64];
212  DECLARE_ALIGNED(16, int16_t, block)[64];
216 
217  int qps[3];
218  int nqps;
219 
229  unsigned char *superblock_coding;
230 
231  int macroblock_count; /* y macroblock count */
237  int yuv_macroblock_count; /* y+u+v macroblock count */
238 
242 
245  int data_offset[3];
246  uint8_t offset_x;
247  uint8_t offset_y;
249 
250  int8_t (*motion_val[2])[2];
251 
252  /* tables */
253  uint16_t coded_dc_scale_factor[2][64];
254  uint32_t coded_ac_scale_factor[64];
255  uint8_t base_matrix[384][64];
256  uint8_t qr_count[2][3];
257  uint8_t qr_size[2][3][64];
258  uint16_t qr_base[2][3][64];
259 
260  /**
261  * This is a list of all tokens in bitstream order. Reordering takes place
262  * by pulling from each level during IDCT. As a consequence, IDCT must be
263  * in Hilbert order, making the minimum slice height 64 for 4:2:0 and 32
264  * otherwise. The 32 different tokens with up to 12 bits of extradata are
265  * collapsed into 3 types, packed as follows:
266  * (from the low to high bits)
267  *
268  * 2 bits: type (0,1,2)
269  * 0: EOB run, 14 bits for run length (12 needed)
270  * 1: zero run, 7 bits for run length
271  * 7 bits for the next coefficient (3 needed)
272  * 2: coefficient, 14 bits (11 needed)
273  *
274  * Coefficients are signed, so are packed in the highest bits for automatic
275  * sign extension.
276  */
277  int16_t *dct_tokens[3][64];
278  int16_t *dct_tokens_base;
279 #define TOKEN_EOB(eob_run) ((eob_run) << 2)
280 #define TOKEN_ZERO_RUN(coeff, zero_run) (((coeff) * 512) + ((zero_run) << 2) + 1)
281 #define TOKEN_COEFF(coeff) (((coeff) * 4) + 2)
282 
283  /**
284  * number of blocks that contain DCT coefficients at
285  * the given level or higher
286  */
287  int num_coded_frags[3][64];
289 
290  /* this is a list of indexes into the all_fragments array indicating
291  * which of the fragments are coded */
293 
297 
298  /**
299  * The first 16 of the following VLCs are for the dc coefficients;
300  * the others are four groups of 16 VLCs each for ac coefficients.
301  * This is a RefStruct reference to share these VLCs between threads.
302  */
304 
305  /* these arrays need to be on 16-byte boundaries since SSE2 operations
306  * index into them */
307  DECLARE_ALIGNED(16, int16_t, qmat)[3][2][3][64]; ///< qmat[qpi][is_inter][plane]
308 
309  /* This table contains superblock_count * 16 entries. Each set of 16
310  * numbers corresponds to the fragment indexes 0..15 of the superblock.
311  * An entry will be -1 to indicate that no entry corresponds to that
312  * index. */
314 
315  /* This is an array that indicates how a particular macroblock
316  * is coded. */
317  unsigned char *macroblock_coding;
318 
319  uint8_t *edge_emu_buffer;
320 
321  /* Huffman decode */
323 
324  uint8_t filter_limit_values[64];
326 
327  VP4Predictor * dc_pred_row; /* dc_pred_row[y_superblock_width * 4] */
329 
330 /************************************************************************
331  * VP3 specific functions
332  ************************************************************************/
333 
334 static av_cold void free_tables(AVCodecContext *avctx)
335 {
336  Vp3DecodeContext *s = avctx->priv_data;
337 
338  av_freep(&s->superblock_coding);
339  av_freep(&s->all_fragments);
340  av_freep(&s->nkf_coded_fragment_list);
341  av_freep(&s->kf_coded_fragment_list);
342  av_freep(&s->dct_tokens_base);
343  av_freep(&s->superblock_fragments);
344  av_freep(&s->macroblock_coding);
345  av_freep(&s->dc_pred_row);
346  av_freep(&s->motion_val[0]);
347  av_freep(&s->motion_val[1]);
348 }
349 
351 {
352  Vp3DecodeContext *s = avctx->priv_data;
353 
354  ff_progress_frame_unref(&s->golden_frame);
355  ff_progress_frame_unref(&s->last_frame);
356  ff_progress_frame_unref(&s->current_frame);
357 }
358 
360 {
361  Vp3DecodeContext *s = avctx->priv_data;
362 
363  free_tables(avctx);
364  av_freep(&s->edge_emu_buffer);
365 
366  s->theora_tables = 0;
367 
368  /* release all frames */
369  vp3_decode_flush(avctx);
370 
371  av_refstruct_unref(&s->coeff_vlc);
372 
373  return 0;
374 }
375 
376 /**
377  * This function sets up all of the various blocks mappings:
378  * superblocks <-> fragments, macroblocks <-> fragments,
379  * superblocks <-> macroblocks
380  *
381  * @return 0 is successful; returns 1 if *anything* went wrong.
382  */
384 {
385  int j = 0;
386 
387  for (int plane = 0; plane < 3; plane++) {
388  int sb_width = plane ? s->c_superblock_width
389  : s->y_superblock_width;
390  int sb_height = plane ? s->c_superblock_height
391  : s->y_superblock_height;
392  int frag_width = s->fragment_width[!!plane];
393  int frag_height = s->fragment_height[!!plane];
394 
395  for (int sb_y = 0; sb_y < sb_height; sb_y++)
396  for (int sb_x = 0; sb_x < sb_width; sb_x++)
397  for (int i = 0; i < 16; i++) {
398  int x = 4 * sb_x + hilbert_offset[i][0];
399  int y = 4 * sb_y + hilbert_offset[i][1];
400 
401  if (x < frag_width && y < frag_height)
402  s->superblock_fragments[j++] = s->fragment_start[plane] +
403  y * frag_width + x;
404  else
405  s->superblock_fragments[j++] = -1;
406  }
407  }
408 
409  return 0; /* successful path out */
410 }
411 
412 /*
413  * This function sets up the dequantization tables used for a particular
414  * frame.
415  */
416 static void init_dequantizer(Vp3DecodeContext *s, int qpi)
417 {
418  int ac_scale_factor = s->coded_ac_scale_factor[s->qps[qpi]];
419 
420  for (int inter = 0; inter < 2; inter++) {
421  for (int plane = 0; plane < 3; plane++) {
422  int dc_scale_factor = s->coded_dc_scale_factor[!!plane][s->qps[qpi]];
423  int sum = 0, bmi, bmj, qistart, qri;
424  for (qri = 0; qri < s->qr_count[inter][plane]; qri++) {
425  sum += s->qr_size[inter][plane][qri];
426  if (s->qps[qpi] <= sum)
427  break;
428  }
429  qistart = sum - s->qr_size[inter][plane][qri];
430  bmi = s->qr_base[inter][plane][qri];
431  bmj = s->qr_base[inter][plane][qri + 1];
432  for (int i = 0; i < 64; i++) {
433  int coeff = (2 * (sum - s->qps[qpi]) * s->base_matrix[bmi][i] -
434  2 * (qistart - s->qps[qpi]) * s->base_matrix[bmj][i] +
435  s->qr_size[inter][plane][qri]) /
436  (2 * s->qr_size[inter][plane][qri]);
437 
438  int qmin = 8 << (inter + !i);
439  int qscale = i ? ac_scale_factor : dc_scale_factor;
440  int qbias = (1 + inter) * 3;
441  s->qmat[qpi][inter][plane][s->idct_permutation[i]] =
442  (i == 0 || s->version < 2) ? av_clip((qscale * coeff) / 100 * 4, qmin, 4096)
443  : (qscale * (coeff - qbias) / 100 + qbias) * 4;
444  }
445  /* all DC coefficients use the same quant so as not to interfere
446  * with DC prediction */
447  s->qmat[qpi][inter][plane][0] = s->qmat[0][inter][plane][0];
448  }
449  }
450 }
451 
452 /*
453  * This function initializes the loop filter boundary limits if the frame's
454  * quality index is different from the previous frame's.
455  *
456  * The filter_limit_values may not be larger than 127.
457  */
459 {
460  ff_vp3dsp_set_bounding_values(s->bounding_values_array, s->filter_limit_values[s->qps[0]]);
461 }
462 
463 /*
464  * This function unpacks all of the superblock/macroblock/fragment coding
465  * information from the bitstream.
466  */
468 {
469  const int superblock_starts[3] = {
470  0, s->u_superblock_start, s->v_superblock_start
471  };
472  int bit = 0;
473  int current_superblock = 0;
474  int current_run = 0;
475  int num_partial_superblocks = 0;
476 
477  int current_fragment;
478  int plane0_num_coded_frags = 0;
479 
480  if (s->keyframe) {
481  memset(s->superblock_coding, SB_FULLY_CODED, s->superblock_count);
482  } else {
483  /* unpack the list of partially-coded superblocks */
484  bit = get_bits1(gb) ^ 1;
485  current_run = 0;
486 
487  while (current_superblock < s->superblock_count && get_bits_left(gb) > 0) {
488  if (s->theora && current_run == MAXIMUM_LONG_BIT_RUN)
489  bit = get_bits1(gb);
490  else
491  bit ^= 1;
492 
493  current_run = get_vlc2(gb, superblock_run_length_vlc,
495  if (current_run == 34)
496  current_run += get_bits(gb, 12);
497 
498  if (current_run > s->superblock_count - current_superblock) {
499  av_log(s->avctx, AV_LOG_ERROR,
500  "Invalid partially coded superblock run length\n");
501  return -1;
502  }
503 
504  memset(s->superblock_coding + current_superblock, bit, current_run);
505 
506  current_superblock += current_run;
507  if (bit)
508  num_partial_superblocks += current_run;
509  }
510 
511  /* unpack the list of fully coded superblocks if any of the blocks were
512  * not marked as partially coded in the previous step */
513  if (num_partial_superblocks < s->superblock_count) {
514  int superblocks_decoded = 0;
515 
516  current_superblock = 0;
517  bit = get_bits1(gb) ^ 1;
518  current_run = 0;
519 
520  while (superblocks_decoded < s->superblock_count - num_partial_superblocks &&
521  get_bits_left(gb) > 0) {
522  if (s->theora && current_run == MAXIMUM_LONG_BIT_RUN)
523  bit = get_bits1(gb);
524  else
525  bit ^= 1;
526 
527  current_run = get_vlc2(gb, superblock_run_length_vlc,
529  if (current_run == 34)
530  current_run += get_bits(gb, 12);
531 
532  for (int j = 0; j < current_run; current_superblock++) {
533  if (current_superblock >= s->superblock_count) {
534  av_log(s->avctx, AV_LOG_ERROR,
535  "Invalid fully coded superblock run length\n");
536  return -1;
537  }
538 
539  /* skip any superblocks already marked as partially coded */
540  if (s->superblock_coding[current_superblock] == SB_NOT_CODED) {
541  s->superblock_coding[current_superblock] = 2 * bit;
542  j++;
543  }
544  }
545  superblocks_decoded += current_run;
546  }
547  }
548 
549  /* if there were partial blocks, initialize bitstream for
550  * unpacking fragment codings */
551  if (num_partial_superblocks) {
552  current_run = 0;
553  bit = get_bits1(gb);
554  /* toggle the bit because as soon as the first run length is
555  * fetched the bit will be toggled again */
556  bit ^= 1;
557  }
558  }
559 
560  /* figure out which fragments are coded; iterate through each
561  * superblock (all planes) */
562  s->total_num_coded_frags = 0;
563  memset(s->macroblock_coding, MODE_COPY, s->macroblock_count);
564 
565  s->coded_fragment_list[0] = s->keyframe ? s->kf_coded_fragment_list
566  : s->nkf_coded_fragment_list;
567 
568  for (int plane = 0; plane < 3; plane++) {
569  int sb_start = superblock_starts[plane];
570  int sb_end = sb_start + (plane ? s->c_superblock_count
571  : s->y_superblock_count);
572  int num_coded_frags = 0;
573 
574  if (s->keyframe) {
575  if (s->num_kf_coded_fragment[plane] == -1) {
576  for (int i = sb_start; i < sb_end; i++) {
577  /* iterate through all 16 fragments in a superblock */
578  for (int j = 0; j < 16; j++) {
579  /* if the fragment is in bounds, check its coding status */
580  current_fragment = s->superblock_fragments[i * 16 + j];
581  if (current_fragment != -1) {
582  s->coded_fragment_list[plane][num_coded_frags++] =
583  current_fragment;
584  }
585  }
586  }
587  s->num_kf_coded_fragment[plane] = num_coded_frags;
588  } else
589  num_coded_frags = s->num_kf_coded_fragment[plane];
590  } else {
591  for (int i = sb_start; i < sb_end && get_bits_left(gb) > 0; i++) {
592  if (get_bits_left(gb) < plane0_num_coded_frags >> 2) {
593  return AVERROR_INVALIDDATA;
594  }
595  /* iterate through all 16 fragments in a superblock */
596  for (int j = 0; j < 16; j++) {
597  /* if the fragment is in bounds, check its coding status */
598  current_fragment = s->superblock_fragments[i * 16 + j];
599  if (current_fragment != -1) {
600  int coded = s->superblock_coding[i];
601 
602  if (coded == SB_PARTIALLY_CODED) {
603  /* fragment may or may not be coded; this is the case
604  * that cares about the fragment coding runs */
605  if (current_run-- == 0) {
606  bit ^= 1;
607  current_run = get_vlc2(gb, fragment_run_length_vlc, 5, 2);
608  }
609  coded = bit;
610  }
611 
612  if (coded) {
613  /* default mode; actual mode will be decoded in
614  * the next phase */
615  s->all_fragments[current_fragment].coding_method =
617  s->coded_fragment_list[plane][num_coded_frags++] =
618  current_fragment;
619  } else {
620  /* not coded; copy this fragment from the prior frame */
621  s->all_fragments[current_fragment].coding_method =
622  MODE_COPY;
623  }
624  }
625  }
626  }
627  }
628  if (!plane)
629  plane0_num_coded_frags = num_coded_frags;
630  s->total_num_coded_frags += num_coded_frags;
631  for (int i = 0; i < 64; i++)
632  s->num_coded_frags[plane][i] = num_coded_frags;
633  if (plane < 2)
634  s->coded_fragment_list[plane + 1] = s->coded_fragment_list[plane] +
635  num_coded_frags;
636  }
637  return 0;
638 }
639 
640 #define BLOCK_X (2 * mb_x + (k & 1))
641 #define BLOCK_Y (2 * mb_y + (k >> 1))
642 
643 #if CONFIG_VP4_DECODER
644 /**
645  * @return number of blocks, or > yuv_macroblock_count on error.
646  * return value is always >= 1.
647  */
648 static int vp4_get_mb_count(Vp3DecodeContext *s, GetBitContext *gb)
649 {
650  int v = 1;
651  int bits;
652  while ((bits = show_bits(gb, 9)) == 0x1ff) {
653  skip_bits(gb, 9);
654  v += 256;
655  if (v > s->yuv_macroblock_count) {
656  av_log(s->avctx, AV_LOG_ERROR, "Invalid run length\n");
657  return v;
658  }
659  }
660 #define body(n) { \
661  skip_bits(gb, 2 + n); \
662  v += (1 << n) + get_bits(gb, n); }
663 #define thresh(n) (0x200 - (0x80 >> n))
664 #define else_if(n) else if (bits < thresh(n)) body(n)
665  if (bits < 0x100) {
666  skip_bits(gb, 1);
667  } else if (bits < thresh(0)) {
668  skip_bits(gb, 2);
669  v += 1;
670  }
671  else_if(1)
672  else_if(2)
673  else_if(3)
674  else_if(4)
675  else_if(5)
676  else_if(6)
677  else body(7)
678 #undef body
679 #undef thresh
680 #undef else_if
681  return v;
682 }
683 
684 static int vp4_get_block_pattern(GetBitContext *gb, int *next_block_pattern_table)
685 {
686  int v = get_vlc2(gb, block_pattern_vlc[*next_block_pattern_table], 5, 1);
687  *next_block_pattern_table = vp4_block_pattern_table_selector[v];
688  return v + 1;
689 }
690 
691 static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
692 {
693  int fragment;
694  int next_block_pattern_table;
695  int bit, current_run, has_partial;
696 
697  memset(s->macroblock_coding, MODE_COPY, s->macroblock_count);
698 
699  if (s->keyframe)
700  return 0;
701 
702  has_partial = 0;
703  bit = get_bits1(gb);
704  for (int i = 0; i < s->yuv_macroblock_count; i += current_run) {
705  if (get_bits_left(gb) <= 0)
706  return AVERROR_INVALIDDATA;
707  current_run = vp4_get_mb_count(s, gb);
708  if (current_run > s->yuv_macroblock_count - i)
709  return -1;
710  memset(s->superblock_coding + i, 2 * bit, current_run);
711  bit ^= 1;
712  has_partial |= bit;
713  }
714 
715  if (has_partial) {
716  if (get_bits_left(gb) <= 0)
717  return AVERROR_INVALIDDATA;
718  bit = get_bits1(gb);
719  current_run = vp4_get_mb_count(s, gb);
720  for (int i = 0; i < s->yuv_macroblock_count; i++) {
721  if (!s->superblock_coding[i]) {
722  if (!current_run) {
723  bit ^= 1;
724  current_run = vp4_get_mb_count(s, gb);
725  }
726  s->superblock_coding[i] = bit;
727  current_run--;
728  }
729  }
730  if (current_run) /* handle situation when vp4_get_mb_count() fails */
731  return -1;
732  }
733 
734  next_block_pattern_table = 0;
735  for (int plane = 0, i = 0; plane < 3; plane++) {
736  int sb_width = plane ? s->c_superblock_width : s->y_superblock_width;
737  int sb_height = plane ? s->c_superblock_height : s->y_superblock_height;
738  int mb_width = plane ? s->c_macroblock_width : s->macroblock_width;
739  int mb_height = plane ? s->c_macroblock_height : s->macroblock_height;
740  int fragment_width = s->fragment_width[!!plane];
741  int fragment_height = s->fragment_height[!!plane];
742 
743  for (int sb_y = 0; sb_y < sb_height; sb_y++) {
744  for (int sb_x = 0; sb_x < sb_width; sb_x++) {
745  for (int j = 0; j < 4; j++) {
746  int mb_x = 2 * sb_x + (j >> 1);
747  int mb_y = 2 * sb_y + (j >> 1) ^ (j & 1);
748  int mb_coded, pattern, coded;
749 
750  if (mb_x >= mb_width || mb_y >= mb_height)
751  continue;
752 
753  mb_coded = s->superblock_coding[i++];
754 
755  if (mb_coded == SB_FULLY_CODED)
756  pattern = 0xF;
757  else if (mb_coded == SB_PARTIALLY_CODED)
758  pattern = vp4_get_block_pattern(gb, &next_block_pattern_table);
759  else
760  pattern = 0;
761 
762  for (int k = 0; k < 4; k++) {
763  if (BLOCK_X >= fragment_width || BLOCK_Y >= fragment_height)
764  continue;
765  fragment = s->fragment_start[plane] + BLOCK_Y * fragment_width + BLOCK_X;
766  coded = pattern & (8 >> k);
767  /* MODE_INTER_NO_MV is the default for coded fragments.
768  the actual method is decoded in the next phase. */
769  s->all_fragments[fragment].coding_method = coded ? MODE_INTER_NO_MV : MODE_COPY;
770  }
771  }
772  }
773  }
774  }
775  return 0;
776 }
777 #endif
778 
779 /*
780  * This function unpacks all the coding mode data for individual macroblocks
781  * from the bitstream.
782  */
784 {
785  int scheme;
786  int current_macroblock;
787  int current_fragment;
788  int coding_mode;
789  int custom_mode_alphabet[CODING_MODE_COUNT];
790  const int *alphabet;
791  Vp3Fragment *frag;
792 
793  if (s->keyframe) {
794  for (int i = 0; i < s->fragment_count; i++)
795  s->all_fragments[i].coding_method = MODE_INTRA;
796  } else {
797  /* fetch the mode coding scheme for this frame */
798  scheme = get_bits(gb, 3);
799 
800  /* is it a custom coding scheme? */
801  if (scheme == 0) {
802  for (int i = 0; i < 8; i++)
803  custom_mode_alphabet[i] = MODE_INTER_NO_MV;
804  for (int i = 0; i < 8; i++)
805  custom_mode_alphabet[get_bits(gb, 3)] = i;
806  alphabet = custom_mode_alphabet;
807  } else
808  alphabet = ModeAlphabet[scheme - 1];
809 
810  /* iterate through all of the macroblocks that contain 1 or more
811  * coded fragments */
812  for (int sb_y = 0; sb_y < s->y_superblock_height; sb_y++) {
813  for (int sb_x = 0; sb_x < s->y_superblock_width; sb_x++) {
814  if (get_bits_left(gb) <= 0)
815  return -1;
816 
817  for (int j = 0; j < 4; j++) {
818  int k;
819  int mb_x = 2 * sb_x + (j >> 1);
820  int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
821  current_macroblock = mb_y * s->macroblock_width + mb_x;
822 
823  if (mb_x >= s->macroblock_width ||
824  mb_y >= s->macroblock_height)
825  continue;
826 
827  /* coding modes are only stored if the macroblock has
828  * at least one luma block coded, otherwise it must be
829  * INTER_NO_MV */
830  for (k = 0; k < 4; k++) {
831  current_fragment = BLOCK_Y *
832  s->fragment_width[0] + BLOCK_X;
833  if (s->all_fragments[current_fragment].coding_method != MODE_COPY)
834  break;
835  }
836  if (k == 4) {
837  s->macroblock_coding[current_macroblock] = MODE_INTER_NO_MV;
838  continue;
839  }
840 
841  /* mode 7 means get 3 bits for each coding mode */
842  if (scheme == 7)
843  coding_mode = get_bits(gb, 3);
844  else
845  coding_mode = alphabet[get_vlc2(gb, mode_code_vlc, 4, 2)];
846 
847  s->macroblock_coding[current_macroblock] = coding_mode;
848  for (k = 0; k < 4; k++) {
849  frag = s->all_fragments + BLOCK_Y * s->fragment_width[0] + BLOCK_X;
850  if (frag->coding_method != MODE_COPY)
851  frag->coding_method = coding_mode;
852  }
853 
854 #define SET_CHROMA_MODES \
855  if (frag[s->fragment_start[1]].coding_method != MODE_COPY) \
856  frag[s->fragment_start[1]].coding_method = coding_mode; \
857  if (frag[s->fragment_start[2]].coding_method != MODE_COPY) \
858  frag[s->fragment_start[2]].coding_method = coding_mode;
859 
860  if (s->chroma_y_shift) {
861  frag = s->all_fragments + mb_y *
862  s->fragment_width[1] + mb_x;
864  } else if (s->chroma_x_shift) {
865  frag = s->all_fragments +
866  2 * mb_y * s->fragment_width[1] + mb_x;
867  for (k = 0; k < 2; k++) {
869  frag += s->fragment_width[1];
870  }
871  } else {
872  for (k = 0; k < 4; k++) {
873  frag = s->all_fragments +
874  BLOCK_Y * s->fragment_width[1] + BLOCK_X;
876  }
877  }
878  }
879  }
880  }
881  }
882 
883  return 0;
884 }
885 
886 static int vp4_get_mv(GetBitContext *gb, int axis, int last_motion)
887 {
888 #if CONFIG_VP4_DECODER
889  int v = get_vlc2(gb, vp4_mv_vlc_table[axis][vp4_mv_table_selector[FFABS(last_motion)]],
890  VP4_MV_VLC_BITS, 2);
891  return last_motion < 0 ? -v : v;
892 #else
893  return 0;
894 #endif
895 }
896 
897 /*
898  * This function unpacks all the motion vectors for the individual
899  * macroblocks from the bitstream.
900  */
902 {
903  int coding_mode;
904  int motion_x[4];
905  int motion_y[4];
906  int last_motion_x = 0;
907  int last_motion_y = 0;
908  int prior_last_motion_x = 0;
909  int prior_last_motion_y = 0;
910  int last_gold_motion_x = 0;
911  int last_gold_motion_y = 0;
912  int current_macroblock;
913  int current_fragment;
914  int frag;
915 
916  if (s->keyframe)
917  return 0;
918 
919  /* coding mode 0 is the VLC scheme; 1 is the fixed code scheme; 2 is VP4 code scheme */
920  coding_mode = s->version < 2 ? get_bits1(gb) : 2;
921 
922  /* iterate through all of the macroblocks that contain 1 or more
923  * coded fragments */
924  for (int sb_y = 0; sb_y < s->y_superblock_height; sb_y++) {
925  for (int sb_x = 0; sb_x < s->y_superblock_width; sb_x++) {
926  if (get_bits_left(gb) <= 0)
927  return -1;
928 
929  for (int j = 0; j < 4; j++) {
930  int mb_x = 2 * sb_x + (j >> 1);
931  int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
932  current_macroblock = mb_y * s->macroblock_width + mb_x;
933 
934  if (mb_x >= s->macroblock_width ||
935  mb_y >= s->macroblock_height ||
936  s->macroblock_coding[current_macroblock] == MODE_COPY)
937  continue;
938 
939  switch (s->macroblock_coding[current_macroblock]) {
940  case MODE_GOLDEN_MV:
941  if (coding_mode == 2) { /* VP4 */
942  last_gold_motion_x = motion_x[0] = vp4_get_mv(gb, 0, last_gold_motion_x);
943  last_gold_motion_y = motion_y[0] = vp4_get_mv(gb, 1, last_gold_motion_y);
944  break;
945  }
947  case MODE_INTER_PLUS_MV:
948  /* all 6 fragments use the same motion vector */
949  if (coding_mode == 0) {
950  motion_x[0] = get_vlc2(gb, motion_vector_vlc,
951  VP3_MV_VLC_BITS, 2);
952  motion_y[0] = get_vlc2(gb, motion_vector_vlc,
953  VP3_MV_VLC_BITS, 2);
954  } else if (coding_mode == 1) {
955  motion_x[0] = fixed_motion_vector_table[get_bits(gb, 6)];
956  motion_y[0] = fixed_motion_vector_table[get_bits(gb, 6)];
957  } else { /* VP4 */
958  motion_x[0] = vp4_get_mv(gb, 0, last_motion_x);
959  motion_y[0] = vp4_get_mv(gb, 1, last_motion_y);
960  }
961 
962  /* vector maintenance, only on MODE_INTER_PLUS_MV */
963  if (s->macroblock_coding[current_macroblock] == MODE_INTER_PLUS_MV) {
964  prior_last_motion_x = last_motion_x;
965  prior_last_motion_y = last_motion_y;
966  last_motion_x = motion_x[0];
967  last_motion_y = motion_y[0];
968  }
969  break;
970 
971  case MODE_INTER_FOURMV:
972  /* vector maintenance */
973  prior_last_motion_x = last_motion_x;
974  prior_last_motion_y = last_motion_y;
975 
976  /* fetch 4 vectors from the bitstream, one for each
977  * Y fragment, then average for the C fragment vectors */
978  for (int k = 0; k < 4; k++) {
979  current_fragment = BLOCK_Y * s->fragment_width[0] + BLOCK_X;
980  if (s->all_fragments[current_fragment].coding_method != MODE_COPY) {
981  if (coding_mode == 0) {
982  motion_x[k] = get_vlc2(gb, motion_vector_vlc,
983  VP3_MV_VLC_BITS, 2);
984  motion_y[k] = get_vlc2(gb, motion_vector_vlc,
985  VP3_MV_VLC_BITS, 2);
986  } else if (coding_mode == 1) {
987  motion_x[k] = fixed_motion_vector_table[get_bits(gb, 6)];
988  motion_y[k] = fixed_motion_vector_table[get_bits(gb, 6)];
989  } else { /* VP4 */
990  motion_x[k] = vp4_get_mv(gb, 0, prior_last_motion_x);
991  motion_y[k] = vp4_get_mv(gb, 1, prior_last_motion_y);
992  }
993  last_motion_x = motion_x[k];
994  last_motion_y = motion_y[k];
995  } else {
996  motion_x[k] = 0;
997  motion_y[k] = 0;
998  }
999  }
1000  break;
1001 
1002  case MODE_INTER_LAST_MV:
1003  /* all 6 fragments use the last motion vector */
1004  motion_x[0] = last_motion_x;
1005  motion_y[0] = last_motion_y;
1006 
1007  /* no vector maintenance (last vector remains the
1008  * last vector) */
1009  break;
1010 
1011  case MODE_INTER_PRIOR_LAST:
1012  /* all 6 fragments use the motion vector prior to the
1013  * last motion vector */
1014  motion_x[0] = prior_last_motion_x;
1015  motion_y[0] = prior_last_motion_y;
1016 
1017  /* vector maintenance */
1018  prior_last_motion_x = last_motion_x;
1019  prior_last_motion_y = last_motion_y;
1020  last_motion_x = motion_x[0];
1021  last_motion_y = motion_y[0];
1022  break;
1023 
1024  default:
1025  /* covers intra, inter without MV, golden without MV */
1026  motion_x[0] = 0;
1027  motion_y[0] = 0;
1028 
1029  /* no vector maintenance */
1030  break;
1031  }
1032 
1033  /* assign the motion vectors to the correct fragments */
1034  for (int k = 0; k < 4; k++) {
1035  current_fragment =
1036  BLOCK_Y * s->fragment_width[0] + BLOCK_X;
1037  if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
1038  s->motion_val[0][current_fragment][0] = motion_x[k];
1039  s->motion_val[0][current_fragment][1] = motion_y[k];
1040  } else {
1041  s->motion_val[0][current_fragment][0] = motion_x[0];
1042  s->motion_val[0][current_fragment][1] = motion_y[0];
1043  }
1044  }
1045 
1046  if (s->chroma_y_shift) {
1047  if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
1048  motion_x[0] = RSHIFT(motion_x[0] + motion_x[1] +
1049  motion_x[2] + motion_x[3], 2);
1050  motion_y[0] = RSHIFT(motion_y[0] + motion_y[1] +
1051  motion_y[2] + motion_y[3], 2);
1052  }
1053  if (s->version <= 2) {
1054  motion_x[0] = (motion_x[0] >> 1) | (motion_x[0] & 1);
1055  motion_y[0] = (motion_y[0] >> 1) | (motion_y[0] & 1);
1056  }
1057  frag = mb_y * s->fragment_width[1] + mb_x;
1058  s->motion_val[1][frag][0] = motion_x[0];
1059  s->motion_val[1][frag][1] = motion_y[0];
1060  } else if (s->chroma_x_shift) {
1061  if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
1062  motion_x[0] = RSHIFT(motion_x[0] + motion_x[1], 1);
1063  motion_y[0] = RSHIFT(motion_y[0] + motion_y[1], 1);
1064  motion_x[1] = RSHIFT(motion_x[2] + motion_x[3], 1);
1065  motion_y[1] = RSHIFT(motion_y[2] + motion_y[3], 1);
1066  } else {
1067  motion_x[1] = motion_x[0];
1068  motion_y[1] = motion_y[0];
1069  }
1070  if (s->version <= 2) {
1071  motion_x[0] = (motion_x[0] >> 1) | (motion_x[0] & 1);
1072  motion_x[1] = (motion_x[1] >> 1) | (motion_x[1] & 1);
1073  }
1074  frag = 2 * mb_y * s->fragment_width[1] + mb_x;
1075  for (int k = 0; k < 2; k++) {
1076  s->motion_val[1][frag][0] = motion_x[k];
1077  s->motion_val[1][frag][1] = motion_y[k];
1078  frag += s->fragment_width[1];
1079  }
1080  } else {
1081  for (int k = 0; k < 4; k++) {
1082  frag = BLOCK_Y * s->fragment_width[1] + BLOCK_X;
1083  if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
1084  s->motion_val[1][frag][0] = motion_x[k];
1085  s->motion_val[1][frag][1] = motion_y[k];
1086  } else {
1087  s->motion_val[1][frag][0] = motion_x[0];
1088  s->motion_val[1][frag][1] = motion_y[0];
1089  }
1090  }
1091  }
1092  }
1093  }
1094  }
1095 
1096  return 0;
1097 }
1098 
1100 {
1101  int num_blocks = s->total_num_coded_frags;
1102 
1103  for (int qpi = 0; qpi < s->nqps - 1 && num_blocks > 0; qpi++) {
1104  int i = 0, blocks_decoded = 0, num_blocks_at_qpi = 0;
1105  int bit, run_length;
1106 
1107  bit = get_bits1(gb) ^ 1;
1108  run_length = 0;
1109 
1110  do {
1111  if (run_length == MAXIMUM_LONG_BIT_RUN)
1112  bit = get_bits1(gb);
1113  else
1114  bit ^= 1;
1115 
1116  run_length = get_vlc2(gb, superblock_run_length_vlc,
1117  SUPERBLOCK_VLC_BITS, 2);
1118  if (run_length == 34)
1119  run_length += get_bits(gb, 12);
1120  blocks_decoded += run_length;
1121 
1122  if (!bit)
1123  num_blocks_at_qpi += run_length;
1124 
1125  for (int j = 0; j < run_length; i++) {
1126  if (i >= s->total_num_coded_frags)
1127  return -1;
1128 
1129  if (s->all_fragments[s->coded_fragment_list[0][i]].qpi == qpi) {
1130  s->all_fragments[s->coded_fragment_list[0][i]].qpi += bit;
1131  j++;
1132  }
1133  }
1134  } while (blocks_decoded < num_blocks && get_bits_left(gb) > 0);
1135 
1136  num_blocks -= num_blocks_at_qpi;
1137  }
1138 
1139  return 0;
1140 }
1141 
1142 static inline int get_eob_run(GetBitContext *gb, int token)
1143 {
1144  int v = eob_run_table[token].base;
1145  if (eob_run_table[token].bits)
1146  v += get_bits(gb, eob_run_table[token].bits);
1147  return v;
1148 }
1149 
1150 static inline int get_coeff(GetBitContext *gb, int token, int16_t *coeff)
1151 {
1152  int bits_to_get, zero_run;
1153 
1154  bits_to_get = coeff_get_bits[token];
1155  if (bits_to_get)
1156  bits_to_get = get_bits(gb, bits_to_get);
1157  *coeff = coeff_tables[token][bits_to_get];
1158 
1159  zero_run = zero_run_base[token];
1160  if (zero_run_get_bits[token])
1161  zero_run += get_bits(gb, zero_run_get_bits[token]);
1162 
1163  return zero_run;
1164 }
1165 
1166 /*
1167  * This function is called by unpack_dct_coeffs() to extract the VLCs from
1168  * the bitstream. The VLCs encode tokens which are used to unpack DCT
1169  * data. This function unpacks all the VLCs for either the Y plane or both
1170  * C planes, and is called for DC coefficients or different AC coefficient
1171  * levels (since different coefficient types require different VLC tables.
1172  *
1173  * This function returns a residual eob run. E.g, if a particular token gave
1174  * instructions to EOB the next 5 fragments and there were only 2 fragments
1175  * left in the current fragment range, 3 would be returned so that it could
1176  * be passed into the next call to this same function.
1177  */
1179  const VLCElem *vlc_table, int coeff_index,
1180  int plane,
1181  int eob_run)
1182 {
1183  int j = 0;
1184  int token;
1185  int zero_run = 0;
1186  int16_t coeff = 0;
1187  int blocks_ended;
1188  int coeff_i = 0;
1189  int num_coeffs = s->num_coded_frags[plane][coeff_index];
1190  int16_t *dct_tokens = s->dct_tokens[plane][coeff_index];
1191 
1192  /* local references to structure members to avoid repeated dereferences */
1193  const int *coded_fragment_list = s->coded_fragment_list[plane];
1194  Vp3Fragment *all_fragments = s->all_fragments;
1195 
1196  if (num_coeffs < 0) {
1197  av_log(s->avctx, AV_LOG_ERROR,
1198  "Invalid number of coefficients at level %d\n", coeff_index);
1199  return AVERROR_INVALIDDATA;
1200  }
1201 
1202  if (eob_run > num_coeffs) {
1203  coeff_i =
1204  blocks_ended = num_coeffs;
1205  eob_run -= num_coeffs;
1206  } else {
1207  coeff_i =
1208  blocks_ended = eob_run;
1209  eob_run = 0;
1210  }
1211 
1212  // insert fake EOB token to cover the split between planes or zzi
1213  if (blocks_ended)
1214  dct_tokens[j++] = blocks_ended << 2;
1215 
1216  while (coeff_i < num_coeffs && get_bits_left(gb) > 0) {
1217  /* decode a VLC into a token */
1218  token = get_vlc2(gb, vlc_table, 11, 3);
1219  /* use the token to get a zero run, a coefficient, and an eob run */
1220  if ((unsigned) token <= 6U) {
1221  eob_run = get_eob_run(gb, token);
1222  if (!eob_run)
1223  eob_run = INT_MAX;
1224 
1225  // record only the number of blocks ended in this plane,
1226  // any spill will be recorded in the next plane.
1227  if (eob_run > num_coeffs - coeff_i) {
1228  dct_tokens[j++] = TOKEN_EOB(num_coeffs - coeff_i);
1229  blocks_ended += num_coeffs - coeff_i;
1230  eob_run -= num_coeffs - coeff_i;
1231  coeff_i = num_coeffs;
1232  } else {
1233  dct_tokens[j++] = TOKEN_EOB(eob_run);
1234  blocks_ended += eob_run;
1235  coeff_i += eob_run;
1236  eob_run = 0;
1237  }
1238  } else if (token >= 0) {
1239  zero_run = get_coeff(gb, token, &coeff);
1240 
1241  if (zero_run) {
1242  dct_tokens[j++] = TOKEN_ZERO_RUN(coeff, zero_run);
1243  } else {
1244  // Save DC into the fragment structure. DC prediction is
1245  // done in raster order, so the actual DC can't be in with
1246  // other tokens. We still need the token in dct_tokens[]
1247  // however, or else the structure collapses on itself.
1248  if (!coeff_index)
1249  all_fragments[coded_fragment_list[coeff_i]].dc = coeff;
1250 
1251  dct_tokens[j++] = TOKEN_COEFF(coeff);
1252  }
1253 
1254  if (coeff_index + zero_run > 64) {
1255  av_log(s->avctx, AV_LOG_DEBUG,
1256  "Invalid zero run of %d with %d coeffs left\n",
1257  zero_run, 64 - coeff_index);
1258  zero_run = 64 - coeff_index;
1259  }
1260 
1261  // zero runs code multiple coefficients,
1262  // so don't try to decode coeffs for those higher levels
1263  for (int i = coeff_index + 1; i <= coeff_index + zero_run; i++)
1264  s->num_coded_frags[plane][i]--;
1265  coeff_i++;
1266  } else {
1267  av_log(s->avctx, AV_LOG_ERROR, "Invalid token %d\n", token);
1268  return -1;
1269  }
1270  }
1271 
1272  if (blocks_ended > s->num_coded_frags[plane][coeff_index])
1273  av_log(s->avctx, AV_LOG_ERROR, "More blocks ended than coded!\n");
1274 
1275  // decrement the number of blocks that have higher coefficients for each
1276  // EOB run at this level
1277  if (blocks_ended)
1278  for (int i = coeff_index + 1; i < 64; i++)
1279  s->num_coded_frags[plane][i] -= blocks_ended;
1280 
1281  // setup the next buffer
1282  if (plane < 2)
1283  s->dct_tokens[plane + 1][coeff_index] = dct_tokens + j;
1284  else if (coeff_index < 63)
1285  s->dct_tokens[0][coeff_index + 1] = dct_tokens + j;
1286 
1287  return eob_run;
1288 }
1289 
1291  int first_fragment,
1292  int fragment_width,
1293  int fragment_height);
1294 /*
1295  * This function unpacks all of the DCT coefficient data from the
1296  * bitstream.
1297  */
1299 {
1300  const VLCElem *const *coeff_vlc = s->coeff_vlc->vlc_tabs;
1301  int dc_y_table;
1302  int dc_c_table;
1303  int ac_y_table;
1304  int ac_c_table;
1305  int residual_eob_run = 0;
1306  const VLCElem *y_tables[64], *c_tables[64];
1307 
1308  s->dct_tokens[0][0] = s->dct_tokens_base;
1309 
1310  if (get_bits_left(gb) < 16)
1311  return AVERROR_INVALIDDATA;
1312 
1313  /* fetch the DC table indexes */
1314  dc_y_table = get_bits(gb, 4);
1315  dc_c_table = get_bits(gb, 4);
1316 
1317  /* unpack the Y plane DC coefficients */
1318  residual_eob_run = unpack_vlcs(s, gb, coeff_vlc[dc_y_table], 0,
1319  0, residual_eob_run);
1320  if (residual_eob_run < 0)
1321  return residual_eob_run;
1322  if (get_bits_left(gb) < 8)
1323  return AVERROR_INVALIDDATA;
1324 
1325  /* reverse prediction of the Y-plane DC coefficients */
1326  reverse_dc_prediction(s, 0, s->fragment_width[0], s->fragment_height[0]);
1327 
1328  /* unpack the C plane DC coefficients */
1329  residual_eob_run = unpack_vlcs(s, gb, coeff_vlc[dc_c_table], 0,
1330  1, residual_eob_run);
1331  if (residual_eob_run < 0)
1332  return residual_eob_run;
1333  residual_eob_run = unpack_vlcs(s, gb, coeff_vlc[dc_c_table], 0,
1334  2, residual_eob_run);
1335  if (residual_eob_run < 0)
1336  return residual_eob_run;
1337 
1338  /* reverse prediction of the C-plane DC coefficients */
1339  if (!(s->avctx->flags & AV_CODEC_FLAG_GRAY)) {
1340  reverse_dc_prediction(s, s->fragment_start[1],
1341  s->fragment_width[1], s->fragment_height[1]);
1342  reverse_dc_prediction(s, s->fragment_start[2],
1343  s->fragment_width[1], s->fragment_height[1]);
1344  }
1345 
1346  if (get_bits_left(gb) < 8)
1347  return AVERROR_INVALIDDATA;
1348  /* fetch the AC table indexes */
1349  ac_y_table = get_bits(gb, 4);
1350  ac_c_table = get_bits(gb, 4);
1351 
1352  /* build tables of AC VLC tables */
1353  for (int i = 1; i <= 5; i++) {
1354  /* AC VLC table group 1 */
1355  y_tables[i] = coeff_vlc[ac_y_table + 16];
1356  c_tables[i] = coeff_vlc[ac_c_table + 16];
1357  }
1358  for (int i = 6; i <= 14; i++) {
1359  /* AC VLC table group 2 */
1360  y_tables[i] = coeff_vlc[ac_y_table + 32];
1361  c_tables[i] = coeff_vlc[ac_c_table + 32];
1362  }
1363  for (int i = 15; i <= 27; i++) {
1364  /* AC VLC table group 3 */
1365  y_tables[i] = coeff_vlc[ac_y_table + 48];
1366  c_tables[i] = coeff_vlc[ac_c_table + 48];
1367  }
1368  for (int i = 28; i <= 63; i++) {
1369  /* AC VLC table group 4 */
1370  y_tables[i] = coeff_vlc[ac_y_table + 64];
1371  c_tables[i] = coeff_vlc[ac_c_table + 64];
1372  }
1373 
1374  /* decode all AC coefficients */
1375  for (int i = 1; i <= 63; i++) {
1376  residual_eob_run = unpack_vlcs(s, gb, y_tables[i], i,
1377  0, residual_eob_run);
1378  if (residual_eob_run < 0)
1379  return residual_eob_run;
1380 
1381  residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
1382  1, residual_eob_run);
1383  if (residual_eob_run < 0)
1384  return residual_eob_run;
1385  residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
1386  2, residual_eob_run);
1387  if (residual_eob_run < 0)
1388  return residual_eob_run;
1389  }
1390 
1391  return 0;
1392 }
1393 
1394 #if CONFIG_VP4_DECODER
1395 /**
1396  * eob_tracker[] is instead of TOKEN_EOB(value)
1397  * a dummy TOKEN_EOB(0) value is used to make vp3_dequant work
1398  *
1399  * @return < 0 on error
1400  */
1401 static int vp4_unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
1402  const VLCElem *const vlc_tables[64],
1403  int plane, int eob_tracker[64], int fragment)
1404 {
1405  int token;
1406  int zero_run = 0;
1407  int16_t coeff = 0;
1408  int coeff_i = 0;
1409  int eob_run;
1410 
1411  while (!eob_tracker[coeff_i]) {
1412  if (get_bits_left(gb) < 1)
1413  return AVERROR_INVALIDDATA;
1414 
1415  token = get_vlc2(gb, vlc_tables[coeff_i], 11, 3);
1416 
1417  /* use the token to get a zero run, a coefficient, and an eob run */
1418  if ((unsigned) token <= 6U) {
1419  eob_run = get_eob_run(gb, token);
1420  *s->dct_tokens[plane][coeff_i]++ = TOKEN_EOB(0);
1421  eob_tracker[coeff_i] = eob_run - 1;
1422  return 0;
1423  } else if (token >= 0) {
1424  zero_run = get_coeff(gb, token, &coeff);
1425 
1426  if (zero_run) {
1427  if (coeff_i + zero_run > 64) {
1428  av_log(s->avctx, AV_LOG_DEBUG,
1429  "Invalid zero run of %d with %d coeffs left\n",
1430  zero_run, 64 - coeff_i);
1431  zero_run = 64 - coeff_i;
1432  }
1433  *s->dct_tokens[plane][coeff_i]++ = TOKEN_ZERO_RUN(coeff, zero_run);
1434  coeff_i += zero_run;
1435  } else {
1436  if (!coeff_i)
1437  s->all_fragments[fragment].dc = coeff;
1438 
1439  *s->dct_tokens[plane][coeff_i]++ = TOKEN_COEFF(coeff);
1440  }
1441  coeff_i++;
1442  if (coeff_i >= 64) /* > 64 occurs when there is a zero_run overflow */
1443  return 0; /* stop */
1444  } else {
1445  av_log(s->avctx, AV_LOG_ERROR, "Invalid token %d\n", token);
1446  return -1;
1447  }
1448  }
1449  *s->dct_tokens[plane][coeff_i]++ = TOKEN_EOB(0);
1450  eob_tracker[coeff_i]--;
1451  return 0;
1452 }
1453 
1454 static void vp4_dc_predictor_reset(VP4Predictor *p)
1455 {
1456  p->dc = 0;
1457  p->type = VP4_DC_UNDEFINED;
1458 }
1459 
1460 static void vp4_dc_pred_before(const Vp3DecodeContext *s, VP4Predictor dc_pred[6][6], int sb_x)
1461 {
1462  for (int i = 0; i < 4; i++)
1463  dc_pred[0][i + 1] = s->dc_pred_row[sb_x * 4 + i];
1464 
1465  for (int j = 1; j < 5; j++)
1466  for (int i = 0; i < 4; i++)
1467  vp4_dc_predictor_reset(&dc_pred[j][i + 1]);
1468 }
1469 
1470 static void vp4_dc_pred_after(Vp3DecodeContext *s, VP4Predictor dc_pred[6][6], int sb_x)
1471 {
1472  for (int i = 0; i < 4; i++)
1473  s->dc_pred_row[sb_x * 4 + i] = dc_pred[4][i + 1];
1474 
1475  for (int i = 1; i < 5; i++)
1476  dc_pred[i][0] = dc_pred[i][4];
1477 }
1478 
1479 /* note: dc_pred points to the current block */
1480 static int vp4_dc_pred(const Vp3DecodeContext *s, const VP4Predictor * dc_pred, const int * last_dc, int type, int plane)
1481 {
1482  int count = 0;
1483  int dc = 0;
1484 
1485  if (dc_pred[-6].type == type) {
1486  dc += dc_pred[-6].dc;
1487  count++;
1488  }
1489 
1490  if (dc_pred[6].type == type) {
1491  dc += dc_pred[6].dc;
1492  count++;
1493  }
1494 
1495  if (count != 2 && dc_pred[-1].type == type) {
1496  dc += dc_pred[-1].dc;
1497  count++;
1498  }
1499 
1500  if (count != 2 && dc_pred[1].type == type) {
1501  dc += dc_pred[1].dc;
1502  count++;
1503  }
1504 
1505  /* using division instead of shift to correctly handle negative values */
1506  return count == 2 ? dc / 2 : last_dc[type];
1507 }
1508 
1509 static void vp4_set_tokens_base(Vp3DecodeContext *s)
1510 {
1511  int16_t *base = s->dct_tokens_base;
1512  for (int plane = 0; plane < 3; plane++) {
1513  for (int i = 0; i < 64; i++) {
1514  s->dct_tokens[plane][i] = base;
1515  base += s->fragment_width[!!plane] * s->fragment_height[!!plane];
1516  }
1517  }
1518 }
1519 
1520 static int vp4_unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
1521 {
1522  const VLCElem *const *coeff_vlc = s->coeff_vlc->vlc_tabs;
1523  int dc_y_table;
1524  int dc_c_table;
1525  int ac_y_table;
1526  int ac_c_table;
1527  const VLCElem *tables[2][64];
1528  int eob_tracker[64];
1529  VP4Predictor dc_pred[6][6];
1530  int last_dc[NB_VP4_DC_TYPES];
1531 
1532  if (get_bits_left(gb) < 16)
1533  return AVERROR_INVALIDDATA;
1534 
1535  /* fetch the DC table indexes */
1536  dc_y_table = get_bits(gb, 4);
1537  dc_c_table = get_bits(gb, 4);
1538 
1539  ac_y_table = get_bits(gb, 4);
1540  ac_c_table = get_bits(gb, 4);
1541 
1542  /* build tables of DC/AC VLC tables */
1543 
1544  /* DC table group */
1545  tables[0][0] = coeff_vlc[dc_y_table];
1546  tables[1][0] = coeff_vlc[dc_c_table];
1547  for (int i = 1; i <= 5; i++) {
1548  /* AC VLC table group 1 */
1549  tables[0][i] = coeff_vlc[ac_y_table + 16];
1550  tables[1][i] = coeff_vlc[ac_c_table + 16];
1551  }
1552  for (int i = 6; i <= 14; i++) {
1553  /* AC VLC table group 2 */
1554  tables[0][i] = coeff_vlc[ac_y_table + 32];
1555  tables[1][i] = coeff_vlc[ac_c_table + 32];
1556  }
1557  for (int i = 15; i <= 27; i++) {
1558  /* AC VLC table group 3 */
1559  tables[0][i] = coeff_vlc[ac_y_table + 48];
1560  tables[1][i] = coeff_vlc[ac_c_table + 48];
1561  }
1562  for (int i = 28; i <= 63; i++) {
1563  /* AC VLC table group 4 */
1564  tables[0][i] = coeff_vlc[ac_y_table + 64];
1565  tables[1][i] = coeff_vlc[ac_c_table + 64];
1566  }
1567 
1568  vp4_set_tokens_base(s);
1569 
1570  memset(last_dc, 0, sizeof(last_dc));
1571 
1572  for (int plane = 0; plane < ((s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 1 : 3); plane++) {
1573  memset(eob_tracker, 0, sizeof(eob_tracker));
1574 
1575  /* initialise dc prediction */
1576  for (int i = 0; i < s->fragment_width[!!plane]; i++)
1577  vp4_dc_predictor_reset(&s->dc_pred_row[i]);
1578 
1579  for (int j = 0; j < 6; j++)
1580  for (int i = 0; i < 6; i++)
1581  vp4_dc_predictor_reset(&dc_pred[j][i]);
1582 
1583  for (int sb_y = 0; sb_y * 4 < s->fragment_height[!!plane]; sb_y++) {
1584  for (int sb_x = 0; sb_x *4 < s->fragment_width[!!plane]; sb_x++) {
1585  vp4_dc_pred_before(s, dc_pred, sb_x);
1586  for (int j = 0; j < 16; j++) {
1587  int hx = hilbert_offset[j][0];
1588  int hy = hilbert_offset[j][1];
1589  int x = 4 * sb_x + hx;
1590  int y = 4 * sb_y + hy;
1591  VP4Predictor *this_dc_pred = &dc_pred[hy + 1][hx + 1];
1592  int fragment, dc_block_type;
1593 
1594  if (x >= s->fragment_width[!!plane] || y >= s->fragment_height[!!plane])
1595  continue;
1596 
1597  fragment = s->fragment_start[plane] + y * s->fragment_width[!!plane] + x;
1598 
1599  if (s->all_fragments[fragment].coding_method == MODE_COPY)
1600  continue;
1601 
1602  if (vp4_unpack_vlcs(s, gb, tables[!!plane], plane, eob_tracker, fragment) < 0)
1603  return -1;
1604 
1605  dc_block_type = vp4_pred_block_type_map[s->all_fragments[fragment].coding_method];
1606 
1607  s->all_fragments[fragment].dc +=
1608  vp4_dc_pred(s, this_dc_pred, last_dc, dc_block_type, plane);
1609 
1610  this_dc_pred->type = dc_block_type,
1611  this_dc_pred->dc = last_dc[dc_block_type] = s->all_fragments[fragment].dc;
1612  }
1613  vp4_dc_pred_after(s, dc_pred, sb_x);
1614  }
1615  }
1616  }
1617 
1618  vp4_set_tokens_base(s);
1619 
1620  return 0;
1621 }
1622 #endif
1623 
1624 /*
1625  * This function reverses the DC prediction for each coded fragment in
1626  * the frame. Much of this function is adapted directly from the original
1627  * VP3 source code.
1628  */
1629 #define COMPATIBLE_FRAME(x) \
1630  (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
1631 #define DC_COEFF(u) s->all_fragments[u].dc
1632 
1634  int first_fragment,
1635  int fragment_width,
1636  int fragment_height)
1637 {
1638 #define PUL 8
1639 #define PU 4
1640 #define PUR 2
1641 #define PL 1
1642 
1643  int i = first_fragment;
1644 
1645  int predicted_dc;
1646 
1647  /* DC values for the left, up-left, up, and up-right fragments */
1648  int vl, vul, vu, vur;
1649 
1650  /* indexes for the left, up-left, up, and up-right fragments */
1651  int l, ul, u, ur;
1652 
1653  /*
1654  * The 6 fields mean:
1655  * 0: up-left multiplier
1656  * 1: up multiplier
1657  * 2: up-right multiplier
1658  * 3: left multiplier
1659  */
1660  static const int predictor_transform[16][4] = {
1661  { 0, 0, 0, 0 },
1662  { 0, 0, 0, 128 }, // PL
1663  { 0, 0, 128, 0 }, // PUR
1664  { 0, 0, 53, 75 }, // PUR|PL
1665  { 0, 128, 0, 0 }, // PU
1666  { 0, 64, 0, 64 }, // PU |PL
1667  { 0, 128, 0, 0 }, // PU |PUR
1668  { 0, 0, 53, 75 }, // PU |PUR|PL
1669  { 128, 0, 0, 0 }, // PUL
1670  { 0, 0, 0, 128 }, // PUL|PL
1671  { 64, 0, 64, 0 }, // PUL|PUR
1672  { 0, 0, 53, 75 }, // PUL|PUR|PL
1673  { 0, 128, 0, 0 }, // PUL|PU
1674  { -104, 116, 0, 116 }, // PUL|PU |PL
1675  { 24, 80, 24, 0 }, // PUL|PU |PUR
1676  { -104, 116, 0, 116 } // PUL|PU |PUR|PL
1677  };
1678 
1679  /* This table shows which types of blocks can use other blocks for
1680  * prediction. For example, INTRA is the only mode in this table to
1681  * have a frame number of 0. That means INTRA blocks can only predict
1682  * from other INTRA blocks. There are 2 golden frame coding types;
1683  * blocks encoding in these modes can only predict from other blocks
1684  * that were encoded with these 1 of these 2 modes. */
1685  static const unsigned char compatible_frame[9] = {
1686  1, /* MODE_INTER_NO_MV */
1687  0, /* MODE_INTRA */
1688  1, /* MODE_INTER_PLUS_MV */
1689  1, /* MODE_INTER_LAST_MV */
1690  1, /* MODE_INTER_PRIOR_MV */
1691  2, /* MODE_USING_GOLDEN */
1692  2, /* MODE_GOLDEN_MV */
1693  1, /* MODE_INTER_FOUR_MV */
1694  3 /* MODE_COPY */
1695  };
1696  int current_frame_type;
1697 
1698  /* there is a last DC predictor for each of the 3 frame types */
1699  short last_dc[3];
1700 
1701  int transform = 0;
1702 
1703  vul =
1704  vu =
1705  vur =
1706  vl = 0;
1707  last_dc[0] =
1708  last_dc[1] =
1709  last_dc[2] = 0;
1710 
1711  /* for each fragment row... */
1712  for (int y = 0; y < fragment_height; y++) {
1713  /* for each fragment in a row... */
1714  for (int x = 0; x < fragment_width; x++, i++) {
1715 
1716  /* reverse prediction if this block was coded */
1717  if (s->all_fragments[i].coding_method != MODE_COPY) {
1718  current_frame_type =
1719  compatible_frame[s->all_fragments[i].coding_method];
1720 
1721  transform = 0;
1722  if (x) {
1723  l = i - 1;
1724  vl = DC_COEFF(l);
1725  if (COMPATIBLE_FRAME(l))
1726  transform |= PL;
1727  }
1728  if (y) {
1729  u = i - fragment_width;
1730  vu = DC_COEFF(u);
1731  if (COMPATIBLE_FRAME(u))
1732  transform |= PU;
1733  if (x) {
1734  ul = i - fragment_width - 1;
1735  vul = DC_COEFF(ul);
1736  if (COMPATIBLE_FRAME(ul))
1737  transform |= PUL;
1738  }
1739  if (x + 1 < fragment_width) {
1740  ur = i - fragment_width + 1;
1741  vur = DC_COEFF(ur);
1742  if (COMPATIBLE_FRAME(ur))
1743  transform |= PUR;
1744  }
1745  }
1746 
1747  if (transform == 0) {
1748  /* if there were no fragments to predict from, use last
1749  * DC saved */
1750  predicted_dc = last_dc[current_frame_type];
1751  } else {
1752  /* apply the appropriate predictor transform */
1753  predicted_dc =
1754  (predictor_transform[transform][0] * vul) +
1755  (predictor_transform[transform][1] * vu) +
1756  (predictor_transform[transform][2] * vur) +
1757  (predictor_transform[transform][3] * vl);
1758 
1759  predicted_dc /= 128;
1760 
1761  /* check for outranging on the [ul u l] and
1762  * [ul u ur l] predictors */
1763  if ((transform == 15) || (transform == 13)) {
1764  if (FFABS(predicted_dc - vu) > 128)
1765  predicted_dc = vu;
1766  else if (FFABS(predicted_dc - vl) > 128)
1767  predicted_dc = vl;
1768  else if (FFABS(predicted_dc - vul) > 128)
1769  predicted_dc = vul;
1770  }
1771  }
1772 
1773  /* at long last, apply the predictor */
1774  DC_COEFF(i) += predicted_dc;
1775  /* save the DC */
1776  last_dc[current_frame_type] = DC_COEFF(i);
1777  }
1778  }
1779  }
1780 }
1781 
1782 static void apply_loop_filter(Vp3DecodeContext *s, int plane,
1783  int ystart, int yend)
1784 {
1785  int *bounding_values = s->bounding_values_array + 127;
1786 
1787  int width = s->fragment_width[!!plane];
1788  int height = s->fragment_height[!!plane];
1789  int fragment = s->fragment_start[plane] + ystart * width;
1790  ptrdiff_t stride = s->current_frame.f->linesize[plane];
1791  uint8_t *plane_data = s->current_frame.f->data[plane];
1792  if (!s->flipped_image)
1793  stride = -stride;
1794  plane_data += s->data_offset[plane] + 8 * ystart * stride;
1795 
1796  for (int y = ystart; y < yend; y++) {
1797  for (int x = 0; x < width; x++) {
1798  /* This code basically just deblocks on the edges of coded blocks.
1799  * However, it has to be much more complicated because of the
1800  * brain damaged deblock ordering used in VP3/Theora. Order matters
1801  * because some pixels get filtered twice. */
1802  if (s->all_fragments[fragment].coding_method != MODE_COPY) {
1803  /* do not perform left edge filter for left columns frags */
1804  if (x > 0) {
1805  s->vp3dsp.h_loop_filter(
1806  plane_data + 8 * x,
1807  stride, bounding_values);
1808  }
1809 
1810  /* do not perform top edge filter for top row fragments */
1811  if (y > 0) {
1812  s->vp3dsp.v_loop_filter(
1813  plane_data + 8 * x,
1814  stride, bounding_values);
1815  }
1816 
1817  /* do not perform right edge filter for right column
1818  * fragments or if right fragment neighbor is also coded
1819  * in this frame (it will be filtered in next iteration) */
1820  if ((x < width - 1) &&
1821  (s->all_fragments[fragment + 1].coding_method == MODE_COPY)) {
1822  s->vp3dsp.h_loop_filter(
1823  plane_data + 8 * x + 8,
1824  stride, bounding_values);
1825  }
1826 
1827  /* do not perform bottom edge filter for bottom row
1828  * fragments or if bottom fragment neighbor is also coded
1829  * in this frame (it will be filtered in the next row) */
1830  if ((y < height - 1) &&
1831  (s->all_fragments[fragment + width].coding_method == MODE_COPY)) {
1832  s->vp3dsp.v_loop_filter(
1833  plane_data + 8 * x + 8 * stride,
1834  stride, bounding_values);
1835  }
1836  }
1837 
1838  fragment++;
1839  }
1840  plane_data += 8 * stride;
1841  }
1842 }
1843 
1844 /**
1845  * Pull DCT tokens from the 64 levels to decode and dequant the coefficients
1846  * for the next block in coding order
1847  */
1848 static inline int vp3_dequant(Vp3DecodeContext *s, const Vp3Fragment *frag,
1849  int plane, int inter, int16_t block[64])
1850 {
1851  const int16_t *dequantizer = s->qmat[frag->qpi][inter][plane];
1852  const uint8_t *perm = s->idct_scantable;
1853  int i = 0;
1854 
1855  do {
1856  int token = *s->dct_tokens[plane][i];
1857  switch (token & 3) {
1858  case 0: // EOB
1859  if (--token < 4) // 0-3 are token types so the EOB run must now be 0
1860  s->dct_tokens[plane][i]++;
1861  else
1862  *s->dct_tokens[plane][i] = token & ~3;
1863  goto end;
1864  case 1: // zero run
1865  s->dct_tokens[plane][i]++;
1866  i += (token >> 2) & 0x7f;
1867  if (i > 63) {
1868  av_log(s->avctx, AV_LOG_ERROR, "Coefficient index overflow\n");
1869  return i;
1870  }
1871  block[perm[i]] = (token >> 9) * dequantizer[perm[i]];
1872  i++;
1873  break;
1874  case 2: // coeff
1875  block[perm[i]] = (token >> 2) * dequantizer[perm[i]];
1876  s->dct_tokens[plane][i++]++;
1877  break;
1878  default: // shouldn't happen
1879  return i;
1880  }
1881  } while (i < 64);
1882  // return value is expected to be a valid level
1883  i--;
1884 end:
1885  // the actual DC+prediction is in the fragment structure
1886  block[0] = frag->dc * s->qmat[0][inter][plane][0];
1887  return i;
1888 }
1889 
1890 /**
1891  * called when all pixels up to row y are complete
1892  */
1894 {
1895  int h, cy;
1897 
1898  if (HAVE_THREADS && s->avctx->active_thread_type & FF_THREAD_FRAME) {
1899  int y_flipped = s->flipped_image ? s->height - y : y;
1900 
1901  /* At the end of the frame, report INT_MAX instead of the height of
1902  * the frame. This makes the other threads' ff_thread_await_progress()
1903  * calls cheaper, because they don't have to clip their values. */
1904  ff_progress_frame_report(&s->current_frame,
1905  y_flipped == s->height ? INT_MAX
1906  : y_flipped - 1);
1907  }
1908 
1909  if (!s->avctx->draw_horiz_band)
1910  return;
1911 
1912  h = y - s->last_slice_end;
1913  s->last_slice_end = y;
1914  y -= h;
1915 
1916  if (!s->flipped_image)
1917  y = s->height - y - h;
1918 
1919  cy = y >> s->chroma_y_shift;
1920  offset[0] = s->current_frame.f->linesize[0] * y;
1921  offset[1] = s->current_frame.f->linesize[1] * cy;
1922  offset[2] = s->current_frame.f->linesize[2] * cy;
1923  for (int i = 3; i < AV_NUM_DATA_POINTERS; i++)
1924  offset[i] = 0;
1925 
1926  s->avctx->draw_horiz_band(s->avctx, s->current_frame.f, offset, y, 3, h);
1927 }
1928 
1929 /**
1930  * Wait for the reference frame of the current fragment.
1931  * The progress value is in luma pixel rows.
1932  */
1934  int motion_y, int y)
1935 {
1936  const ProgressFrame *ref_frame;
1937  int ref_row;
1938  int border = motion_y & 1;
1939 
1940  if (fragment->coding_method == MODE_USING_GOLDEN ||
1941  fragment->coding_method == MODE_GOLDEN_MV)
1942  ref_frame = &s->golden_frame;
1943  else
1944  ref_frame = &s->last_frame;
1945 
1946  ref_row = y + (motion_y >> 1);
1947  ref_row = FFMAX(FFABS(ref_row), ref_row + 8 + border);
1948 
1950 }
1951 
1952 #if CONFIG_VP4_DECODER
1953 /**
1954  * @return non-zero if temp (edge_emu_buffer) was populated
1955  */
1956 static int vp4_mc_loop_filter(Vp3DecodeContext *s, int plane, int motion_x, int motion_y, int bx, int by,
1957  const uint8_t *motion_source, ptrdiff_t stride,
1958  int src_x, int src_y, uint8_t *temp)
1959 {
1960  int motion_shift = plane ? 4 : 2;
1961  int subpel_mask = plane ? 3 : 1;
1962  int *bounding_values = s->bounding_values_array + 127;
1963 
1964  int x, y;
1965  int x2, y2;
1966  int x_subpel, y_subpel;
1967  int x_offset, y_offset;
1968 
1969  int block_width = plane ? 8 : 16;
1970  int plane_width = s->width >> (plane && s->chroma_x_shift);
1971  int plane_height = s->height >> (plane && s->chroma_y_shift);
1972 
1973 #define loop_stride 12
1974  uint8_t loop[12 * loop_stride];
1975 
1976  /* using division instead of shift to correctly handle negative values */
1977  x = 8 * bx + motion_x / motion_shift;
1978  y = 8 * by + motion_y / motion_shift;
1979 
1980  x_subpel = motion_x & subpel_mask;
1981  y_subpel = motion_y & subpel_mask;
1982 
1983  if (x_subpel || y_subpel) {
1984  x--;
1985  y--;
1986 
1987  if (x_subpel)
1988  x = FFMIN(x, x + FFSIGN(motion_x));
1989 
1990  if (y_subpel)
1991  y = FFMIN(y, y + FFSIGN(motion_y));
1992 
1993  x2 = x + block_width;
1994  y2 = y + block_width;
1995 
1996  if (x2 < 0 || x2 >= plane_width || y2 < 0 || y2 >= plane_height)
1997  return 0;
1998 
1999  x_offset = (-(x + 2) & 7) + 2;
2000  y_offset = (-(y + 2) & 7) + 2;
2001 
2002  av_assert1(!(x_offset > 8 + x_subpel && y_offset > 8 + y_subpel));
2003 
2004  s->vdsp.emulated_edge_mc(loop, motion_source - stride - 1,
2005  loop_stride, stride,
2006  12, 12, src_x - 1, src_y - 1,
2007  plane_width,
2008  plane_height);
2009 
2010  if (x_offset <= 8 + x_subpel)
2011  ff_vp3dsp_h_loop_filter_12(loop + x_offset, loop_stride, bounding_values);
2012 
2013  if (y_offset <= 8 + y_subpel)
2014  ff_vp3dsp_v_loop_filter_12(loop + y_offset*loop_stride, loop_stride, bounding_values);
2015 
2016  } else {
2017 
2018  x_offset = -x & 7;
2019  y_offset = -y & 7;
2020 
2021  if (!x_offset && !y_offset)
2022  return 0;
2023 
2024  s->vdsp.emulated_edge_mc(loop, motion_source - stride - 1,
2025  loop_stride, stride,
2026  12, 12, src_x - 1, src_y - 1,
2027  plane_width,
2028  plane_height);
2029 
2030 #define safe_loop_filter(name, ptr, stride, bounding_values) \
2031  if (VP3_LOOP_FILTER_NO_UNALIGNED_SUPPORT && (uintptr_t)(ptr) & 7) \
2032  s->vp3dsp.name##_unaligned(ptr, stride, bounding_values); \
2033  else \
2034  s->vp3dsp.name(ptr, stride, bounding_values);
2035 
2036  if (x_offset)
2037  safe_loop_filter(h_loop_filter, loop + loop_stride + x_offset + 1, loop_stride, bounding_values);
2038 
2039  if (y_offset)
2040  safe_loop_filter(v_loop_filter, loop + (y_offset + 1)*loop_stride + 1, loop_stride, bounding_values);
2041  }
2042 
2043  for (int i = 0; i < 9; i++)
2044  memcpy(temp + i*stride, loop + (i + 1) * loop_stride + 1, 9);
2045 
2046  return 1;
2047 }
2048 #endif
2049 
2050 /*
2051  * Perform the final rendering for a particular slice of data.
2052  * The slice number ranges from 0..(c_superblock_height - 1).
2053  */
2054 static void render_slice(Vp3DecodeContext *s, int slice)
2055 {
2056  int16_t *block = s->block;
2057  int motion_x = 0xdeadbeef, motion_y = 0xdeadbeef;
2058  /* When decoding keyframes, the earlier frames may not be available,
2059  * so we just use the current frame in this case instead;
2060  * it also avoid using undefined pointer arithmetic. Nothing is
2061  * ever read from these frames in case of a keyframe. */
2062  const AVFrame *last_frame = s->last_frame.f ?
2063  s->last_frame.f : s->current_frame.f;
2064  const AVFrame *golden_frame = s->golden_frame.f ?
2065  s->golden_frame.f : s->current_frame.f;
2066  int motion_halfpel_index;
2067  int first_pixel;
2068 
2069  if (slice >= s->c_superblock_height)
2070  return;
2071 
2072  for (int plane = 0; plane < 3; plane++) {
2073  uint8_t *output_plane = s->current_frame.f->data[plane] +
2074  s->data_offset[plane];
2075  const uint8_t *last_plane = last_frame->data[plane] +
2076  s->data_offset[plane];
2077  const uint8_t *golden_plane = golden_frame->data[plane] +
2078  s->data_offset[plane];
2079  ptrdiff_t stride = s->current_frame.f->linesize[plane];
2080  int plane_width = s->width >> (plane && s->chroma_x_shift);
2081  int plane_height = s->height >> (plane && s->chroma_y_shift);
2082  const int8_t (*motion_val)[2] = s->motion_val[!!plane];
2083 
2084  int sb_y = slice << (!plane && s->chroma_y_shift);
2085  int slice_height = sb_y + 1 + (!plane && s->chroma_y_shift);
2086  int slice_width = plane ? s->c_superblock_width
2087  : s->y_superblock_width;
2088 
2089  int fragment_width = s->fragment_width[!!plane];
2090  int fragment_height = s->fragment_height[!!plane];
2091  int fragment_start = s->fragment_start[plane];
2092 
2093  int do_await = !plane && HAVE_THREADS &&
2094  (s->avctx->active_thread_type & FF_THREAD_FRAME);
2095 
2096  if (!s->flipped_image)
2097  stride = -stride;
2098  if (CONFIG_GRAY && plane && (s->avctx->flags & AV_CODEC_FLAG_GRAY))
2099  continue;
2100 
2101  /* for each superblock row in the slice (both of them)... */
2102  for (; sb_y < slice_height; sb_y++) {
2103  /* for each superblock in a row... */
2104  for (int sb_x = 0; sb_x < slice_width; sb_x++) {
2105  /* for each block in a superblock... */
2106  for (int j = 0; j < 16; j++) {
2107  int x = 4 * sb_x + hilbert_offset[j][0];
2108  int y = 4 * sb_y + hilbert_offset[j][1];
2109  int fragment = y * fragment_width + x;
2110 
2111  int i = fragment_start + fragment;
2112 
2113  // bounds check
2114  if (x >= fragment_width || y >= fragment_height)
2115  continue;
2116 
2117  first_pixel = 8 * y * stride + 8 * x;
2118 
2119  if (do_await &&
2120  s->all_fragments[i].coding_method != MODE_INTRA)
2121  await_reference_row(s, &s->all_fragments[i],
2122  motion_val[fragment][1],
2123  (16 * y) >> s->chroma_y_shift);
2124 
2125  /* transform if this block was coded */
2126  if (s->all_fragments[i].coding_method != MODE_COPY) {
2127  const uint8_t *motion_source;
2128  if ((s->all_fragments[i].coding_method == MODE_USING_GOLDEN) ||
2129  (s->all_fragments[i].coding_method == MODE_GOLDEN_MV))
2130  motion_source = golden_plane;
2131  else
2132  motion_source = last_plane;
2133 
2134  motion_source += first_pixel;
2135  motion_halfpel_index = 0;
2136 
2137  /* sort out the motion vector if this fragment is coded
2138  * using a motion vector method */
2139  if ((s->all_fragments[i].coding_method > MODE_INTRA) &&
2140  (s->all_fragments[i].coding_method != MODE_USING_GOLDEN)) {
2141  int src_x, src_y;
2142  int standard_mc = 1;
2143  motion_x = motion_val[fragment][0];
2144  motion_y = motion_val[fragment][1];
2145 #if CONFIG_VP4_DECODER
2146  if (plane && s->version >= 2) {
2147  motion_x = (motion_x >> 1) | (motion_x & 1);
2148  motion_y = (motion_y >> 1) | (motion_y & 1);
2149  }
2150 #endif
2151 
2152  src_x = (motion_x >> 1) + 8 * x;
2153  src_y = (motion_y >> 1) + 8 * y;
2154 
2155  motion_halfpel_index = motion_x & 0x01;
2156  motion_source += (motion_x >> 1);
2157 
2158  motion_halfpel_index |= (motion_y & 0x01) << 1;
2159  motion_source += ((motion_y >> 1) * stride);
2160 
2161 #if CONFIG_VP4_DECODER
2162  if (s->version >= 2) {
2163  uint8_t *temp = s->edge_emu_buffer;
2164  if (stride < 0)
2165  temp -= 8 * stride;
2166  if (vp4_mc_loop_filter(s, plane, motion_val[fragment][0], motion_val[fragment][1], x, y, motion_source, stride, src_x, src_y, temp)) {
2167  motion_source = temp;
2168  standard_mc = 0;
2169  }
2170  }
2171 #endif
2172 
2173  if (standard_mc && (
2174  src_x < 0 || src_y < 0 ||
2175  src_x + 9 >= plane_width ||
2176  src_y + 9 >= plane_height)) {
2177  uint8_t *temp = s->edge_emu_buffer;
2178  if (stride < 0)
2179  temp -= 8 * stride;
2180 
2181  s->vdsp.emulated_edge_mc(temp, motion_source,
2182  stride, stride,
2183  9, 9, src_x, src_y,
2184  plane_width,
2185  plane_height);
2186  motion_source = temp;
2187  }
2188  }
2189 
2190  /* first, take care of copying a block from either the
2191  * previous or the golden frame */
2192  if (s->all_fragments[i].coding_method != MODE_INTRA) {
2193  /* Note, it is possible to implement all MC cases
2194  * with put_no_rnd_pixels_l2 which would look more
2195  * like the VP3 source but this would be slower as
2196  * put_no_rnd_pixels_tab is better optimized */
2197  if (motion_halfpel_index != 3) {
2198  s->hdsp.put_no_rnd_pixels_tab[1][motion_halfpel_index](
2199  output_plane + first_pixel,
2200  motion_source, stride, 8);
2201  } else {
2202  /* d is 0 if motion_x and _y have the same sign,
2203  * else -1 */
2204  int d = (motion_x ^ motion_y) >> 31;
2205  s->vp3dsp.put_no_rnd_pixels_l2(output_plane + first_pixel,
2206  motion_source - d,
2207  motion_source + stride + 1 + d,
2208  stride, 8);
2209  }
2210  }
2211 
2212  /* invert DCT and place (or add) in final output */
2213 
2214  if (s->all_fragments[i].coding_method == MODE_INTRA) {
2215  vp3_dequant(s, s->all_fragments + i,
2216  plane, 0, block);
2217  s->vp3dsp.idct_put(output_plane + first_pixel,
2218  stride,
2219  block);
2220  } else {
2221  if (vp3_dequant(s, s->all_fragments + i,
2222  plane, 1, block)) {
2223  s->vp3dsp.idct_add(output_plane + first_pixel,
2224  stride,
2225  block);
2226  } else {
2227  s->vp3dsp.idct_dc_add(output_plane + first_pixel,
2228  stride, block);
2229  }
2230  }
2231  } else {
2232  /* copy directly from the previous frame */
2233  s->hdsp.put_pixels_tab[1][0](
2234  output_plane + first_pixel,
2235  last_plane + first_pixel,
2236  stride, 8);
2237  }
2238  }
2239  }
2240 
2241  // Filter up to the last row in the superblock row
2242  if (s->version < 2 && !s->skip_loop_filter)
2243  apply_loop_filter(s, plane, 4 * sb_y - !!sb_y,
2244  FFMIN(4 * sb_y + 3, fragment_height - 1));
2245  }
2246  }
2247 
2248  /* this looks like a good place for slice dispatch... */
2249  /* algorithm:
2250  * if (slice == s->macroblock_height - 1)
2251  * dispatch (both last slice & 2nd-to-last slice);
2252  * else if (slice > 0)
2253  * dispatch (slice - 1);
2254  */
2255 
2256  vp3_draw_horiz_band(s, FFMIN((32 << s->chroma_y_shift) * (slice + 1) - 16,
2257  s->height - 16));
2258 }
2259 
2260 static av_cold void init_tables_once(void)
2261 {
2263 
2265  SUPERBLOCK_VLC_BITS, 34,
2267  NULL, 0, 0, 1, 0);
2268 
2271  NULL, 0, 0, 0, 0);
2272 
2274  &motion_vector_vlc_table[0][1], 2,
2275  &motion_vector_vlc_table[0][0], 2, 1,
2276  -31, 0);
2277 
2279  mode_code_vlc_len, 1,
2280  NULL, 0, 0, 0, 0);
2281 
2282 #if CONFIG_VP4_DECODER
2283  for (int j = 0; j < 2; j++)
2284  for (int i = 0; i < 7; i++) {
2285  vp4_mv_vlc_table[j][i] =
2287  &vp4_mv_vlc[j][i][0][1], 2,
2288  &vp4_mv_vlc[j][i][0][0], 2, 1,
2289  -31, 0);
2290  }
2291 
2292  /* version >= 2 */
2293  for (int i = 0; i < 2; i++) {
2294  block_pattern_vlc[i] =
2295  ff_vlc_init_tables(&state, 5, 14,
2296  &vp4_block_pattern_vlc[i][0][1], 2, 1,
2297  &vp4_block_pattern_vlc[i][0][0], 2, 1, 0);
2298  }
2299 #endif
2300 }
2301 
2302 /// Allocate tables for per-frame data in Vp3DecodeContext
2304 {
2305  Vp3DecodeContext *s = avctx->priv_data;
2306  int y_fragment_count, c_fragment_count;
2307 
2308  free_tables(avctx);
2309 
2310  y_fragment_count = s->fragment_width[0] * s->fragment_height[0];
2311  c_fragment_count = s->fragment_width[1] * s->fragment_height[1];
2312 
2313  /* superblock_coding is used by unpack_superblocks (VP3/Theora) and vp4_unpack_macroblocks (VP4) */
2314  s->superblock_coding = av_mallocz(FFMAX(s->superblock_count, s->yuv_macroblock_count));
2315  s->all_fragments = av_calloc(s->fragment_count, sizeof(*s->all_fragments));
2316 
2317  s-> kf_coded_fragment_list = av_calloc(s->fragment_count, sizeof(int));
2318  s->nkf_coded_fragment_list = av_calloc(s->fragment_count, sizeof(int));
2319  memset(s-> num_kf_coded_fragment, -1, sizeof(s-> num_kf_coded_fragment));
2320 
2321  s->dct_tokens_base = av_calloc(s->fragment_count,
2322  64 * sizeof(*s->dct_tokens_base));
2323  s->motion_val[0] = av_calloc(y_fragment_count, sizeof(*s->motion_val[0]));
2324  s->motion_val[1] = av_calloc(c_fragment_count, sizeof(*s->motion_val[1]));
2325 
2326  /* work out the block mapping tables */
2327  s->superblock_fragments = av_calloc(s->superblock_count, 16 * sizeof(int));
2328  s->macroblock_coding = av_mallocz(s->macroblock_count + 1);
2329 
2330  s->dc_pred_row = av_malloc_array(s->y_superblock_width * 4, sizeof(*s->dc_pred_row));
2331 
2332  if (!s->superblock_coding || !s->all_fragments ||
2333  !s->dct_tokens_base || !s->kf_coded_fragment_list ||
2334  !s->nkf_coded_fragment_list ||
2335  !s->superblock_fragments || !s->macroblock_coding ||
2336  !s->dc_pred_row ||
2337  !s->motion_val[0] || !s->motion_val[1]) {
2338  return -1;
2339  }
2340 
2342 
2343  return 0;
2344 }
2345 
2346 
2347 static av_cold void free_vlc_tables(AVRefStructOpaque unused, void *obj)
2348 {
2349  CoeffVLCs *vlcs = obj;
2350 
2351  for (int i = 0; i < FF_ARRAY_ELEMS(vlcs->vlcs); i++)
2352  ff_vlc_free(&vlcs->vlcs[i]);
2353 }
2354 
2356 {
2357  static AVOnce init_static_once = AV_ONCE_INIT;
2358  Vp3DecodeContext *s = avctx->priv_data;
2359  int ret;
2360  int c_width;
2361  int c_height;
2362  int y_fragment_count, c_fragment_count;
2363 
2364  if (avctx->codec_tag == MKTAG('V', 'P', '4', '0')) {
2365  s->version = 3;
2366 #if !CONFIG_VP4_DECODER
2367  av_log(avctx, AV_LOG_ERROR, "This build does not support decoding VP4.\n");
2369 #endif
2370  } else if (avctx->codec_tag == MKTAG('V', 'P', '3', '0'))
2371  s->version = 0;
2372  else
2373  s->version = 1;
2374 
2375  s->avctx = avctx;
2376  s->width = FFALIGN(avctx->coded_width, 16);
2377  s->height = FFALIGN(avctx->coded_height, 16);
2378  if (s->width < 18)
2379  return AVERROR_PATCHWELCOME;
2380  if (avctx->codec_id != AV_CODEC_ID_THEORA)
2381  avctx->pix_fmt = AV_PIX_FMT_YUV420P;
2383  ff_hpeldsp_init(&s->hdsp, avctx->flags | AV_CODEC_FLAG_BITEXACT);
2384  ff_videodsp_init(&s->vdsp, 8);
2385  ff_vp3dsp_init(&s->vp3dsp);
2386 
2387  for (int i = 0; i < 64; i++) {
2388 #define TRANSPOSE(x) (((x) >> 3) | (((x) & 7) << 3))
2389  s->idct_permutation[i] = TRANSPOSE(i);
2390  s->idct_scantable[i] = TRANSPOSE(ff_zigzag_direct[i]);
2391 #undef TRANSPOSE
2392  }
2393 
2394  /* initialize to an impossible value which will force a recalculation
2395  * in the first frame decode */
2396  for (int i = 0; i < 3; i++)
2397  s->qps[i] = -1;
2398 
2399  ret = av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &s->chroma_x_shift, &s->chroma_y_shift);
2400  if (ret)
2401  return ret;
2402 
2403  s->y_superblock_width = (s->width + 31) / 32;
2404  s->y_superblock_height = (s->height + 31) / 32;
2405  s->y_superblock_count = s->y_superblock_width * s->y_superblock_height;
2406 
2407  /* work out the dimensions for the C planes */
2408  c_width = s->width >> s->chroma_x_shift;
2409  c_height = s->height >> s->chroma_y_shift;
2410  s->c_superblock_width = (c_width + 31) / 32;
2411  s->c_superblock_height = (c_height + 31) / 32;
2412  s->c_superblock_count = s->c_superblock_width * s->c_superblock_height;
2413 
2414  s->superblock_count = s->y_superblock_count + (s->c_superblock_count * 2);
2415  s->u_superblock_start = s->y_superblock_count;
2416  s->v_superblock_start = s->u_superblock_start + s->c_superblock_count;
2417 
2418  s->macroblock_width = (s->width + 15) / 16;
2419  s->macroblock_height = (s->height + 15) / 16;
2420  s->macroblock_count = s->macroblock_width * s->macroblock_height;
2421  s->c_macroblock_width = (c_width + 15) / 16;
2422  s->c_macroblock_height = (c_height + 15) / 16;
2423  s->c_macroblock_count = s->c_macroblock_width * s->c_macroblock_height;
2424  s->yuv_macroblock_count = s->macroblock_count + 2 * s->c_macroblock_count;
2425 
2426  s->fragment_width[0] = s->width / FRAGMENT_PIXELS;
2427  s->fragment_height[0] = s->height / FRAGMENT_PIXELS;
2428  s->fragment_width[1] = s->fragment_width[0] >> s->chroma_x_shift;
2429  s->fragment_height[1] = s->fragment_height[0] >> s->chroma_y_shift;
2430 
2431  /* fragment count covers all 8x8 blocks for all 3 planes */
2432  y_fragment_count = s->fragment_width[0] * s->fragment_height[0];
2433  c_fragment_count = s->fragment_width[1] * s->fragment_height[1];
2434  s->fragment_count = y_fragment_count + 2 * c_fragment_count;
2435  s->fragment_start[1] = y_fragment_count;
2436  s->fragment_start[2] = y_fragment_count + c_fragment_count;
2437 
2438  if (!s->theora_tables) {
2439  for (int i = 0; i < 64; i++) {
2440  s->coded_dc_scale_factor[0][i] = s->version < 2 ? vp31_dc_scale_factor[i] : vp4_y_dc_scale_factor[i];
2441  s->coded_dc_scale_factor[1][i] = s->version < 2 ? vp31_dc_scale_factor[i] : vp4_uv_dc_scale_factor[i];
2442  s->coded_ac_scale_factor[i] = s->version < 2 ? vp31_ac_scale_factor[i] : vp4_ac_scale_factor[i];
2443  s->base_matrix[0][i] = s->version < 2 ? vp31_intra_y_dequant[i] : vp4_generic_dequant[i];
2444  s->base_matrix[1][i] = s->version < 2 ? ff_mjpeg_std_chrominance_quant_tbl[i] : vp4_generic_dequant[i];
2445  s->base_matrix[2][i] = s->version < 2 ? vp31_inter_dequant[i] : vp4_generic_dequant[i];
2446  s->filter_limit_values[i] = s->version < 2 ? vp31_filter_limit_values[i] : vp4_filter_limit_values[i];
2447  }
2448 
2449  for (int inter = 0; inter < 2; inter++) {
2450  for (int plane = 0; plane < 3; plane++) {
2451  s->qr_count[inter][plane] = 1;
2452  s->qr_size[inter][plane][0] = 63;
2453  s->qr_base[inter][plane][0] =
2454  s->qr_base[inter][plane][1] = 2 * inter + (!!plane) * !inter;
2455  }
2456  }
2457  }
2458 
2459  if (ff_thread_sync_ref(avctx, offsetof(Vp3DecodeContext, coeff_vlc)) != FF_THREAD_IS_COPY) {
2460  CoeffVLCs *vlcs = av_refstruct_alloc_ext(sizeof(*s->coeff_vlc), 0,
2462  if (!vlcs)
2463  return AVERROR(ENOMEM);
2464 
2465  s->coeff_vlc = vlcs;
2466 
2467  if (!s->theora_tables) {
2468  const uint8_t (*bias_tabs)[32][2];
2469 
2470  /* init VLC tables */
2471  bias_tabs = CONFIG_VP4_DECODER && s->version >= 2 ? vp4_bias : vp3_bias;
2472  for (int i = 0; i < FF_ARRAY_ELEMS(vlcs->vlcs); i++) {
2473  ret = ff_vlc_init_from_lengths(&vlcs->vlcs[i], 11, 32,
2474  &bias_tabs[i][0][1], 2,
2475  &bias_tabs[i][0][0], 2, 1,
2476  0, 0, avctx);
2477  if (ret < 0)
2478  return ret;
2479  vlcs->vlc_tabs[i] = vlcs->vlcs[i].table;
2480  }
2481  } else {
2482  for (int i = 0; i < FF_ARRAY_ELEMS(vlcs->vlcs); i++) {
2483  const HuffTable *tab = &s->huffman_table[i];
2484 
2485  ret = ff_vlc_init_from_lengths(&vlcs->vlcs[i], 11, tab->nb_entries,
2486  &tab->entries[0].len, sizeof(*tab->entries),
2487  &tab->entries[0].sym, sizeof(*tab->entries), 1,
2488  0, 0, avctx);
2489  if (ret < 0)
2490  return ret;
2491  vlcs->vlc_tabs[i] = vlcs->vlcs[i].table;
2492  }
2493  }
2494  }
2495 
2496  ff_thread_once(&init_static_once, init_tables_once);
2497 
2498  return allocate_tables(avctx);
2499 }
2500 
2501 #if HAVE_THREADS
2502 static void ref_frames(Vp3DecodeContext *dst, const Vp3DecodeContext *src)
2503 {
2504  ff_progress_frame_replace(&dst->current_frame, &src->current_frame);
2505  ff_progress_frame_replace(&dst->golden_frame, &src->golden_frame);
2506 }
2507 
2508 static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
2509 {
2510  Vp3DecodeContext *s = dst->priv_data;
2511  const Vp3DecodeContext *s1 = src->priv_data;
2512  int qps_changed = 0;
2513 
2514  // copy previous frame data
2515  ref_frames(s, s1);
2516 
2517  if (s != s1) {
2518  // copy qscale data if necessary
2519  for (int i = 0; i < 3; i++) {
2520  if (s->qps[i] != s1->qps[1]) {
2521  qps_changed = 1;
2522  memcpy(&s->qmat[i], &s1->qmat[i], sizeof(s->qmat[i]));
2523  }
2524  }
2525 
2526  if (s->qps[0] != s1->qps[0])
2527  memcpy(&s->bounding_values_array, &s1->bounding_values_array,
2528  sizeof(s->bounding_values_array));
2529 
2530  if (qps_changed) {
2531  memcpy(s->qps, s1->qps, sizeof(s->qps));
2532  s->nqps = s1->nqps;
2533  }
2534  }
2535  return 0;
2536 }
2537 #endif
2538 
2540  int *got_frame, AVPacket *avpkt)
2541 {
2542  const uint8_t *buf = avpkt->data;
2543  int buf_size = avpkt->size;
2544  Vp3DecodeContext *s = avctx->priv_data;
2545  GetBitContext gb;
2546  int ret;
2547 
2548  if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0)
2549  return ret;
2550 
2551 #if CONFIG_THEORA_DECODER
2552  if (s->theora && get_bits1(&gb)) {
2553  int type = get_bits(&gb, 7);
2554  skip_bits_long(&gb, 6*8); /* "theora" */
2555 
2556  if (s->avctx->active_thread_type&FF_THREAD_FRAME) {
2557  av_log(avctx, AV_LOG_ERROR, "midstream reconfiguration with multithreading is unsupported, try -threads 1\n");
2558  return AVERROR_PATCHWELCOME;
2559  }
2560  if (type == 0) {
2561  vp3_decode_end(avctx);
2562  ret = theora_decode_header(avctx, &gb);
2563 
2564  if (ret >= 0)
2565  ret = vp3_decode_init(avctx);
2566  if (ret < 0) {
2567  vp3_decode_end(avctx);
2568  return ret;
2569  }
2570  return buf_size;
2571  } else if (type == 2) {
2572  vp3_decode_end(avctx);
2573  ret = theora_decode_tables(avctx, &gb);
2574  if (ret >= 0)
2575  ret = vp3_decode_init(avctx);
2576  if (ret < 0) {
2577  vp3_decode_end(avctx);
2578  return ret;
2579  }
2580  return buf_size;
2581  }
2582 
2583  av_log(avctx, AV_LOG_ERROR,
2584  "Header packet passed to frame decoder, skipping\n");
2585  return -1;
2586  }
2587 #endif
2588 
2589  s->keyframe = !get_bits1(&gb);
2590  if (!s->all_fragments) {
2591  av_log(avctx, AV_LOG_ERROR, "Data packet without prior valid headers\n");
2592  return -1;
2593  }
2594  if (!s->theora)
2595  skip_bits(&gb, 1);
2596 
2597  int last_qps[3];
2598  for (int i = 0; i < 3; i++)
2599  last_qps[i] = s->qps[i];
2600 
2601  s->nqps = 0;
2602  do {
2603  s->qps[s->nqps++] = get_bits(&gb, 6);
2604  } while (s->theora >= 0x030200 && s->nqps < 3 && get_bits1(&gb));
2605  for (int i = s->nqps; i < 3; i++)
2606  s->qps[i] = -1;
2607 
2608  if (s->avctx->debug & FF_DEBUG_PICT_INFO)
2609  av_log(s->avctx, AV_LOG_INFO, " VP3 %sframe #%"PRId64": Q index = %d\n",
2610  s->keyframe ? "key" : "", avctx->frame_num + 1, s->qps[0]);
2611 
2612  s->skip_loop_filter = !s->filter_limit_values[s->qps[0]] ||
2613  avctx->skip_loop_filter >= (s->keyframe ? AVDISCARD_ALL
2614  : AVDISCARD_NONKEY);
2615 
2616  if (s->qps[0] != last_qps[0])
2618 
2619  for (int i = 0; i < s->nqps; i++)
2620  // reinit all dequantizers if the first one changed, because
2621  // the DC of the first quantizer must be used for all matrices
2622  if (s->qps[i] != last_qps[i] || s->qps[0] != last_qps[0])
2623  init_dequantizer(s, i);
2624 
2625  if (avctx->skip_frame >= AVDISCARD_NONKEY && !s->keyframe)
2626  return buf_size;
2627 
2628  ret = ff_progress_frame_get_buffer(avctx, &s->last_frame,
2630  if (ret < 0) {
2631  // Don't goto error here, as one can't report progress on or
2632  // unref a non-existent frame.
2633  return ret;
2634  }
2635  FFSWAP(ProgressFrame, s->last_frame, s->current_frame);
2636  s->current_frame.f->pict_type = s->keyframe ? AV_PICTURE_TYPE_I
2638  if (s->keyframe)
2639  s->current_frame.f->flags |= AV_FRAME_FLAG_KEY;
2640  else
2641  s->current_frame.f->flags &= ~AV_FRAME_FLAG_KEY;
2642 
2643  if (!s->edge_emu_buffer) {
2644  s->edge_emu_buffer = av_malloc(9 * FFABS(s->current_frame.f->linesize[0]));
2645  if (!s->edge_emu_buffer) {
2646  ret = AVERROR(ENOMEM);
2647  goto error;
2648  }
2649  }
2650 
2651  if (s->keyframe) {
2652  if (!s->theora) {
2653  skip_bits(&gb, 4); /* width code */
2654  skip_bits(&gb, 4); /* height code */
2655  if (s->version) {
2656  int version = get_bits(&gb, 5);
2657 #if !CONFIG_VP4_DECODER
2658  if (version >= 2) {
2659  av_log(avctx, AV_LOG_ERROR, "This build does not support decoding VP4.\n");
2661  goto error;
2662  }
2663 #endif
2664  s->version = version;
2665  if (avctx->frame_num == 0)
2666  av_log(s->avctx, AV_LOG_DEBUG,
2667  "VP version: %d\n", s->version);
2668  }
2669  }
2670  if (s->version || s->theora) {
2671  if (get_bits1(&gb))
2672  av_log(s->avctx, AV_LOG_ERROR,
2673  "Warning, unsupported keyframe coding type?!\n");
2674  skip_bits(&gb, 2); /* reserved? */
2675 
2676 #if CONFIG_VP4_DECODER
2677  if (s->version >= 2) {
2678  int mb_height, mb_width;
2679  int mb_width_mul, mb_width_div, mb_height_mul, mb_height_div;
2680 
2681  mb_height = get_bits(&gb, 8);
2682  mb_width = get_bits(&gb, 8);
2683  if (mb_height != s->macroblock_height ||
2684  mb_width != s->macroblock_width)
2685  avpriv_request_sample(s->avctx, "macroblock dimension mismatch");
2686 
2687  mb_width_mul = get_bits(&gb, 5);
2688  mb_width_div = get_bits(&gb, 3);
2689  mb_height_mul = get_bits(&gb, 5);
2690  mb_height_div = get_bits(&gb, 3);
2691  if (mb_width_mul != 1 || mb_width_div != 1 || mb_height_mul != 1 || mb_height_div != 1)
2692  avpriv_request_sample(s->avctx, "unexpected macroblock dimension multiplier/divider");
2693 
2694  if (get_bits(&gb, 2))
2695  avpriv_request_sample(s->avctx, "unknown bits");
2696  }
2697 #endif
2698  }
2699  ff_progress_frame_replace(&s->golden_frame, &s->current_frame);
2700  } else {
2701  if (!s->golden_frame.f) {
2702  av_log(s->avctx, AV_LOG_WARNING,
2703  "vp3: first frame not a keyframe\n");
2704 
2705  if ((ret = ff_progress_frame_get_buffer(avctx, &s->golden_frame,
2706  AV_GET_BUFFER_FLAG_REF)) < 0)
2707  goto error;
2708  s->golden_frame.f->pict_type = AV_PICTURE_TYPE_I;
2709  ff_progress_frame_replace(&s->last_frame, &s->golden_frame);
2710  ff_progress_frame_report(&s->golden_frame, INT_MAX);
2711  }
2712  }
2713  ff_thread_finish_setup(avctx);
2714 
2715  memset(s->all_fragments, 0, s->fragment_count * sizeof(Vp3Fragment));
2716 
2717  if (s->version < 2) {
2718  if ((ret = unpack_superblocks(s, &gb)) < 0) {
2719  av_log(s->avctx, AV_LOG_ERROR, "error in unpack_superblocks\n");
2720  goto error;
2721  }
2722 #if CONFIG_VP4_DECODER
2723  } else {
2724  if ((ret = vp4_unpack_macroblocks(s, &gb)) < 0) {
2725  av_log(s->avctx, AV_LOG_ERROR, "error in vp4_unpack_macroblocks\n");
2726  goto error;
2727  }
2728 #endif
2729  }
2730  if ((ret = unpack_modes(s, &gb)) < 0) {
2731  av_log(s->avctx, AV_LOG_ERROR, "error in unpack_modes\n");
2732  goto error;
2733  }
2734  if (ret = unpack_vectors(s, &gb)) {
2735  av_log(s->avctx, AV_LOG_ERROR, "error in unpack_vectors\n");
2736  goto error;
2737  }
2738  if ((ret = unpack_block_qpis(s, &gb)) < 0) {
2739  av_log(s->avctx, AV_LOG_ERROR, "error in unpack_block_qpis\n");
2740  goto error;
2741  }
2742 
2743  if (s->version < 2) {
2744  if ((ret = unpack_dct_coeffs(s, &gb)) < 0) {
2745  av_log(s->avctx, AV_LOG_ERROR, "error in unpack_dct_coeffs\n");
2746  goto error;
2747  }
2748 #if CONFIG_VP4_DECODER
2749  } else {
2750  if ((ret = vp4_unpack_dct_coeffs(s, &gb)) < 0) {
2751  av_log(s->avctx, AV_LOG_ERROR, "error in vp4_unpack_dct_coeffs\n");
2752  goto error;
2753  }
2754 #endif
2755  }
2756 
2757  for (int i = 0; i < 3; i++) {
2758  int height = s->height >> (i && s->chroma_y_shift);
2759  if (s->flipped_image)
2760  s->data_offset[i] = 0;
2761  else
2762  s->data_offset[i] = (height - 1) * s->current_frame.f->linesize[i];
2763  }
2764 
2765  s->last_slice_end = 0;
2766  for (int i = 0; i < s->c_superblock_height; i++)
2767  render_slice(s, i);
2768 
2769  // filter the last row
2770  if (s->version < 2)
2771  for (int i = 0; i < 3; i++) {
2772  int row = (s->height >> (3 + (i && s->chroma_y_shift))) - 1;
2773  apply_loop_filter(s, i, row, row + 1);
2774  }
2775  vp3_draw_horiz_band(s, s->height);
2776 
2777  ff_progress_frame_unref(&s->last_frame);
2778 
2779  /* output frame, offset as needed */
2780  if ((ret = av_frame_ref(frame, s->current_frame.f)) < 0)
2781  return ret;
2782 
2783  frame->crop_left = s->offset_x;
2784  frame->crop_right = avctx->coded_width - avctx->width - s->offset_x;
2785  frame->crop_top = s->offset_y;
2786  frame->crop_bottom = avctx->coded_height - avctx->height - s->offset_y;
2787 
2788  *got_frame = 1;
2789 
2790  return buf_size;
2791 
2792 error:
2793  ff_progress_frame_report(&s->current_frame, INT_MAX);
2794  ff_progress_frame_unref(&s->last_frame);
2795 
2796  return ret;
2797 }
2798 
2799 static int read_huffman_tree(HuffTable *huff, GetBitContext *gb, int length,
2800  AVCodecContext *avctx)
2801 {
2802  if (get_bits1(gb)) {
2803  int token;
2804  if (huff->nb_entries >= 32) { /* overflow */
2805  av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
2806  return -1;
2807  }
2808  token = get_bits(gb, 5);
2809  ff_dlog(avctx, "code length %d, curr entry %d, token %d\n",
2810  length, huff->nb_entries, token);
2811  huff->entries[huff->nb_entries++] = (HuffEntry){ length, token };
2812  } else {
2813  /* The following bound follows from the fact that nb_entries <= 32. */
2814  if (length >= 31) { /* overflow */
2815  av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
2816  return -1;
2817  }
2818  length++;
2819  if (read_huffman_tree(huff, gb, length, avctx))
2820  return -1;
2821  if (read_huffman_tree(huff, gb, length, avctx))
2822  return -1;
2823  }
2824  return 0;
2825 }
2826 
2827 #if CONFIG_THEORA_DECODER
2828 static const enum AVPixelFormat theora_pix_fmts[4] = {
2830 };
2831 
2832 static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
2833 {
2834  Vp3DecodeContext *s = avctx->priv_data;
2835  int visible_width, visible_height, colorspace;
2836  uint8_t offset_x = 0, offset_y = 0;
2837  int ret;
2838  AVRational fps, aspect;
2839 
2840  if (get_bits_left(gb) < 206)
2841  return AVERROR_INVALIDDATA;
2842 
2843  s->theora_header = 0;
2844  s->theora = get_bits(gb, 24);
2845  av_log(avctx, AV_LOG_DEBUG, "Theora bitstream version %X\n", s->theora);
2846  if (!s->theora) {
2847  s->theora = 1;
2848  avpriv_request_sample(s->avctx, "theora 0");
2849  }
2850 
2851  /* 3.2.0 aka alpha3 has the same frame orientation as original vp3
2852  * but previous versions have the image flipped relative to vp3 */
2853  if (s->theora < 0x030200) {
2854  s->flipped_image = 1;
2855  av_log(avctx, AV_LOG_DEBUG,
2856  "Old (<alpha3) Theora bitstream, flipped image\n");
2857  }
2858 
2859  visible_width =
2860  s->width = get_bits(gb, 16) << 4;
2861  visible_height =
2862  s->height = get_bits(gb, 16) << 4;
2863 
2864  if (s->theora >= 0x030200) {
2865  visible_width = get_bits(gb, 24);
2866  visible_height = get_bits(gb, 24);
2867 
2868  offset_x = get_bits(gb, 8); /* offset x */
2869  offset_y = get_bits(gb, 8); /* offset y, from bottom */
2870  }
2871 
2872  /* sanity check */
2873  if (av_image_check_size(visible_width, visible_height, 0, avctx) < 0 ||
2874  visible_width + offset_x > s->width ||
2875  visible_height + offset_y > s->height ||
2876  visible_width + 512 < s->width ||
2877  visible_height + 512 < s->height ||
2878  visible_width < 18
2879  ) {
2880  av_log(avctx, AV_LOG_ERROR,
2881  "Invalid frame dimensions - w:%d h:%d x:%d y:%d (%dx%d).\n",
2882  visible_width, visible_height, offset_x, offset_y,
2883  s->width, s->height);
2884  return AVERROR_INVALIDDATA;
2885  }
2886 
2887  fps.num = get_bits_long(gb, 32);
2888  fps.den = get_bits_long(gb, 32);
2889  if (fps.num && fps.den) {
2890  if (fps.num < 0 || fps.den < 0) {
2891  av_log(avctx, AV_LOG_ERROR, "Invalid framerate\n");
2892  return AVERROR_INVALIDDATA;
2893  }
2894  av_reduce(&avctx->framerate.den, &avctx->framerate.num,
2895  fps.den, fps.num, 1 << 30);
2896  }
2897 
2898  aspect.num = get_bits(gb, 24);
2899  aspect.den = get_bits(gb, 24);
2900  if (aspect.num && aspect.den) {
2902  &avctx->sample_aspect_ratio.den,
2903  aspect.num, aspect.den, 1 << 30);
2904  ff_set_sar(avctx, avctx->sample_aspect_ratio);
2905  }
2906 
2907  if (s->theora < 0x030200)
2908  skip_bits(gb, 5); /* keyframe frequency force */
2909  colorspace = get_bits(gb, 8);
2910  skip_bits(gb, 24); /* bitrate */
2911 
2912  skip_bits(gb, 6); /* quality hint */
2913 
2914  if (s->theora >= 0x030200) {
2915  skip_bits(gb, 5); /* keyframe frequency force */
2916  avctx->pix_fmt = theora_pix_fmts[get_bits(gb, 2)];
2917  if (avctx->pix_fmt == AV_PIX_FMT_NONE) {
2918  av_log(avctx, AV_LOG_ERROR, "Invalid pixel format\n");
2919  return AVERROR_INVALIDDATA;
2920  }
2921  skip_bits(gb, 3); /* reserved */
2922  } else
2923  avctx->pix_fmt = AV_PIX_FMT_YUV420P;
2924 
2925  if (s->width < 18)
2926  return AVERROR_PATCHWELCOME;
2927  ret = ff_set_dimensions(avctx, s->width, s->height);
2928  if (ret < 0)
2929  return ret;
2930  if (!(avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP)) {
2931  avctx->width = visible_width;
2932  avctx->height = visible_height;
2933  // translate offsets from theora axis ([0,0] lower left)
2934  // to normal axis ([0,0] upper left)
2935  s->offset_x = offset_x;
2936  s->offset_y = s->height - visible_height - offset_y;
2937  }
2938 
2939  if (colorspace == 1)
2941  else if (colorspace == 2)
2943 
2944  if (colorspace == 1 || colorspace == 2) {
2945  avctx->colorspace = AVCOL_SPC_BT470BG;
2946  avctx->color_trc = AVCOL_TRC_BT709;
2947  }
2948 
2949  s->theora_header = 1;
2950  return 0;
2951 }
2952 
2953 static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
2954 {
2955  Vp3DecodeContext *s = avctx->priv_data;
2956  int n, matrices, ret;
2957 
2958  if (!s->theora_header)
2959  return AVERROR_INVALIDDATA;
2960 
2961  if (s->theora >= 0x030200) {
2962  n = get_bits(gb, 3);
2963  /* loop filter limit values table */
2964  if (n)
2965  for (int i = 0; i < 64; i++)
2966  s->filter_limit_values[i] = get_bits(gb, n);
2967  }
2968 
2969  if (s->theora >= 0x030200)
2970  n = get_bits(gb, 4) + 1;
2971  else
2972  n = 16;
2973  /* quality threshold table */
2974  for (int i = 0; i < 64; i++)
2975  s->coded_ac_scale_factor[i] = get_bits(gb, n);
2976 
2977  if (s->theora >= 0x030200)
2978  n = get_bits(gb, 4) + 1;
2979  else
2980  n = 16;
2981  /* dc scale factor table */
2982  for (int i = 0; i < 64; i++)
2983  s->coded_dc_scale_factor[0][i] =
2984  s->coded_dc_scale_factor[1][i] = get_bits(gb, n);
2985 
2986  if (s->theora >= 0x030200)
2987  matrices = get_bits(gb, 9) + 1;
2988  else
2989  matrices = 3;
2990 
2991  if (matrices > 384) {
2992  av_log(avctx, AV_LOG_ERROR, "invalid number of base matrixes\n");
2993  return -1;
2994  }
2995 
2996  for (int j = 0; j < matrices; j++)
2997  for (int i = 0; i < 64; i++)
2998  s->base_matrix[j][i] = get_bits(gb, 8);
2999 
3000  for (int inter = 0; inter <= 1; inter++) {
3001  for (int plane = 0; plane <= 2; plane++) {
3002  int newqr = 1;
3003  if (inter || plane > 0)
3004  newqr = get_bits1(gb);
3005  if (!newqr) {
3006  int qtj, plj;
3007  if (inter && get_bits1(gb)) {
3008  qtj = 0;
3009  plj = plane;
3010  } else {
3011  qtj = (3 * inter + plane - 1) / 3;
3012  plj = (plane + 2) % 3;
3013  }
3014  s->qr_count[inter][plane] = s->qr_count[qtj][plj];
3015  memcpy(s->qr_size[inter][plane], s->qr_size[qtj][plj],
3016  sizeof(s->qr_size[0][0]));
3017  memcpy(s->qr_base[inter][plane], s->qr_base[qtj][plj],
3018  sizeof(s->qr_base[0][0]));
3019  } else {
3020  int qri = 0;
3021  int qi = 0;
3022 
3023  for (;;) {
3024  int i = get_bits(gb, av_log2(matrices - 1) + 1);
3025  if (i >= matrices) {
3026  av_log(avctx, AV_LOG_ERROR,
3027  "invalid base matrix index\n");
3028  return -1;
3029  }
3030  s->qr_base[inter][plane][qri] = i;
3031  if (qi >= 63)
3032  break;
3033  i = get_bits(gb, av_log2(63 - qi) + 1) + 1;
3034  s->qr_size[inter][plane][qri++] = i;
3035  qi += i;
3036  }
3037 
3038  if (qi > 63) {
3039  av_log(avctx, AV_LOG_ERROR, "invalid qi %d > 63\n", qi);
3040  return -1;
3041  }
3042  s->qr_count[inter][plane] = qri;
3043  }
3044  }
3045  }
3046 
3047  /* Huffman tables */
3048  for (int i = 0; i < FF_ARRAY_ELEMS(s->huffman_table); i++) {
3049  s->huffman_table[i].nb_entries = 0;
3050  if ((ret = read_huffman_tree(&s->huffman_table[i], gb, 0, avctx)) < 0)
3051  return ret;
3052  }
3053 
3054  s->theora_tables = 1;
3055 
3056  return 0;
3057 }
3058 
3059 static av_cold int theora_decode_init(AVCodecContext *avctx)
3060 {
3061  Vp3DecodeContext *s = avctx->priv_data;
3062  GetBitContext gb;
3063  int ptype;
3064  const uint8_t *header_start[3];
3065  int header_len[3];
3066  int ret;
3067 
3068  avctx->pix_fmt = AV_PIX_FMT_YUV420P;
3069 
3070  s->theora = 1;
3071 
3072  if (!avctx->extradata_size) {
3073  av_log(avctx, AV_LOG_ERROR, "Missing extradata!\n");
3074  return -1;
3075  }
3076 
3078  42, header_start, header_len) < 0) {
3079  av_log(avctx, AV_LOG_ERROR, "Corrupt extradata\n");
3080  return -1;
3081  }
3082 
3083  for (int i = 0; i < 3; i++) {
3084  if (header_len[i] <= 0)
3085  continue;
3086  ret = init_get_bits8(&gb, header_start[i], header_len[i]);
3087  if (ret < 0)
3088  return ret;
3089 
3090  ptype = get_bits(&gb, 8);
3091 
3092  if (!(ptype & 0x80)) {
3093  av_log(avctx, AV_LOG_ERROR, "Invalid extradata!\n");
3094 // return -1;
3095  }
3096 
3097  // FIXME: Check for this as well.
3098  skip_bits_long(&gb, 6 * 8); /* "theora" */
3099 
3100  switch (ptype) {
3101  case 0x80:
3102  if (theora_decode_header(avctx, &gb) < 0)
3103  return -1;
3104  break;
3105  case 0x81:
3106 // FIXME: is this needed? it breaks sometimes
3107 // theora_decode_comments(avctx, gb);
3108  break;
3109  case 0x82:
3110  if (theora_decode_tables(avctx, &gb))
3111  return -1;
3112  break;
3113  default:
3114  av_log(avctx, AV_LOG_ERROR,
3115  "Unknown Theora config packet: %d\n", ptype & ~0x80);
3116  break;
3117  }
3118  if (ptype != 0x81 && get_bits_left(&gb) >= 8U)
3119  av_log(avctx, AV_LOG_WARNING,
3120  "%d bits left in packet %X\n",
3121  get_bits_left(&gb), ptype);
3122  if (s->theora < 0x030200)
3123  break;
3124  }
3125 
3126  return vp3_decode_init(avctx);
3127 }
3128 
3129 const FFCodec ff_theora_decoder = {
3130  .p.name = "theora",
3131  CODEC_LONG_NAME("Theora"),
3132  .p.type = AVMEDIA_TYPE_VIDEO,
3133  .p.id = AV_CODEC_ID_THEORA,
3134  .priv_data_size = sizeof(Vp3DecodeContext),
3135  .init = theora_decode_init,
3136  .close = vp3_decode_end,
3138  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DRAW_HORIZ_BAND |
3140  .flush = vp3_decode_flush,
3141  UPDATE_THREAD_CONTEXT(vp3_update_thread_context),
3142  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
3145 };
3146 #endif
3147 
3149  .p.name = "vp3",
3150  CODEC_LONG_NAME("On2 VP3"),
3151  .p.type = AVMEDIA_TYPE_VIDEO,
3152  .p.id = AV_CODEC_ID_VP3,
3153  .priv_data_size = sizeof(Vp3DecodeContext),
3154  .init = vp3_decode_init,
3155  .close = vp3_decode_end,
3157  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DRAW_HORIZ_BAND |
3159  .flush = vp3_decode_flush,
3160  UPDATE_THREAD_CONTEXT(vp3_update_thread_context),
3161  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
3163 };
3164 
3165 #if CONFIG_VP4_DECODER
3166 const FFCodec ff_vp4_decoder = {
3167  .p.name = "vp4",
3168  CODEC_LONG_NAME("On2 VP4"),
3169  .p.type = AVMEDIA_TYPE_VIDEO,
3170  .p.id = AV_CODEC_ID_VP4,
3171  .priv_data_size = sizeof(Vp3DecodeContext),
3172  .init = vp3_decode_init,
3173  .close = vp3_decode_end,
3175  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DRAW_HORIZ_BAND |
3177  .flush = vp3_decode_flush,
3178  UPDATE_THREAD_CONTEXT(vp3_update_thread_context),
3179  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
3181 };
3182 #endif
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
vp4_ac_scale_factor
static const uint16_t vp4_ac_scale_factor[64]
Definition: vp4data.h:64
ff_progress_frame_report
void ff_progress_frame_report(ProgressFrame *f, int n)
Notify later decoding threads when part of their reference frame is ready.
Definition: decode.c:1971
vp4data.h
PUL
#define PUL
allocate_tables
static av_cold int allocate_tables(AVCodecContext *avctx)
Allocate tables for per-frame data in Vp3DecodeContext.
Definition: vp3.c:2303
vp3_dequant
static int vp3_dequant(Vp3DecodeContext *s, const Vp3Fragment *frag, int plane, int inter, int16_t block[64])
Pull DCT tokens from the 64 levels to decode and dequant the coefficients for the next block in codin...
Definition: vp3.c:1848
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:280
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
Vp3Fragment::dc
int16_t dc
Definition: vp3.c:68
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
ff_vlc_init_from_lengths
int ff_vlc_init_from_lengths(VLC *vlc, int nb_bits, int nb_codes, const int8_t *lens, int lens_wrap, const void *symbols, int symbols_wrap, int symbols_size, int offset, int flags, void *logctx)
Build VLC decoding tables suitable for use with get_vlc2()
Definition: vlc.c:306
state
static struct @590 state
av_clip
#define av_clip
Definition: common.h:100
Vp3DecodeContext::offset_x
uint8_t offset_x
Definition: vp3.c:246
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:43
VP3DSPContext
Definition: vp3dsp.h:29
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:688
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
VP4_DC_INTER
@ VP4_DC_INTER
Definition: vp3.c:147
vp4_get_mv
static int vp4_get_mv(GetBitContext *gb, int axis, int last_motion)
Definition: vp3.c:886
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:671
mem_internal.h
Vp3DecodeContext::c_macroblock_height
int c_macroblock_height
Definition: vp3.c:236
zero_run_base
static const uint8_t zero_run_base[32]
Definition: vp3data.h:133
MODE_INTER_PRIOR_LAST
#define MODE_INTER_PRIOR_LAST
Definition: vp3.c:86
VP4Predictor
Definition: vp3.c:176
Vp3DecodeContext::idct_scantable
uint8_t idct_scantable[64]
Definition: vp3.c:208
thread.h
HuffEntry::len
uint8_t len
Definition: exr.c:97
AVRefStructOpaque
RefStruct is an API for creating reference-counted objects with minimal overhead.
Definition: refstruct.h:58
VP4Predictor::dc
int dc
Definition: vp3.c:177
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:424
mode_code_vlc_len
static const uint8_t mode_code_vlc_len[8]
Definition: vp3data.h:97
av_cold
#define av_cold
Definition: attributes.h:119
superblock_run_length_vlc
static VLCElem superblock_run_length_vlc[88]
Definition: vp3.c:164
read_huffman_tree
static int read_huffman_tree(HuffTable *huff, GetBitContext *gb, int length, AVCodecContext *avctx)
Definition: vp3.c:2799
PUR
#define PUR
vp3dsp.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:466
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:664
u
#define u(width, name, range_min, range_max)
Definition: cbs_apv.c:68
AVPacket::data
uint8_t * data
Definition: packet.h:603
ff_vp3_decoder
const FFCodec ff_vp3_decoder
Definition: vp3.c:3148
ff_progress_frame_get_buffer
int ff_progress_frame_get_buffer(AVCodecContext *avctx, ProgressFrame *f, int flags)
Wrapper around ff_progress_frame_alloc() and ff_thread_get_buffer().
Definition: decode.c:1931
Vp3DecodeContext::all_fragments
Vp3Fragment * all_fragments
Definition: vp3.c:243
mode_code_vlc
static VLCElem mode_code_vlc[24+2108 *CONFIG_VP4_DECODER]
Definition: vp3.c:169
Vp3DecodeContext::filter_limit_values
uint8_t filter_limit_values[64]
Definition: vp3.c:324
FFCodec
Definition: codec_internal.h:127
fragment_run_length_vlc
static VLCElem fragment_run_length_vlc[56]
Definition: vp3.c:165
motion_vector_vlc
static VLCElem motion_vector_vlc[112]
Definition: vp3.c:166
base
uint8_t base
Definition: vp3data.h:128
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
ff_set_dimensions
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Definition: utils.c:91
Vp3Fragment::coding_method
uint8_t coding_method
Definition: vp3.c:69
thread.h
unpack_superblocks
static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
Definition: vp3.c:467
render_slice
static void render_slice(Vp3DecodeContext *s, int slice)
Definition: vp3.c:2054
CoeffVLCs::vlc_tabs
const VLCElem * vlc_tabs[80]
Definition: vp3.c:193
FF_DEBUG_PICT_INFO
#define FF_DEBUG_PICT_INFO
Definition: avcodec.h:1393
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:487
Vp3DecodeContext::height
int height
Definition: vp3.c:201
vlc_tables
static VLCElem vlc_tables[VLC_TABLES_SIZE]
Definition: imc.c:115
AV_CODEC_FLAG2_IGNORE_CROP
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
Definition: avcodec.h:355
fragment
Definition: dashdec.c:38
Vp3DecodeContext::y_superblock_count
int y_superblock_count
Definition: vp3.c:223
xiph.h
bit
#define bit(string, value)
Definition: cbs_mpeg2.c:56
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:383
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:563
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:197
Vp3DecodeContext::superblock_fragments
int * superblock_fragments
Definition: vp3.c:313
AVCOL_SPC_BT470BG
@ AVCOL_SPC_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
Definition: pixfmt.h:706
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:337
Vp3DecodeContext::golden_frame
ProgressFrame golden_frame
Definition: vp3.c:203
get_coeff
static int get_coeff(GetBitContext *gb, int token, int16_t *coeff)
Definition: vp3.c:1150
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
Vp3DecodeContext::qr_count
uint8_t qr_count[2][3]
Definition: vp3.c:256
Vp3DecodeContext::hdsp
HpelDSPContext hdsp
Definition: vp3.c:209
vp4_mv_vlc
static const uint8_t vp4_mv_vlc[2][7][63][2]
Definition: vp4data.h:112
BLOCK_Y
#define BLOCK_Y
Definition: vp3.c:641
Vp3DecodeContext::y_superblock_width
int y_superblock_width
Definition: vp3.c:221
CODING_MODE_COUNT
#define CODING_MODE_COUNT
Definition: vp3.c:90
FFSIGN
#define FFSIGN(a)
Definition: common.h:75
CoeffVLCs
Definition: rv60dec.c:89
GetBitContext
Definition: get_bits.h:109
tab
static const struct twinvq_data tab
Definition: twinvq_data.h:10345
SET_CHROMA_MODES
#define SET_CHROMA_MODES
tables
Writing a table generator This documentation is preliminary Parts of the API are not good and should be changed Basic concepts A table generator consists of two *_tablegen c and *_tablegen h The h file will provide the variable declarations and initialization code for the tables
Definition: tablegen.txt:10
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:500
perm
perm
Definition: f_perms.c:75
av_pix_fmt_get_chroma_sub_sample
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
Definition: pixdesc.c:3484
MODE_INTER_LAST_MV
#define MODE_INTER_LAST_MV
Definition: vp3.c:85
Vp3DecodeContext::y_superblock_height
int y_superblock_height
Definition: vp3.c:222
ff_videodsp_init
av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc)
Definition: videodsp.c:39
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
Vp3DecodeContext::offset_y
uint8_t offset_y
Definition: vp3.c:247
Vp3DecodeContext::theora
int theora
Definition: vp3.c:199
AVCodecContext::coded_height
int coded_height
Definition: avcodec.h:619
av_reduce
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:35
loop
static int loop
Definition: ffplay.c:337
TRANSPOSE
#define TRANSPOSE(x)
AVRational::num
int num
Numerator.
Definition: rational.h:59
progressframe.h
refstruct.h
Vp3DecodeContext::num_kf_coded_fragment
int num_kf_coded_fragment[3]
Definition: vp3.c:296
TOKEN_ZERO_RUN
#define TOKEN_ZERO_RUN(coeff, zero_run)
Definition: vp3.c:280
vp4_pred_block_type_map
static const uint8_t vp4_pred_block_type_map[8]
Definition: vp3.c:153
FF_CODEC_CAP_USES_PROGRESSFRAMES
#define FF_CODEC_CAP_USES_PROGRESSFRAMES
The decoder might make use of the ProgressFrame API.
Definition: codec_internal.h:69
await_reference_row
static void await_reference_row(Vp3DecodeContext *s, const Vp3Fragment *fragment, int motion_y, int y)
Wait for the reference frame of the current fragment.
Definition: vp3.c:1933
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:657
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:205
motion_vector_vlc_table
static const uint8_t motion_vector_vlc_table[63][2]
Definition: vp3data.h:101
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:544
theora_decode_tables
static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:681
hilbert_offset
static const uint8_t hilbert_offset[16][2]
Definition: vp3.c:138
VLCInitState
For static VLCs, the number of bits can often be hardcoded at each get_vlc2() callsite.
Definition: vlc.h:220
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:527
Vp3DecodeContext::fragment_height
int fragment_height[2]
Definition: vp3.c:241
CoeffVLCs::vlcs
VLC vlcs[80]
Definition: vp3.c:194
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:347
s
#define s(width, name)
Definition: cbs_vp9.c:198
init_loop_filter
static void init_loop_filter(Vp3DecodeContext *s)
Definition: vp3.c:458
VP4_DC_GOLDEN
@ VP4_DC_GOLDEN
Definition: vp3.c:148
vp4_mv_table_selector
static const uint8_t vp4_mv_table_selector[32]
Definition: vp4data.h:105
AV_GET_BUFFER_FLAG_REF
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
Definition: avcodec.h:415
vp3_decode_flush
static av_cold void vp3_decode_flush(AVCodecContext *avctx)
Definition: vp3.c:350
transform
static const int8_t transform[32][32]
Definition: dsp.c:27
HuffTable::nb_entries
uint8_t nb_entries
Definition: vp3.c:189
init_block_mapping
static int init_block_mapping(Vp3DecodeContext *s)
This function sets up all of the various blocks mappings: superblocks <-> fragments,...
Definition: vp3.c:383
SB_PARTIALLY_CODED
#define SB_PARTIALLY_CODED
Definition: vp3.c:74
bits
uint8_t bits
Definition: vp3data.h:128
SB_NOT_CODED
#define SB_NOT_CODED
Definition: vp3.c:73
av_refstruct_alloc_ext
static void * av_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque, void(*free_cb)(AVRefStructOpaque opaque, void *obj))
A wrapper around av_refstruct_alloc_ext_c() for the common case of a non-const qualified opaque.
Definition: refstruct.h:94
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
Vp3Fragment::qpi
uint8_t qpi
Definition: vp3.c:70
ff_progress_frame_unref
void ff_progress_frame_unref(ProgressFrame *f)
Give up a reference to the underlying frame contained in a ProgressFrame and reset the ProgressFrame,...
Definition: decode.c:1954
ff_progress_frame_await
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before ff_progress_frame_await() has been called on them. reget_buffer() and buffer age optimizations no longer work. *The contents of buffers must not be written to after ff_progress_frame_report() has been called on them. This includes draw_edges(). Porting codecs to frame threading
decode.h
get_bits.h
reverse_dc_prediction
static void reverse_dc_prediction(Vp3DecodeContext *s, int first_fragment, int fragment_width, int fragment_height)
Definition: vp3.c:1633
unpack_dct_coeffs
static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
Definition: vp3.c:1298
VP4_DC_UNDEFINED
@ VP4_DC_UNDEFINED
Definition: vp3.c:150
ModeAlphabet
static const int ModeAlphabet[6][CODING_MODE_COUNT]
Definition: vp3.c:100
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
av_mallocz
#define av_mallocz(s)
Definition: tableprint_vlc.h:31
RSHIFT
#define RSHIFT(a, b)
Definition: common.h:56
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
AVCOL_PRI_BT470BG
@ AVCOL_PRI_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
Definition: pixfmt.h:643
MODE_USING_GOLDEN
#define MODE_USING_GOLDEN
Definition: vp3.c:87
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:453
Vp3DecodeContext::macroblock_width
int macroblock_width
Definition: vp3.c:232
FFABS
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:74
Vp3DecodeContext::idct_permutation
uint8_t idct_permutation[64]
Definition: vp3.c:207
if
if(ret)
Definition: filter_design.txt:179
init_dequantizer
static void init_dequantizer(Vp3DecodeContext *s, int qpi)
Definition: vp3.c:416
MODE_INTER_FOURMV
#define MODE_INTER_FOURMV
Definition: vp3.c:89
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:95
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
Vp3DecodeContext::c_superblock_width
int c_superblock_width
Definition: vp3.c:224
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:203
coeff_tables
static const int16_t *const coeff_tables[32]
Definition: vp3data.h:332
Vp3DecodeContext::offset_x_warned
int offset_x_warned
Definition: vp3.c:248
NULL
#define NULL
Definition: coverity.c:32
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
free_vlc_tables
static av_cold void free_vlc_tables(AVRefStructOpaque unused, void *obj)
Definition: vp3.c:2347
HuffTable
Definition: vp3.c:187
PU
#define PU
unpack_modes
static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
Definition: vp3.c:783
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
Vp3DecodeContext::superblock_count
int superblock_count
Definition: vp3.c:220
ff_vp3dsp_h_loop_filter_12
void ff_vp3dsp_h_loop_filter_12(uint8_t *first_pixel, ptrdiff_t stride, int *bounding_values)
theora_decode_header
static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
av_fallthrough
#define av_fallthrough
Definition: attributes.h:67
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:391
fragment_run_length_vlc_len
static const uint8_t fragment_run_length_vlc_len[30]
Definition: vp3data.h:92
vp4_bias
static const uint8_t vp4_bias[5 *16][32][2]
Definition: vp4data.h:329
ff_set_sar
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context.
Definition: utils.c:106
mathops.h
Vp3DecodeContext::theora_header
int theora_header
Definition: vp3.c:199
TOKEN_COEFF
#define TOKEN_COEFF(coeff)
Definition: vp3.c:281
vp4_y_dc_scale_factor
static const uint8_t vp4_y_dc_scale_factor[64]
Definition: vp4data.h:42
Vp3DecodeContext::skip_loop_filter
int skip_loop_filter
Definition: vp3.c:215
FF_THREAD_IS_COPY
@ FF_THREAD_IS_COPY
Definition: thread.h:61
UPDATE_THREAD_CONTEXT
#define UPDATE_THREAD_CONTEXT(func)
Definition: codec_internal.h:341
attributes.h
Vp3DecodeContext::coeff_vlc
CoeffVLCs * coeff_vlc
The first 16 of the following VLCs are for the dc coefficients; the others are four groups of 16 VLCs...
Definition: vp3.c:303
AV_CODEC_ID_VP4
@ AV_CODEC_ID_VP4
Definition: codec_id.h:300
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:645
jpegquanttables.h
vp31_ac_scale_factor
static const uint16_t vp31_ac_scale_factor[64]
Definition: vp3data.h:63
Vp3DecodeContext::qr_size
uint8_t qr_size[2][3][64]
Definition: vp3.c:257
AVOnce
#define AVOnce
Definition: thread.h:202
DC_COEFF
#define DC_COEFF(u)
Definition: vp3.c:1631
Vp3DecodeContext::vp3dsp
VP3DSPContext vp3dsp
Definition: vp3.c:211
Vp3DecodeContext::flipped_image
int flipped_image
Definition: vp3.c:213
vp31_intra_y_dequant
static const uint8_t vp31_intra_y_dequant[64]
Definition: vp3data.h:29
ff_vp3dsp_v_loop_filter_12
void ff_vp3dsp_v_loop_filter_12(uint8_t *first_pixel, ptrdiff_t stride, int *bounding_values)
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:28
HpelDSPContext
Half-pel DSP context.
Definition: hpeldsp.h:46
Vp3DecodeContext::fragment_width
int fragment_width[2]
Definition: vp3.c:240
ff_vp3dsp_set_bounding_values
void ff_vp3dsp_set_bounding_values(int *bounding_values_array, int filter_limit)
Definition: vp3dsp.c:477
Vp3DecodeContext::total_num_coded_frags
int total_num_coded_frags
Definition: vp3.c:288
SB_FULLY_CODED
#define SB_FULLY_CODED
Definition: vp3.c:75
AVDISCARD_NONKEY
@ AVDISCARD_NONKEY
discard all frames except keyframes
Definition: defs.h:231
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:507
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:579
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AV_CODEC_FLAG_GRAY
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
Definition: avcodec.h:302
AVPacket::size
int size
Definition: packet.h:604
fixed_motion_vector_table
static const int8_t fixed_motion_vector_table[64]
Definition: vp3data.h:115
dc
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff) *mv_scale Intra DC Prediction block[y][x] dc[1]
Definition: snow.txt:400
height
#define height
Definition: dsp.h:89
av_frame_ref
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
Definition: frame.c:278
codec_internal.h
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
unpack_vectors
static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
Definition: vp3.c:901
VP4_DC_INTRA
@ VP4_DC_INTRA
Definition: vp3.c:146
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:424
ff_vp4_decoder
const FFCodec ff_vp4_decoder
FF_CODEC_CAP_EXPORTS_CROPPING
#define FF_CODEC_CAP_EXPORTS_CROPPING
The decoder sets the cropping fields in the output frames manually.
Definition: codec_internal.h:61
VLCElem
Definition: vlc.h:32
AV_NUM_DATA_POINTERS
#define AV_NUM_DATA_POINTERS
Definition: frame.h:467
ref_frame
static int ref_frame(VVCFrame *dst, const VVCFrame *src)
Definition: dec.c:616
Vp3DecodeContext::dct_tokens
int16_t * dct_tokens[3][64]
This is a list of all tokens in bitstream order.
Definition: vp3.c:277
Vp3DecodeContext::coded_dc_scale_factor
uint16_t coded_dc_scale_factor[2][64]
Definition: vp3.c:253
Vp3DecodeContext::qps
int qps[3]
Definition: vp3.c:217
Vp3DecodeContext::block
int16_t block[64]
Definition: vp3.c:212
Vp3DecodeContext::chroma_y_shift
int chroma_y_shift
Definition: vp3.c:202
Vp3DecodeContext::data_offset
int data_offset[3]
Definition: vp3.c:245
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
Vp3DecodeContext::macroblock_coding
unsigned char * macroblock_coding
Definition: vp3.c:317
version
version
Definition: libkvazaar.c:313
vp3data.h
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:221
AVCOL_TRC_BT709
@ AVCOL_TRC_BT709
also ITU-R BT1361
Definition: pixfmt.h:668
FF_THREAD_FRAME
#define FF_THREAD_FRAME
Decode more than one frame at once.
Definition: avcodec.h:1590
av_refstruct_unref
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition: refstruct.c:120
Vp3DecodeContext::avctx
AVCodecContext * avctx
Definition: vp3.c:198
AV_CODEC_ID_VP3
@ AV_CODEC_ID_VP3
Definition: codec_id.h:81
Vp3DecodeContext::nkf_coded_fragment_list
int * nkf_coded_fragment_list
Definition: vp3.c:295
Vp3DecodeContext::keyframe
int keyframe
Definition: vp3.c:206
MODE_INTRA
#define MODE_INTRA
Definition: vp3.c:83
apply_loop_filter
static void apply_loop_filter(Vp3DecodeContext *s, int plane, int ystart, int yend)
Definition: vp3.c:1782
Vp3DecodeContext::macroblock_height
int macroblock_height
Definition: vp3.c:233
Vp3DecodeContext::yuv_macroblock_count
int yuv_macroblock_count
Definition: vp3.c:237
av_malloc
#define av_malloc(s)
Definition: ops_asmgen.c:44
Vp3DecodeContext::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: vp3.c:319
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:526
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:373
Vp3DecodeContext::c_macroblock_count
int c_macroblock_count
Definition: vp3.c:234
AV_CODEC_ID_THEORA
@ AV_CODEC_ID_THEORA
Definition: codec_id.h:82
NB_VP4_DC_TYPES
@ NB_VP4_DC_TYPES
Definition: vp3.c:149
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:32
vp3_decode_frame
static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
Definition: vp3.c:2539
superblock_run_length_vlc_lens
static const uint8_t superblock_run_length_vlc_lens[34]
Definition: vp3data.h:85
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:58
ff_mjpeg_std_chrominance_quant_tbl
const uint8_t ff_mjpeg_std_chrominance_quant_tbl[64]
Definition: jpegquanttables.c:45
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
Vp3DecodeContext::macroblock_count
int macroblock_count
Definition: vp3.c:231
SUPERBLOCK_VLC_BITS
#define SUPERBLOCK_VLC_BITS
Definition: vp3.c:62
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:688
Vp3DecodeContext::current_frame
ProgressFrame current_frame
Definition: vp3.c:205
Vp3DecodeContext::v_superblock_start
int v_superblock_start
Definition: vp3.c:228
Vp3DecodeContext::c_superblock_height
int c_superblock_height
Definition: vp3.c:225
AVCodecContext::height
int height
Definition: avcodec.h:604
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:643
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
VP4_MV_VLC_BITS
#define VP4_MV_VLC_BITS
Definition: vp3.c:61
Vp3DecodeContext::coded_fragment_list
int * coded_fragment_list[3]
Definition: vp3.c:292
avcodec.h
Vp3DecodeContext::c_superblock_count
int c_superblock_count
Definition: vp3.c:226
ff_zigzag_direct
const uint8_t ff_zigzag_direct[64]
Definition: mathtables.c:137
PL
#define PL
AVCOL_PRI_BT470M
@ AVCOL_PRI_BT470M
also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
Definition: pixfmt.h:641
ff_vlc_free
void ff_vlc_free(VLC *vlc)
Definition: vlc.c:580
ret
ret
Definition: filter_design.txt:187
Vp3DecodeContext::theora_tables
int theora_tables
Definition: vp3.c:199
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
free_tables
static av_cold void free_tables(AVCodecContext *avctx)
Definition: vp3.c:334
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:265
unpack_vlcs
static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb, const VLCElem *vlc_table, int coeff_index, int plane, int eob_run)
Definition: vp3.c:1178
MODE_INTER_PLUS_MV
#define MODE_INTER_PLUS_MV
Definition: vp3.c:84
Vp3DecodeContext::num_coded_frags
int num_coded_frags[3][64]
number of blocks that contain DCT coefficients at the given level or higher
Definition: vp3.c:287
ff_thread_sync_ref
enum ThreadingStatus ff_thread_sync_ref(AVCodecContext *avctx, size_t offset)
Allows to synchronize objects whose lifetime is the whole decoding process among all frame threads.
Definition: decode.c:1982
vp4_block_pattern_table_selector
static const uint8_t vp4_block_pattern_table_selector[14]
Definition: vp4data.h:86
ff_thread_finish_setup
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call ff_thread_finish_setup() afterwards. If some code can 't be moved
Vp3DecodeContext::chroma_x_shift
int chroma_x_shift
Definition: vp3.c:202
BLOCK_X
#define BLOCK_X
Definition: vp3.c:640
U
#define U(x)
Definition: vpx_arith.h:37
MODE_COPY
#define MODE_COPY
Definition: vp3.c:93
Vp3DecodeContext
Definition: vp3.c:197
ff_progress_frame_replace
void ff_progress_frame_replace(ProgressFrame *dst, const ProgressFrame *src)
Do nothing if dst and src already refer to the same AVFrame; otherwise unreference dst and if src is ...
Definition: decode.c:1961
ff_theora_decoder
const FFCodec ff_theora_decoder
vp4_filter_limit_values
static const uint8_t vp4_filter_limit_values[64]
Definition: vp4data.h:75
MODE_GOLDEN_MV
#define MODE_GOLDEN_MV
Definition: vp3.c:88
coeff_vlc
static const VLCElem * coeff_vlc[2][8][4]
Definition: atrac9dec.c:110
FRAGMENT_PIXELS
#define FRAGMENT_PIXELS
Definition: vp3.c:64
AVCodecContext
main external API structure.
Definition: avcodec.h:443
vp3_draw_horiz_band
static void vp3_draw_horiz_band(Vp3DecodeContext *s, int y)
called when all pixels up to row y are complete
Definition: vp3.c:1893
AVCHROMA_LOC_CENTER
@ AVCHROMA_LOC_CENTER
MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0.
Definition: pixfmt.h:799
vp4_generic_dequant
static const uint8_t vp4_generic_dequant[64]
Definition: vp4data.h:31
zero_run_get_bits
static const uint8_t zero_run_get_bits[32]
Definition: vp3data.h:140
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
VLC
Definition: vlc.h:50
Vp3DecodeContext::coded_ac_scale_factor
uint32_t coded_ac_scale_factor[64]
Definition: vp3.c:254
Vp3DecodeContext::bounding_values_array
int bounding_values_array[256+4]
Definition: vp3.c:325
output_plane
static void output_plane(const Plane *plane, int buf_sel, uint8_t *dst, ptrdiff_t dst_pitch, int dst_height)
Convert and output the current plane.
Definition: indeo3.c:1032
HuffEntry
Definition: exr.c:96
vp31_inter_dequant
static const uint8_t vp31_inter_dequant[64]
Definition: vp3data.h:41
temp
else temp
Definition: vf_mcdeint.c:271
body
static void body(uint32_t ABCD[4], const uint8_t *src, size_t nblocks)
Definition: md5.c:103
VLC::table
VLCElem * table
Definition: vlc.h:52
vp4_block_pattern_vlc
static const uint8_t vp4_block_pattern_vlc[2][14][2]
Definition: vp4data.h:90
Windows::Graphics::DirectX::Direct3D11::p
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
Definition: vsrc_gfxcapture_winrt.hpp:53
avpriv_split_xiph_headers
int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size, int first_header_size, const uint8_t *header_start[3], int header_len[3])
Split a single extradata buffer into the three headers that most Xiph codecs use.
Definition: xiph.c:26
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
MODE_INTER_NO_MV
#define MODE_INTER_NO_MV
Definition: vp3.c:82
VideoDSPContext
Definition: videodsp.h:32
ff_vlc_init_tables_from_lengths
const av_cold VLCElem * ff_vlc_init_tables_from_lengths(VLCInitState *state, int nb_bits, int nb_codes, const int8_t *lens, int lens_wrap, const void *symbols, int symbols_wrap, int symbols_size, int offset, int flags)
Definition: vlc.c:366
HuffEntry::sym
uint8_t sym
Definition: vp3.c:184
Vp3DecodeContext::superblock_coding
unsigned char * superblock_coding
Definition: vp3.c:229
COMPATIBLE_FRAME
#define COMPATIBLE_FRAME(x)
Definition: vp3.c:1629
AVERROR_DECODER_NOT_FOUND
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
Definition: error.h:54
AVCodecContext::coded_width
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:619
Vp3DecodeContext::fragment_start
int fragment_start[3]
Definition: vp3.c:244
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:279
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
ff_vlc_init_tables
static const VLCElem * ff_vlc_init_tables(VLCInitState *state, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, int flags)
Definition: vlc.h:254
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
mem.h
AV_CODEC_FLAG_BITEXACT
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition: avcodec.h:322
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
vp3_bias
static const uint8_t vp3_bias[5 *16][32][2]
Definition: vp3data.h:370
get_eob_run
static int get_eob_run(GetBitContext *gb, int token)
Definition: vp3.c:1142
HuffTable::entries
HuffEntry entries[32]
Definition: vp3.c:188
eob_run_table
static const struct @319 eob_run_table[7]
VLC_INIT_STATIC_TABLE_FROM_LENGTHS
#define VLC_INIT_STATIC_TABLE_FROM_LENGTHS(vlc_table, nb_bits, nb_codes, lens, lens_wrap, syms, syms_wrap, syms_size, offset, flags)
Definition: vlc.h:288
AVCodecContext::codec_tag
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition: avcodec.h:468
Vp3DecodeContext::huffman_table
HuffTable huffman_table[5 *16]
Definition: vp3.c:322
ProgressFrame
The ProgressFrame structure.
Definition: progressframe.h:73
FFALIGN
#define FFALIGN(x, a)
Definition: macros.h:78
VLC_INIT_STATE
#define VLC_INIT_STATE(_table)
Definition: vlc.h:225
vp31_filter_limit_values
static const uint8_t vp31_filter_limit_values[64]
Definition: vp3data.h:74
AVPacket
This structure stores compressed data.
Definition: packet.h:580
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:470
VP4Predictor::type
int type
Definition: vp3.c:178
vp3_decode_init
static av_cold int vp3_decode_init(AVCodecContext *avctx)
Definition: vp3.c:2355
Vp3DecodeContext::base_matrix
uint8_t base_matrix[384][64]
Definition: vp3.c:255
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
videodsp.h
VP3_MV_VLC_BITS
#define VP3_MV_VLC_BITS
Definition: vp3.c:60
Vp3DecodeContext::fragment_count
int fragment_count
Definition: vp3.c:239
vp31_dc_scale_factor
static const uint8_t vp31_dc_scale_factor[64]
Definition: vp3data.h:52
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:604
imgutils.h
hpeldsp.h
Vp3DecodeContext::width
int width
Definition: vp3.c:201
Vp3DecodeContext::kf_coded_fragment_list
int * kf_coded_fragment_list
Definition: vp3.c:294
AV_CODEC_CAP_DRAW_HORIZ_BAND
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: codec.h:44
unpack_block_qpis
static int unpack_block_qpis(Vp3DecodeContext *s, GetBitContext *gb)
Definition: vp3.c:1099
Vp3DecodeContext::qr_base
uint16_t qr_base[2][3][64]
Definition: vp3.c:258
vp3_decode_end
static av_cold int vp3_decode_end(AVCodecContext *avctx)
Definition: vp3.c:359
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:80
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
MKTAG
#define MKTAG(a, b, c, d)
Definition: macros.h:55
h
h
Definition: vp9dsp_template.c:2070
vp4_uv_dc_scale_factor
static const uint8_t vp4_uv_dc_scale_factor[64]
Definition: vp4data.h:53
MAXIMUM_LONG_BIT_RUN
#define MAXIMUM_LONG_BIT_RUN
Definition: vp3.c:80
init_tables_once
static av_cold void init_tables_once(void)
Definition: vp3.c:2260
stride
#define stride
Definition: h264pred_template.c:536
Vp3DecodeContext::version
int version
Definition: vp3.c:200
av_image_check_size
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
Definition: imgutils.c:318
width
#define width
Definition: dsp.h:89
Vp3DecodeContext::motion_val
int8_t(*[2] motion_val)[2]
Definition: vp3.c:250
Vp3DecodeContext::last_slice_end
int last_slice_end
Definition: vp3.c:214
ff_vp3dsp_init
av_cold void ff_vp3dsp_init(VP3DSPContext *c)
Definition: vp3dsp.c:448
Vp3DecodeContext::dc_pred_row
VP4Predictor * dc_pred_row
Definition: vp3.c:327
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
Vp3DecodeContext::u_superblock_start
int u_superblock_start
Definition: vp3.c:227
coeff_get_bits
static const uint8_t coeff_get_bits[32]
Definition: vp3data.h:148
Vp3DecodeContext::dct_tokens_base
int16_t * dct_tokens_base
Definition: vp3.c:278
Vp3Fragment
Definition: vp3.c:67
AVCodecContext::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition: avcodec.h:628
src
#define src
Definition: vp8dsp.c:248
Vp3DecodeContext::nqps
int nqps
Definition: vp3.c:218
Vp3DecodeContext::qmat
int16_t qmat[3][2][3][64]
qmat[qpi][is_inter][plane]
Definition: vp3.c:307
Vp3DecodeContext::vdsp
VideoDSPContext vdsp
Definition: vp3.c:210
TOKEN_EOB
#define TOKEN_EOB(eob_run)
Definition: vp3.c:279
ff_hpeldsp_init
av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags)
Definition: hpeldsp.c:337
Vp3DecodeContext::c_macroblock_width
int c_macroblock_width
Definition: vp3.c:235
Vp3DecodeContext::last_frame
ProgressFrame last_frame
Definition: vp3.c:204