49 #define FRAGMENT_PIXELS 8 
   58 #define SB_NOT_CODED        0 
   59 #define SB_PARTIALLY_CODED  1 
   60 #define SB_FULLY_CODED      2 
   65 #define MAXIMUM_LONG_BIT_RUN 4129 
   67 #define MODE_INTER_NO_MV      0 
   69 #define MODE_INTER_PLUS_MV    2 
   70 #define MODE_INTER_LAST_MV    3 
   71 #define MODE_INTER_PRIOR_LAST 4 
   72 #define MODE_USING_GOLDEN     5 
   73 #define MODE_GOLDEN_MV        6 
   74 #define MODE_INTER_FOURMV     7 
   75 #define CODING_MODE_COUNT     8 
  124     { 0, 0 }, { 1, 0 }, { 1, 1 }, { 0, 1 },
 
  125     { 0, 2 }, { 0, 3 }, { 1, 3 }, { 1, 2 },
 
  126     { 2, 2 }, { 2, 3 }, { 3, 3 }, { 3, 2 },
 
  127     { 3, 1 }, { 2, 1 }, { 2, 0 }, { 3, 0 }
 
  130 #define MIN_DEQUANT_VAL 2 
  211 #define TOKEN_EOB(eob_run)              ((eob_run) << 2) 
  212 #define TOKEN_ZERO_RUN(coeff, zero_run) (((coeff) * 512) + ((zero_run) << 2) + 1) 
  213 #define TOKEN_COEFF(coeff)              (((coeff) * 4) + 2) 
  313     for (i = 0; i < 16; i++) {
 
  338     int sb_x, sb_y, 
plane;
 
  341     for (plane = 0; plane < 3; plane++) {
 
  349         for (sb_y = 0; sb_y < sb_height; sb_y++)
 
  350             for (sb_x = 0; sb_x < sb_width; sb_x++)
 
  351                 for (i = 0; i < 16; i++) {
 
  353                     y = 4 * sb_y + hilbert_offset[i][1];
 
  355                     if (x < frag_width && y < frag_height)
 
  374     int i, 
plane, inter, qri, bmi, bmj, qistart;
 
  376     for (inter = 0; inter < 2; inter++) {
 
  377         for (plane = 0; plane < 3; plane++) {
 
  381                 if (s->
qps[qpi] <= sum)
 
  387             for (i = 0; i < 64; i++) {
 
  391                             (2 * s->
qr_size[inter][plane][qri]);
 
  393                 int qmin   = 8 << (inter + !i);
 
  394                 int qscale = i ? ac_scale_factor : dc_scale_factor;
 
  397                     av_clip((qscale * coeff) / 100 * 4, qmin, 4096);
 
  424     for (x = 0; x < filter_limit; x++) {
 
  425         bounding_values[-x] = -x;
 
  426         bounding_values[x] = x;
 
  428     for (x = value = filter_limit; x < 128 && 
value; x++, value--) {
 
  429         bounding_values[ x] =  
value;
 
  430         bounding_values[-x] = -
value;
 
  433         bounding_values[128] = 
value;
 
  434     bounding_values[129] = bounding_values[130] = filter_limit * 0x02020202;
 
  443     int superblock_starts[3] = {
 
  447     int current_superblock = 0;
 
  449     int num_partial_superblocks = 0;
 
  452     int current_fragment;
 
  462         while (current_superblock < s->superblock_count && 
get_bits_left(gb) > 0) {
 
  470             if (current_run == 34)
 
  475                        "Invalid partially coded superblock run length\n");
 
  481             current_superblock += current_run;
 
  483                 num_partial_superblocks += current_run;
 
  488         if (num_partial_superblocks < s->superblock_count) {
 
  489             int superblocks_decoded = 0;
 
  491             current_superblock = 0;
 
  495             while (superblocks_decoded < s->superblock_count - num_partial_superblocks &&
 
  504                 if (current_run == 34)
 
  507                 for (j = 0; j < current_run; current_superblock++) {
 
  510                                "Invalid fully coded superblock run length\n");
 
  520                 superblocks_decoded += current_run;
 
  526         if (num_partial_superblocks) {
 
  540     for (plane = 0; plane < 3; plane++) {
 
  541         int sb_start = superblock_starts[
plane];
 
  544         int num_coded_frags = 0;
 
  546         for (i = sb_start; i < sb_end && get_bits_left(gb) > 0; i++) {
 
  548             for (j = 0; j < 16; j++) {
 
  551                 if (current_fragment != -1) {
 
  557                         if (current_run-- == 0) {
 
  580         for (i = 0; i < 64; i++)
 
  595     int i, j, k, sb_x, sb_y;
 
  597     int current_macroblock;
 
  598     int current_fragment;
 
  613             for (i = 0; i < 8; i++)
 
  615             for (i = 0; i < 8; i++)
 
  616                 custom_mode_alphabet[
get_bits(gb, 3)] = i;
 
  617             alphabet = custom_mode_alphabet;
 
  628                 for (j = 0; j < 4; j++) {
 
  629                     int mb_x = 2 * sb_x + (j >> 1);
 
  630                     int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
 
  637 #define BLOCK_X (2 * mb_x + (k & 1)) 
  638 #define BLOCK_Y (2 * mb_y + (k >> 1)) 
  642                     for (k = 0; k < 4; k++) {
 
  660                     for (k = 0; k < 4; k++) {
 
  666 #define SET_CHROMA_MODES                                                      \ 
  667     if (frag[s->fragment_start[1]].coding_method != MODE_COPY)                \ 
  668         frag[s->fragment_start[1]].coding_method = coding_mode;               \ 
  669     if (frag[s->fragment_start[2]].coding_method != MODE_COPY)                \ 
  670         frag[s->fragment_start[2]].coding_method = coding_mode; 
  679                         for (k = 0; k < 2; k++) {
 
  684                         for (k = 0; k < 4; k++) {
 
  704     int j, k, sb_x, sb_y;
 
  708     int last_motion_x = 0;
 
  709     int last_motion_y = 0;
 
  710     int prior_last_motion_x = 0;
 
  711     int prior_last_motion_y = 0;
 
  712     int current_macroblock;
 
  713     int current_fragment;
 
  729             for (j = 0; j < 4; j++) {
 
  730                 int mb_x = 2 * sb_x + (j >> 1);
 
  731                 int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
 
  743                     if (coding_mode == 0) {
 
  753                         prior_last_motion_x = last_motion_x;
 
  754                         prior_last_motion_y = last_motion_y;
 
  755                         last_motion_x       = motion_x[0];
 
  756                         last_motion_y       = motion_y[0];
 
  762                     prior_last_motion_x = last_motion_x;
 
  763                     prior_last_motion_y = last_motion_y;
 
  767                     for (k = 0; k < 4; k++) {
 
  770                             if (coding_mode == 0) {
 
  777                             last_motion_x = motion_x[k];
 
  778                             last_motion_y = motion_y[k];
 
  788                     motion_x[0] = last_motion_x;
 
  789                     motion_y[0] = last_motion_y;
 
  798                     motion_x[0] = prior_last_motion_x;
 
  799                     motion_y[0] = prior_last_motion_y;
 
  802                     prior_last_motion_x = last_motion_x;
 
  803                     prior_last_motion_y = last_motion_y;
 
  804                     last_motion_x       = motion_x[0];
 
  805                     last_motion_y       = motion_y[0];
 
  818                 for (k = 0; k < 4; k++) {
 
  822                         s->
motion_val[0][current_fragment][0] = motion_x[k];
 
  823                         s->
motion_val[0][current_fragment][1] = motion_y[k];
 
  825                         s->
motion_val[0][current_fragment][0] = motion_x[0];
 
  826                         s->
motion_val[0][current_fragment][1] = motion_y[0];
 
  832                         motion_x[0] = 
RSHIFT(motion_x[0] + motion_x[1] +
 
  833                                              motion_x[2] + motion_x[3], 2);
 
  834                         motion_y[0] = 
RSHIFT(motion_y[0] + motion_y[1] +
 
  835                                              motion_y[2] + motion_y[3], 2);
 
  837                     motion_x[0] = (motion_x[0] >> 1) | (motion_x[0] & 1);
 
  838                     motion_y[0] = (motion_y[0] >> 1) | (motion_y[0] & 1);
 
  844                         motion_x[0] = 
RSHIFT(motion_x[0] + motion_x[1], 1);
 
  845                         motion_y[0] = 
RSHIFT(motion_y[0] + motion_y[1], 1);
 
  846                         motion_x[1] = 
RSHIFT(motion_x[2] + motion_x[3], 1);
 
  847                         motion_y[1] = 
RSHIFT(motion_y[2] + motion_y[3], 1);
 
  849                         motion_x[1] = motion_x[0];
 
  850                         motion_y[1] = motion_y[0];
 
  852                     motion_x[0] = (motion_x[0] >> 1) | (motion_x[0] & 1);
 
  853                     motion_x[1] = (motion_x[1] >> 1) | (motion_x[1] & 1);
 
  856                     for (k = 0; k < 2; k++) {
 
  862                     for (k = 0; k < 4; k++) {
 
  882     int qpi, i, j, bit, run_length, blocks_decoded, num_blocks_at_qpi;
 
  885     for (qpi = 0; qpi < s->
nqps - 1 && num_blocks > 0; qpi++) {
 
  886         i = blocks_decoded = num_blocks_at_qpi = 0;
 
  898             if (run_length == 34)
 
  900             blocks_decoded += run_length;
 
  903                 num_blocks_at_qpi += run_length;
 
  905             for (j = 0; j < run_length; i++) {
 
  914         } 
while (blocks_decoded < num_blocks && 
get_bits_left(gb) > 0);
 
  916         num_blocks -= num_blocks_at_qpi;
 
  954     if (num_coeffs < 0) {
 
  956                "Invalid number of coefficients at level %d\n", coeff_index);
 
  960     if (eob_run > num_coeffs) {
 
  962         blocks_ended = num_coeffs;
 
  963         eob_run     -= num_coeffs;
 
  966         blocks_ended = eob_run;
 
  972         dct_tokens[j++] = blocks_ended << 2;
 
  976         token = 
get_vlc2(gb, vlc_table, 11, 3);
 
  978         if ((
unsigned) token <= 6
U) {
 
  988             if (eob_run > num_coeffs - coeff_i) {
 
  989                 dct_tokens[j++] = 
TOKEN_EOB(num_coeffs - coeff_i);
 
  990                 blocks_ended   += num_coeffs - coeff_i;
 
  991                 eob_run        -= num_coeffs - coeff_i;
 
  992                 coeff_i         = num_coeffs;
 
  995                 blocks_ended   += eob_run;
 
  999         } 
else if (token >= 0) {
 
 1002                 bits_to_get = 
get_bits(gb, bits_to_get);
 
 1017                     all_fragments[coded_fragment_list[coeff_i]].
dc = 
coeff;
 
 1022             if (coeff_index + zero_run > 64) {
 
 1024                        "Invalid zero run of %d with %d coeffs left\n",
 
 1025                        zero_run, 64 - coeff_index);
 
 1026                 zero_run = 64 - coeff_index;
 
 1031             for (i = coeff_index + 1; i <= coeff_index + zero_run; i++)
 
 1046         for (i = coeff_index + 1; i < 64; i++)
 
 1051         s->
dct_tokens[plane + 1][coeff_index] = dct_tokens + j;
 
 1052     else if (coeff_index < 63)
 
 1053         s->
dct_tokens[0][coeff_index + 1] = dct_tokens + j;
 
 1061                                   int fragment_height);
 
 1073     int residual_eob_run = 0;
 
 1088                                    0, residual_eob_run);
 
 1089     if (residual_eob_run < 0)
 
 1090         return residual_eob_run;
 
 1099                                    1, residual_eob_run);
 
 1100     if (residual_eob_run < 0)
 
 1101         return residual_eob_run;
 
 1103                                    2, residual_eob_run);
 
 1104     if (residual_eob_run < 0)
 
 1105         return residual_eob_run;
 
 1122     for (i = 1; i <= 5; i++) {
 
 1123         y_tables[i] = &s->
ac_vlc_1[ac_y_table];
 
 1124         c_tables[i] = &s->
ac_vlc_1[ac_c_table];
 
 1126     for (i = 6; i <= 14; i++) {
 
 1127         y_tables[i] = &s->
ac_vlc_2[ac_y_table];
 
 1128         c_tables[i] = &s->
ac_vlc_2[ac_c_table];
 
 1130     for (i = 15; i <= 27; i++) {
 
 1131         y_tables[i] = &s->
ac_vlc_3[ac_y_table];
 
 1132         c_tables[i] = &s->
ac_vlc_3[ac_c_table];
 
 1134     for (i = 28; i <= 63; i++) {
 
 1135         y_tables[i] = &s->
ac_vlc_4[ac_y_table];
 
 1136         c_tables[i] = &s->
ac_vlc_4[ac_c_table];
 
 1140     for (i = 1; i <= 63; i++) {
 
 1141         residual_eob_run = 
unpack_vlcs(s, gb, y_tables[i], i,
 
 1142                                        0, residual_eob_run);
 
 1143         if (residual_eob_run < 0)
 
 1144             return residual_eob_run;
 
 1146         residual_eob_run = 
unpack_vlcs(s, gb, c_tables[i], i,
 
 1147                                        1, residual_eob_run);
 
 1148         if (residual_eob_run < 0)
 
 1149             return residual_eob_run;
 
 1150         residual_eob_run = 
unpack_vlcs(s, gb, c_tables[i], i,
 
 1151                                        2, residual_eob_run);
 
 1152         if (residual_eob_run < 0)
 
 1153             return residual_eob_run;
 
 1164 #define COMPATIBLE_FRAME(x)                                                   \ 
 1165     (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type) 
 1166 #define DC_COEFF(u) s->all_fragments[u].dc 
 1171                                   int fragment_height)
 
 1179     int i = first_fragment;
 
 1184     int vl, vul, vu, vur;
 
 1196     static const int predictor_transform[16][4] = {
 
 1210         { -104, 116,   0, 116 }, 
 
 1212         { -104, 116,   0, 116 }  
 
 1221     static const unsigned char compatible_frame[9] = {
 
 1232     int current_frame_type;
 
 1248     for (y = 0; y < fragment_height; y++) {
 
 1250         for (x = 0; x < fragment_width; x++, i++) {
 
 1254                 current_frame_type =
 
 1265                     u  = i - fragment_width;
 
 1270                         ul  = i - fragment_width - 1;
 
 1275                     if (x + 1 < fragment_width) {
 
 1276                         ur  = i - fragment_width + 1;
 
 1283                 if (transform == 0) {
 
 1286                     predicted_dc = last_dc[current_frame_type];
 
 1290                         (predictor_transform[
transform][0] * vul) +
 
 1291                         (predictor_transform[transform][1] * vu) +
 
 1292                         (predictor_transform[
transform][2] * vur) +
 
 1293                         (predictor_transform[transform][3] * vl);
 
 1295                     predicted_dc /= 128;
 
 1299                     if ((transform == 15) || (transform == 13)) {
 
 1300                         if (
FFABS(predicted_dc - vu) > 128)
 
 1302                         else if (
FFABS(predicted_dc - vl) > 128)
 
 1304                         else if (
FFABS(predicted_dc - vul) > 128)
 
 1312                 last_dc[current_frame_type] = 
DC_COEFF(i);
 
 1319                               int ystart, 
int yend)
 
 1333     for (y = ystart; y < yend; y++) {
 
 1334         for (x = 0; x < 
width; x++) {
 
 1344                         stride, bounding_values);
 
 1351                         stride, bounding_values);
 
 1357                 if ((x < width - 1) &&
 
 1360                         plane_data + 8 * x + 8,
 
 1361                         stride, bounding_values);
 
 1367                 if ((y < height - 1) &&
 
 1370                         plane_data + 8 * x + 8 * stride,
 
 1371                         stride, bounding_values);
 
 1377         plane_data += 8 * 
stride;
 
 1388     int16_t *dequantizer = s->
qmat[frag->
qpi][inter][
plane];
 
 1394         switch (token & 3) {
 
 1403             i += (token >> 2) & 0x7f;
 
 1408             block[perm[i]] = (token >> 9) * dequantizer[perm[i]];
 
 1412             block[perm[i]] = (token >> 2) * dequantizer[perm[i]];
 
 1423     block[0] = frag->
dc * s->
qmat[0][inter][
plane][0];
 
 1442                                   y_flipped == s->
height ? INT_MAX
 
 1473                                 int motion_y, 
int y)
 
 1477     int border = motion_y & 1;
 
 1485     ref_row = y + (motion_y >> 1);
 
 1486     ref_row = 
FFMAX(
FFABS(ref_row), ref_row + 8 + border);
 
 1499     int motion_x = 0xdeadbeef, motion_y = 0xdeadbeef;
 
 1500     int motion_halfpel_index;
 
 1502     int plane, first_pixel;
 
 1507     for (plane = 0; plane < 3; plane++) {
 
 1528         int do_await = !plane && HAVE_THREADS &&
 
 1537         for (; sb_y < slice_height; sb_y++) {
 
 1539             for (sb_x = 0; sb_x < slice_width; sb_x++) {
 
 1541                 for (j = 0; j < 16; j++) {
 
 1543                     y        = 4 * sb_y + hilbert_offset[j][1];
 
 1544                     fragment = y * fragment_width + x;
 
 1546                     i = fragment_start + fragment;
 
 1549                     if (x >= fragment_width || y >= fragment_height)
 
 1552                     first_pixel = 8 * y * stride + 8 * x;
 
 1557                                             motion_val[fragment][1],
 
 1564                             motion_source = golden_plane;
 
 1566                             motion_source = last_plane;
 
 1568                         motion_source       += first_pixel;
 
 1569                         motion_halfpel_index = 0;
 
 1576                             motion_x = motion_val[fragment][0];
 
 1577                             motion_y = motion_val[fragment][1];
 
 1579                             src_x = (motion_x >> 1) + 8 * x;
 
 1580                             src_y = (motion_y >> 1) + 8 * y;
 
 1582                             motion_halfpel_index = motion_x & 0x01;
 
 1583                             motion_source       += (motion_x >> 1);
 
 1585                             motion_halfpel_index |= (motion_y & 0x01) << 1;
 
 1586                             motion_source        += ((motion_y >> 1) * stride);
 
 1588                             if (src_x < 0 || src_y < 0 ||
 
 1589                                 src_x + 9 >= plane_width ||
 
 1590                                 src_y + 9 >= plane_height) {
 
 1600                                 motion_source = 
temp;
 
 1611                             if (motion_halfpel_index != 3) {
 
 1613                                     output_plane + first_pixel,
 
 1614                                     motion_source, 
stride, 8);
 
 1618                                 int d = (motion_x ^ motion_y) >> 31;
 
 1621                                                                motion_source + stride + 1 + d,
 
 1648                             output_plane + first_pixel,
 
 1649                             last_plane + first_pixel,
 
 1658                                   FFMIN(4 * sb_y + 3, fragment_height - 1));
 
 1678     int y_fragment_count, c_fragment_count;
 
 1731     int i, inter, 
plane, ret;
 
 1734     int y_fragment_count, c_fragment_count;
 
 1757     for (i = 0; i < 64; i++) {
 
 1758 #define TRANSPOSE(x) (((x) >> 3) | (((x) & 7) << 3)) 
 1766     for (i = 0; i < 3; i++)
 
 1805         for (i = 0; i < 64; i++) {
 
 1814         for (inter = 0; inter < 2; inter++) {
 
 1815             for (plane = 0; plane < 3; plane++) {
 
 1824         for (i = 0; i < 16; i++) {
 
 1851         for (i = 0; i < 16; i++) {
 
 1932     if (src->
f->
data[0])
 
 1951     int qps_changed = 0, i, err;
 
 1953 #define copy_fields(to, from, start_field, end_field)                         \ 
 1954     memcpy(&to->start_field, &from->start_field,                              \ 
 1955            (char *) &to->end_field - (char *) &to->start_field) 
 1957     if (!
s1->current_frame.f->data[0] ||
 
 1969             int y_fragment_count, c_fragment_count;
 
 1977                    y_fragment_count * 
sizeof(*s->
motion_val[0]));
 
 1979                    c_fragment_count * 
sizeof(*s->
motion_val[1]));
 
 1989         for (i = 0; i < 3; i++) {
 
 1990             if (s->
qps[i] != 
s1->qps[1]) {
 
 1992                 memcpy(&s->
qmat[i], &
s1->qmat[i], 
sizeof(s->
qmat[i]));
 
 1996         if (s->
qps[0] != 
s1->qps[0])
 
 2010                             void *
data, 
int *got_frame,
 
 2015     int buf_size        = avpkt->
size;
 
 2023 #if CONFIG_THEORA_DECODER 
 2029             av_log(avctx, 
AV_LOG_ERROR, 
"midstream reconfiguration with multithreading is unsupported, try -threads 1\n");
 
 2043         } 
else if (type == 2) {
 
 2056                "Header packet passed to frame decoder, skipping\n");
 
 2068     for (i = 0; i < 3; i++)
 
 2075     for (i = s->
nqps; i < 3; i++)
 
 2080                s->
keyframe ? 
"key" : 
"", avctx->frame_number + 1, s->
qps[0]);
 
 2089     for (i = 0; i < s->
nqps; i++)
 
 2113                 if (avctx->frame_number == 0)
 
 2115                            "VP version: %d\n", s->
version);
 
 2121                        "Warning, unsupported keyframe coding type?!\n");
 
 2127                    "vp3: first frame not a keyframe\n");
 
 2165     for (i = 0; i < 3; i++) {
 
 2178     for (i = 0; i < 3; i++) {
 
 2223         ff_dlog(avctx, 
"hti %d hbits %x token %d entry : %d size %d\n",
 
 2265 #if CONFIG_THEORA_DECODER 
 2273     int visible_width, visible_height, colorspace;
 
 2274     uint8_t offset_x = 0, offset_y = 0;
 
 2284     if (s->
theora < 0x030200) {
 
 2287                "Old (<alpha3) Theora bitstream, flipped image\n");
 
 2295     if (s->
theora >= 0x030200) {
 
 2305         visible_width  + offset_x > s->
width ||
 
 2306         visible_height + offset_y > s->
height) {
 
 2308                "Invalid frame dimensions - w:%d h:%d x:%d y:%d (%dx%d).\n",
 
 2309                visible_width, visible_height, offset_x, offset_y,
 
 2316     if (fps.
num && fps.
den) {
 
 2317         if (fps.
num < 0 || fps.
den < 0) {
 
 2322                   fps.
den, fps.
num, 1 << 30);
 
 2327     if (aspect.
num && aspect.
den) {
 
 2330                   aspect.
num, aspect.
den, 1 << 30);
 
 2334     if (s->
theora < 0x030200)
 
 2341     if (s->
theora >= 0x030200) {
 
 2356         avctx->
width  = visible_width;
 
 2357         avctx->
height = visible_height;
 
 2364     if (colorspace == 1)
 
 2366     else if (colorspace == 2)
 
 2369     if (colorspace == 1 || colorspace == 2) {
 
 2381     int i, 
n, matrices, inter, 
plane;
 
 2386     if (s->
theora >= 0x030200) {
 
 2390             for (i = 0; i < 64; i++)
 
 2394     if (s->
theora >= 0x030200)
 
 2399     for (i = 0; i < 64; i++)
 
 2402     if (s->
theora >= 0x030200)
 
 2407     for (i = 0; i < 64; i++)
 
 2410     if (s->
theora >= 0x030200)
 
 2415     if (matrices > 384) {
 
 2420     for (n = 0; n < matrices; n++)
 
 2421         for (i = 0; i < 64; i++)
 
 2424     for (inter = 0; inter <= 1; inter++) {
 
 2425         for (plane = 0; plane <= 2; plane++) {
 
 2427             if (inter || plane > 0)
 
 2435                     qtj = (3 * inter + plane - 1) / 3;
 
 2436                     plj = (plane + 2) % 3;
 
 2449                     if (i >= matrices) {
 
 2451                                "invalid base matrix index\n");
 
 2472     for (s->
hti = 0; s->
hti < 80; s->
hti++) {
 
 2495     const uint8_t *header_start[3];
 
 2510                                   42, header_start, header_len) < 0) {
 
 2515     for (i = 0; i < 3; i++) {
 
 2516         if (header_len[i] <= 0)
 
 2524         if (!(ptype & 0x80)) {
 
 2547                    "Unknown Theora config packet: %d\n", ptype & ~0x80);
 
 2552                    "%d bits left in packet %X\n",
 
 2554         if (s->
theora < 0x030200)
 
 2567     .
init                  = theora_decode_init,
 
void(* put_no_rnd_pixels_l2)(uint8_t *dst, const uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h)
Copy 8xH pixels from source to destination buffer using a bilinear filter with no rounding (i...
 
av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc)
 
uint8_t idct_scantable[64]
 
discard all frames except keyframes 
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
 
#define AV_NUM_DATA_POINTERS
 
int16_t qmat[3][2][3][64]
qmat[qpi][is_inter][plane] 
 
static int init_block_mapping(Vp3DecodeContext *s)
This function sets up all of the various blocks mappings: superblocks <-> fragments, macroblocks <-> fragments, superblocks <-> macroblocks. 
 
#define copy_fields(s, e)
 
static const uint8_t eob_run_base[7]
 
This structure describes decoded (raw) audio or video data. 
 
#define TOKEN_EOB(eob_run)
 
static void render_slice(Vp3DecodeContext *s, int slice)
 
ptrdiff_t const GLvoid * data
 
static void flush(AVCodecContext *avctx)
 
int bounding_values_array[256+2]
 
int coded_width
Bitstream width / height, may be different from width/height e.g. 
 
static const int8_t vp31_intra_c_dequant[64]
 
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) 
 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
static int init_thread_copy(AVCodecContext *avctx)
 
uint16_t qr_base[2][3][64]
 
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context. 
 
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits. 
 
static av_cold int init(AVCodecContext *avctx)
 
static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
 
static const uint16_t fragment_run_length_vlc_table[30][2]
 
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 ...
 
#define MODE_INTER_PLUS_MV
 
static const int8_t vp31_intra_y_dequant[64]
 
static av_cold int init_frames(Vp3DecodeContext *s)
 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
 
static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
 
void(* v_loop_filter)(uint8_t *src, ptrdiff_t stride, int *bounding_values)
 
static const uint8_t zero_run_base[32]
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
 
static av_cold int vp3_decode_init(AVCodecContext *avctx)
 
static const uint8_t coeff_get_bits[32]
 
static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
 
static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
static void reverse_dc_prediction(Vp3DecodeContext *s, int first_fragment, int fragment_width, int fragment_height)
 
static av_cold int vp3_decode_end(AVCodecContext *avctx)
 
void ff_thread_await_progress(ThreadFrame *f, int n, int field)
Wait for earlier decoding threads to finish reference pictures. 
 
int * superblock_fragments
 
VLC superblock_run_length_vlc
 
static const uint32_t vp31_ac_scale_factor[64]
 
#define MAXIMUM_LONG_BIT_RUN
 
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
 
static const uint16_t ac_bias_3[16][32][2]
 
static const uint16_t dc_bias[16][32][2]
 
Vp3Fragment * all_fragments
 
static void init_loop_filter(Vp3DecodeContext *s)
 
#define COMPATIBLE_FRAME(x)
 
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
 
void(* emulated_edge_mc)(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_linesize, ptrdiff_t src_linesize, int block_w, int block_h, int src_x, int src_y, int w, int h)
Copy a rectangular area of samples to a temporary buffer and replicate the border samples...
 
static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
 
#define TOKEN_ZERO_RUN(coeff, zero_run)
 
#define FF_DEBUG_PICT_INFO
 
static int vp3_dequant(Vp3DecodeContext *s, 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...
 
static av_cold int end(AVCodecContext *avctx)
 
Multithreading support functions. 
 
uint8_t idct_permutation[64]
 
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame. 
 
static void init_dequantizer(Vp3DecodeContext *s, int qpi)
 
uint8_t * extradata
some codecs need / can use extradata like Huffman tables. 
 
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. 
 
#define u(width, name, range_min, range_max)
 
static void vp3_decode_flush(AVCodecContext *avctx)
 
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory. 
 
uint8_t filter_limit_values[64]
 
static int get_bits_count(const GetBitContext *s)
 
int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src)
 
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context. 
 
bitstream reader API header. 
 
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction. 
 
void ff_thread_finish_setup(AVCodecContext *avctx)
If the codec defines update_thread_context(), call this when they are ready for the next thread to st...
 
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale. 
 
static const uint8_t mode_code_vlc_table[8][2]
 
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples. 
 
static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
 
static const uint16_t ac_bias_1[16][32][2]
 
static int ref_frames(Vp3DecodeContext *dst, Vp3DecodeContext *src)
 
static int get_bits_left(GetBitContext *gb)
 
static int vp3_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static const uint8_t motion_vector_vlc_table[63][2]
 
also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) 
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS. 
 
void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f)
Wrapper around release_buffer() frame-for multithreaded codecs. 
 
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
 
int is_copy
Whether the parent AVCodecContext is a copy of the context which had init() called on it...
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
 
#define CODING_MODE_COUNT
 
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. 
 
static const struct endianess table[]
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
int active_thread_type
Which multithreading methods are in use by the codec. 
 
static const int8_t fixed_motion_vector_table[64]
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
 
int flags
AV_CODEC_FLAG_*. 
 
AVCodec ff_theora_decoder
 
static av_cold void free_tables(AVCodecContext *avctx)
 
const char * name
Name of the codec implementation. 
 
static const uint8_t offset[127][2]
 
static const int ModeAlphabet[6][CODING_MODE_COUNT]
 
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading. 
 
#define FF_CODEC_CAP_EXPORTS_CROPPING
The decoder sets the cropping fields in the output frames manually. 
 
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) 
 
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified. 
 
av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags)
 
static const int16_t *const coeff_tables[32]
 
unsigned char * macroblock_coding
 
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...
 
void(* h_loop_filter)(uint8_t *src, ptrdiff_t stride, int *bounding_values)
 
static const uint8_t eob_run_get_bits[7]
 
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback. 
 
void(* idct_dc_add)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
void(* draw_horiz_band)(struct AVCodecContext *s, const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], int y, int type, int height)
If non NULL, 'draw_horiz_band' is called by the libavcodec decoder to draw a horizontal band...
 
enum AVPictureType pict_type
Picture type of the frame. 
 
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT). 
 
#define FF_THREAD_FRAME
Decode more than one frame at once. 
 
VLC fragment_run_length_vlc
 
int width
picture width / height. 
 
GLsizei GLboolean const GLfloat * value
 
#define SB_PARTIALLY_CODED
 
static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb, VLC *table, int coeff_index, int plane, int eob_run)
 
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM 
 
void ff_thread_report_progress(ThreadFrame *f, int n, int field)
Notify later decoding threads when part of their reference picture is ready. 
 
uint8_t * edge_emu_buffer
 
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries. 
 
static const int8_t motion_vector_table[63]
 
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
 
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. ...
 
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code. 
 
static const uint16_t ac_bias_2[16][32][2]
 
static const uint8_t hilbert_offset[16][2]
 
static void error(const char *err)
 
int total_num_coded_frags
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome. 
 
static void apply_loop_filter(Vp3DecodeContext *s, int plane, int ystart, int yend)
 
static const int8_t transform[32][32]
 
#define AV_LOG_INFO
Standard information. 
 
Libavcodec external API header. 
 
static const uint16_t ac_bias_0[16][32][2]
 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
 
int16_t * dct_tokens[3][64]
This is a list of all tokens in bitstream order. 
 
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext. 
 
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs. 
 
ThreadFrame current_frame
 
main external API structure. 
 
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). 
 
uint8_t qr_size[2][3][64]
 
op_pixels_func put_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1. 
 
static av_cold int allocate_tables(AVCodecContext *avctx)
Allocate tables for per-frame data in Vp3DecodeContext. 
 
static unsigned int get_bits1(GetBitContext *s)
 
op_pixels_func put_no_rnd_pixels_tab[4][4]
Halfpel motion compensation with no rounding (a+b)>>1. 
 
static void skip_bits(GetBitContext *s, int n)
 
enum AVColorSpace colorspace
YUV colorspace type. 
 
Rational number (pair of numerator and denominator). 
 
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic. 
 
const uint8_t ff_zigzag_direct[64]
 
int num_coded_frags[3][64]
number of blocks that contain DCT coefficients at the given level or higher 
 
#define TOKEN_COEFF(coeff)
 
static const uint8_t vp31_dc_scale_factor[64]
 
int allocate_progress
Whether to allocate progress for frame threading. 
 
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits. 
 
static int read_huffman_tree(AVCodecContext *avctx, GetBitContext *gb)
 
static int update_frames(AVCodecContext *avctx)
Release and shuffle frames after decode finishes. 
 
static const uint16_t superblock_run_length_vlc_table[34][2]
 
#define MODE_USING_GOLDEN
 
uint32_t huffman_table[80][32][2]
 
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields. 
 
void(* idct_put)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
#define MODE_INTER_FOURMV
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
void(* idct_add)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
int * coded_fragment_list[3]
 
GLint GLenum GLboolean GLsizei stride
 
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 
 
unsigned char * superblock_coding
 
common internal api header. 
 
int16_t * dct_tokens_base
 
static int ref_frame(Vp3DecodeContext *s, ThreadFrame *dst, ThreadFrame *src)
 
static const int8_t vp31_inter_dequant[64]
 
uint16_t coded_dc_scale_factor[64]
 
Core video DSP helper functions. 
 
uint8_t base_matrix[384][64]
 
static int unpack_block_qpis(Vp3DecodeContext *s, GetBitContext *gb)
 
static void await_reference_row(Vp3DecodeContext *s, Vp3Fragment *fragment, int motion_y, int y)
Wait for the reference frame of the current fragment. 
 
struct AVCodecInternal * internal
Private context used for internal data. 
 
VLC_TYPE(* table)[2]
code, bits 
 
int key_frame
1 -> keyframe, 0-> not 
 
static const double coeff[2][5]
 
int flags2
AV_CODEC_FLAG2_*. 
 
#define MODE_INTER_PRIOR_LAST
 
#define AV_LOG_FATAL
Something went wrong and recovery is not possible. 
 
MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0. 
 
#define MODE_INTER_LAST_MV
 
av_cold void ff_vp3dsp_init(VP3DSPContext *c, int flags)
 
static const uint8_t vp31_filter_limit_values[64]
 
#define MKTAG(a, b, c, d)
 
AVPixelFormat
Pixel format. 
 
This structure stores compressed data. 
 
static void vp3_draw_horiz_band(Vp3DecodeContext *s, int y)
called when all pixels up to row y are complete 
 
void ff_free_vlc(VLC *vlc)
 
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later. 
 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
 
uint32_t coded_ac_scale_factor[64]
 
static const uint8_t zero_run_get_bits[32]
 
void * av_mallocz_array(size_t nmemb, size_t size)
 
int8_t(*[2] motion_val)[2]