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) 
  318     for (i = 0; i < 16; i++) {
 
  343     int sb_x, sb_y, 
plane;
 
  346     for (plane = 0; plane < 3; plane++) {
 
  354         for (sb_y = 0; sb_y < sb_height; sb_y++)
 
  355             for (sb_x = 0; sb_x < sb_width; sb_x++)
 
  356                 for (i = 0; i < 16; i++) {
 
  358                     y = 4 * sb_y + hilbert_offset[i][1];
 
  360                     if (x < frag_width && y < frag_height)
 
  379     int i, 
plane, inter, qri, bmi, bmj, qistart;
 
  381     for (inter = 0; inter < 2; inter++) {
 
  382         for (plane = 0; plane < 3; plane++) {
 
  386                 if (s->
qps[qpi] <= sum)
 
  392             for (i = 0; i < 64; i++) {
 
  396                             (2 * s->
qr_size[inter][plane][qri]);
 
  398                 int qmin   = 8 << (inter + !i);
 
  399                 int qscale = i ? ac_scale_factor : dc_scale_factor;
 
  402                     av_clip((qscale * coeff) / 100 * 4, qmin, 4096);
 
  429     for (x = 0; x < filter_limit; x++) {
 
  430         bounding_values[-x] = -x;
 
  431         bounding_values[x] = x;
 
  433     for (x = value = filter_limit; x < 128 && 
value; x++, value--) {
 
  434         bounding_values[ x] =  
value;
 
  435         bounding_values[-x] = -
value;
 
  438         bounding_values[128] = 
value;
 
  439     bounding_values[129] = bounding_values[130] = filter_limit * 0x02020202;
 
  448     int superblock_starts[3] = {
 
  452     int current_superblock = 0;
 
  454     int num_partial_superblocks = 0;
 
  457     int current_fragment;
 
  459     int plane0_num_coded_frags = 0;
 
  468         while (current_superblock < s->superblock_count && 
get_bits_left(gb) > 0) {
 
  476             if (current_run == 34)
 
  481                        "Invalid partially coded superblock run length\n");
 
  487             current_superblock += current_run;
 
  489                 num_partial_superblocks += current_run;
 
  494         if (num_partial_superblocks < s->superblock_count) {
 
  495             int superblocks_decoded = 0;
 
  497             current_superblock = 0;
 
  501             while (superblocks_decoded < s->superblock_count - num_partial_superblocks &&
 
  510                 if (current_run == 34)
 
  513                 for (j = 0; j < current_run; current_superblock++) {
 
  516                                "Invalid fully coded superblock run length\n");
 
  526                 superblocks_decoded += current_run;
 
  532         if (num_partial_superblocks) {
 
  549     for (plane = 0; plane < 3; plane++) {
 
  550         int sb_start = superblock_starts[
plane];
 
  553         int num_coded_frags = 0;
 
  557                 for (i = sb_start; i < sb_end; i++) {
 
  559                     for (j = 0; j < 16; j++) {
 
  562                         if (current_fragment != -1) {
 
  572             for (i = sb_start; i < sb_end && get_bits_left(gb) > 0; i++) {
 
  577                 for (j = 0; j < 16; j++) {
 
  580                     if (current_fragment != -1) {
 
  586                             if (current_run-- == 0) {
 
  610             plane0_num_coded_frags = num_coded_frags;
 
  612         for (i = 0; i < 64; i++)
 
  627     int i, j, k, sb_x, sb_y;
 
  629     int current_macroblock;
 
  630     int current_fragment;
 
  645             for (i = 0; i < 8; i++)
 
  647             for (i = 0; i < 8; i++)
 
  648                 custom_mode_alphabet[
get_bits(gb, 3)] = i;
 
  649             alphabet = custom_mode_alphabet;
 
  660                 for (j = 0; j < 4; j++) {
 
  661                     int mb_x = 2 * sb_x + (j >> 1);
 
  662                     int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
 
  669 #define BLOCK_X (2 * mb_x + (k & 1)) 
  670 #define BLOCK_Y (2 * mb_y + (k >> 1)) 
  674                     for (k = 0; k < 4; k++) {
 
  692                     for (k = 0; k < 4; k++) {
 
  698 #define SET_CHROMA_MODES                                                      \ 
  699     if (frag[s->fragment_start[1]].coding_method != MODE_COPY)                \ 
  700         frag[s->fragment_start[1]].coding_method = coding_mode;               \ 
  701     if (frag[s->fragment_start[2]].coding_method != MODE_COPY)                \ 
  702         frag[s->fragment_start[2]].coding_method = coding_mode; 
  711                         for (k = 0; k < 2; k++) {
 
  716                         for (k = 0; k < 4; k++) {
 
  736     int j, k, sb_x, sb_y;
 
  740     int last_motion_x = 0;
 
  741     int last_motion_y = 0;
 
  742     int prior_last_motion_x = 0;
 
  743     int prior_last_motion_y = 0;
 
  744     int current_macroblock;
 
  745     int current_fragment;
 
  761             for (j = 0; j < 4; j++) {
 
  762                 int mb_x = 2 * sb_x + (j >> 1);
 
  763                 int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
 
  775                     if (coding_mode == 0) {
 
  785                         prior_last_motion_x = last_motion_x;
 
  786                         prior_last_motion_y = last_motion_y;
 
  787                         last_motion_x       = motion_x[0];
 
  788                         last_motion_y       = motion_y[0];
 
  794                     prior_last_motion_x = last_motion_x;
 
  795                     prior_last_motion_y = last_motion_y;
 
  799                     for (k = 0; k < 4; k++) {
 
  802                             if (coding_mode == 0) {
 
  809                             last_motion_x = motion_x[k];
 
  810                             last_motion_y = motion_y[k];
 
  820                     motion_x[0] = last_motion_x;
 
  821                     motion_y[0] = last_motion_y;
 
  830                     motion_x[0] = prior_last_motion_x;
 
  831                     motion_y[0] = prior_last_motion_y;
 
  834                     prior_last_motion_x = last_motion_x;
 
  835                     prior_last_motion_y = last_motion_y;
 
  836                     last_motion_x       = motion_x[0];
 
  837                     last_motion_y       = motion_y[0];
 
  850                 for (k = 0; k < 4; k++) {
 
  854                         s->
motion_val[0][current_fragment][0] = motion_x[k];
 
  855                         s->
motion_val[0][current_fragment][1] = motion_y[k];
 
  857                         s->
motion_val[0][current_fragment][0] = motion_x[0];
 
  858                         s->
motion_val[0][current_fragment][1] = motion_y[0];
 
  864                         motion_x[0] = 
RSHIFT(motion_x[0] + motion_x[1] +
 
  865                                              motion_x[2] + motion_x[3], 2);
 
  866                         motion_y[0] = 
RSHIFT(motion_y[0] + motion_y[1] +
 
  867                                              motion_y[2] + motion_y[3], 2);
 
  869                     motion_x[0] = (motion_x[0] >> 1) | (motion_x[0] & 1);
 
  870                     motion_y[0] = (motion_y[0] >> 1) | (motion_y[0] & 1);
 
  876                         motion_x[0] = 
RSHIFT(motion_x[0] + motion_x[1], 1);
 
  877                         motion_y[0] = 
RSHIFT(motion_y[0] + motion_y[1], 1);
 
  878                         motion_x[1] = 
RSHIFT(motion_x[2] + motion_x[3], 1);
 
  879                         motion_y[1] = 
RSHIFT(motion_y[2] + motion_y[3], 1);
 
  881                         motion_x[1] = motion_x[0];
 
  882                         motion_y[1] = motion_y[0];
 
  884                     motion_x[0] = (motion_x[0] >> 1) | (motion_x[0] & 1);
 
  885                     motion_x[1] = (motion_x[1] >> 1) | (motion_x[1] & 1);
 
  888                     for (k = 0; k < 2; k++) {
 
  894                     for (k = 0; k < 4; k++) {
 
  914     int qpi, i, j, bit, run_length, blocks_decoded, num_blocks_at_qpi;
 
  917     for (qpi = 0; qpi < s->
nqps - 1 && num_blocks > 0; qpi++) {
 
  918         i = blocks_decoded = num_blocks_at_qpi = 0;
 
  930             if (run_length == 34)
 
  932             blocks_decoded += run_length;
 
  935                 num_blocks_at_qpi += run_length;
 
  937             for (j = 0; j < run_length; i++) {
 
  946         } 
while (blocks_decoded < num_blocks && 
get_bits_left(gb) > 0);
 
  948         num_blocks -= num_blocks_at_qpi;
 
  986     if (num_coeffs < 0) {
 
  988                "Invalid number of coefficients at level %d\n", coeff_index);
 
  992     if (eob_run > num_coeffs) {
 
  994         blocks_ended = num_coeffs;
 
  995         eob_run     -= num_coeffs;
 
  998         blocks_ended = eob_run;
 
 1004         dct_tokens[j++] = blocks_ended << 2;
 
 1008         token = 
get_vlc2(gb, vlc_table, 11, 3);
 
 1010         if ((
unsigned) token <= 6
U) {
 
 1020             if (eob_run > num_coeffs - coeff_i) {
 
 1021                 dct_tokens[j++] = 
TOKEN_EOB(num_coeffs - coeff_i);
 
 1022                 blocks_ended   += num_coeffs - coeff_i;
 
 1023                 eob_run        -= num_coeffs - coeff_i;
 
 1024                 coeff_i         = num_coeffs;
 
 1027                 blocks_ended   += eob_run;
 
 1031         } 
else if (token >= 0) {
 
 1034                 bits_to_get = 
get_bits(gb, bits_to_get);
 
 1049                     all_fragments[coded_fragment_list[coeff_i]].
dc = 
coeff;
 
 1054             if (coeff_index + zero_run > 64) {
 
 1056                        "Invalid zero run of %d with %d coeffs left\n",
 
 1057                        zero_run, 64 - coeff_index);
 
 1058                 zero_run = 64 - coeff_index;
 
 1063             for (i = coeff_index + 1; i <= coeff_index + zero_run; i++)
 
 1078         for (i = coeff_index + 1; i < 64; i++)
 
 1083         s->
dct_tokens[plane + 1][coeff_index] = dct_tokens + j;
 
 1084     else if (coeff_index < 63)
 
 1085         s->
dct_tokens[0][coeff_index + 1] = dct_tokens + j;
 
 1093                                   int fragment_height);
 
 1105     int residual_eob_run = 0;
 
 1120                                    0, residual_eob_run);
 
 1121     if (residual_eob_run < 0)
 
 1122         return residual_eob_run;
 
 1131                                    1, residual_eob_run);
 
 1132     if (residual_eob_run < 0)
 
 1133         return residual_eob_run;
 
 1135                                    2, residual_eob_run);
 
 1136     if (residual_eob_run < 0)
 
 1137         return residual_eob_run;
 
 1154     for (i = 1; i <= 5; i++) {
 
 1155         y_tables[i] = &s->
ac_vlc_1[ac_y_table];
 
 1156         c_tables[i] = &s->
ac_vlc_1[ac_c_table];
 
 1158     for (i = 6; i <= 14; i++) {
 
 1159         y_tables[i] = &s->
ac_vlc_2[ac_y_table];
 
 1160         c_tables[i] = &s->
ac_vlc_2[ac_c_table];
 
 1162     for (i = 15; i <= 27; i++) {
 
 1163         y_tables[i] = &s->
ac_vlc_3[ac_y_table];
 
 1164         c_tables[i] = &s->
ac_vlc_3[ac_c_table];
 
 1166     for (i = 28; i <= 63; i++) {
 
 1167         y_tables[i] = &s->
ac_vlc_4[ac_y_table];
 
 1168         c_tables[i] = &s->
ac_vlc_4[ac_c_table];
 
 1172     for (i = 1; i <= 63; i++) {
 
 1173         residual_eob_run = 
unpack_vlcs(s, gb, y_tables[i], i,
 
 1174                                        0, residual_eob_run);
 
 1175         if (residual_eob_run < 0)
 
 1176             return residual_eob_run;
 
 1178         residual_eob_run = 
unpack_vlcs(s, gb, c_tables[i], i,
 
 1179                                        1, residual_eob_run);
 
 1180         if (residual_eob_run < 0)
 
 1181             return residual_eob_run;
 
 1182         residual_eob_run = 
unpack_vlcs(s, gb, c_tables[i], i,
 
 1183                                        2, residual_eob_run);
 
 1184         if (residual_eob_run < 0)
 
 1185             return residual_eob_run;
 
 1196 #define COMPATIBLE_FRAME(x)                                                   \ 
 1197     (compatible_frame[s->all_fragments[x].coding_method] == current_frame_type) 
 1198 #define DC_COEFF(u) s->all_fragments[u].dc 
 1203                                   int fragment_height)
 
 1211     int i = first_fragment;
 
 1216     int vl, vul, vu, vur;
 
 1228     static const int predictor_transform[16][4] = {
 
 1242         { -104, 116,   0, 116 }, 
 
 1244         { -104, 116,   0, 116 }  
 
 1253     static const unsigned char compatible_frame[9] = {
 
 1264     int current_frame_type;
 
 1280     for (y = 0; y < fragment_height; y++) {
 
 1282         for (x = 0; x < fragment_width; x++, i++) {
 
 1286                 current_frame_type =
 
 1297                     u  = i - fragment_width;
 
 1302                         ul  = i - fragment_width - 1;
 
 1307                     if (x + 1 < fragment_width) {
 
 1308                         ur  = i - fragment_width + 1;
 
 1315                 if (transform == 0) {
 
 1318                     predicted_dc = last_dc[current_frame_type];
 
 1322                         (predictor_transform[
transform][0] * vul) +
 
 1323                         (predictor_transform[transform][1] * vu) +
 
 1324                         (predictor_transform[
transform][2] * vur) +
 
 1325                         (predictor_transform[transform][3] * vl);
 
 1327                     predicted_dc /= 128;
 
 1331                     if ((transform == 15) || (transform == 13)) {
 
 1332                         if (
FFABS(predicted_dc - vu) > 128)
 
 1334                         else if (
FFABS(predicted_dc - vl) > 128)
 
 1336                         else if (
FFABS(predicted_dc - vul) > 128)
 
 1344                 last_dc[current_frame_type] = 
DC_COEFF(i);
 
 1351                               int ystart, 
int yend)
 
 1365     for (y = ystart; y < yend; y++) {
 
 1366         for (x = 0; x < 
width; x++) {
 
 1376                         stride, bounding_values);
 
 1383                         stride, bounding_values);
 
 1389                 if ((x < width - 1) &&
 
 1392                         plane_data + 8 * x + 8,
 
 1393                         stride, bounding_values);
 
 1399                 if ((y < height - 1) &&
 
 1402                         plane_data + 8 * x + 8 * stride,
 
 1403                         stride, bounding_values);
 
 1409         plane_data += 8 * 
stride;
 
 1420     int16_t *dequantizer = s->
qmat[frag->
qpi][inter][
plane];
 
 1426         switch (token & 3) {
 
 1435             i += (token >> 2) & 0x7f;
 
 1440             block[perm[i]] = (token >> 9) * dequantizer[perm[i]];
 
 1444             block[perm[i]] = (token >> 2) * dequantizer[perm[i]];
 
 1455     block[0] = frag->
dc * s->
qmat[0][inter][
plane][0];
 
 1474                                   y_flipped == s->
height ? INT_MAX
 
 1505                                 int motion_y, 
int y)
 
 1509     int border = motion_y & 1;
 
 1517     ref_row = y + (motion_y >> 1);
 
 1518     ref_row = 
FFMAX(
FFABS(ref_row), ref_row + 8 + border);
 
 1531     int motion_x = 0xdeadbeef, motion_y = 0xdeadbeef;
 
 1532     int motion_halfpel_index;
 
 1534     int plane, first_pixel;
 
 1539     for (plane = 0; plane < 3; plane++) {
 
 1560         int do_await = !plane && HAVE_THREADS &&
 
 1569         for (; sb_y < slice_height; sb_y++) {
 
 1571             for (sb_x = 0; sb_x < slice_width; sb_x++) {
 
 1573                 for (j = 0; j < 16; j++) {
 
 1575                     y        = 4 * sb_y + hilbert_offset[j][1];
 
 1576                     fragment = y * fragment_width + x;
 
 1578                     i = fragment_start + fragment;
 
 1581                     if (x >= fragment_width || y >= fragment_height)
 
 1584                     first_pixel = 8 * y * stride + 8 * x;
 
 1589                                             motion_val[fragment][1],
 
 1596                             motion_source = golden_plane;
 
 1598                             motion_source = last_plane;
 
 1600                         motion_source       += first_pixel;
 
 1601                         motion_halfpel_index = 0;
 
 1608                             motion_x = motion_val[fragment][0];
 
 1609                             motion_y = motion_val[fragment][1];
 
 1611                             src_x = (motion_x >> 1) + 8 * x;
 
 1612                             src_y = (motion_y >> 1) + 8 * y;
 
 1614                             motion_halfpel_index = motion_x & 0x01;
 
 1615                             motion_source       += (motion_x >> 1);
 
 1617                             motion_halfpel_index |= (motion_y & 0x01) << 1;
 
 1618                             motion_source        += ((motion_y >> 1) * stride);
 
 1620                             if (src_x < 0 || src_y < 0 ||
 
 1621                                 src_x + 9 >= plane_width ||
 
 1622                                 src_y + 9 >= plane_height) {
 
 1632                                 motion_source = 
temp;
 
 1643                             if (motion_halfpel_index != 3) {
 
 1645                                     output_plane + first_pixel,
 
 1646                                     motion_source, 
stride, 8);
 
 1650                                 int d = (motion_x ^ motion_y) >> 31;
 
 1653                                                                motion_source + stride + 1 + d,
 
 1680                             output_plane + first_pixel,
 
 1681                             last_plane + first_pixel,
 
 1690                                   FFMIN(4 * sb_y + 3, fragment_height - 1));
 
 1710     int y_fragment_count, c_fragment_count;
 
 1722     memset(s-> num_kf_coded_fragment, -1, 
sizeof(s-> num_kf_coded_fragment));
 
 1766     int i, inter, 
plane, ret;
 
 1769     int y_fragment_count, c_fragment_count;
 
 1792     for (i = 0; i < 64; i++) {
 
 1793 #define TRANSPOSE(x) (((x) >> 3) | (((x) & 7) << 3)) 
 1801     for (i = 0; i < 3; i++)
 
 1840         for (i = 0; i < 64; i++) {
 
 1849         for (inter = 0; inter < 2; inter++) {
 
 1850             for (plane = 0; plane < 3; plane++) {
 
 1859         for (i = 0; i < 16; i++) {
 
 1886         for (i = 0; i < 16; i++) {
 
 1967     if (src->
f->
data[0])
 
 1986     int qps_changed = 0, i, err;
 
 1988 #define copy_fields(to, from, start_field, end_field)                         \ 
 1989     memcpy(&to->start_field, &from->start_field,                              \ 
 1990            (char *) &to->end_field - (char *) &to->start_field) 
 1992     if (!
s1->current_frame.f->data[0] ||
 
 2004             int y_fragment_count, c_fragment_count;
 
 2012                    y_fragment_count * 
sizeof(*s->
motion_val[0]));
 
 2014                    c_fragment_count * 
sizeof(*s->
motion_val[1]));
 
 2024         for (i = 0; i < 3; i++) {
 
 2025             if (s->
qps[i] != 
s1->qps[1]) {
 
 2027                 memcpy(&s->
qmat[i], &
s1->qmat[i], 
sizeof(s->
qmat[i]));
 
 2031         if (s->
qps[0] != 
s1->qps[0])
 
 2045                             void *
data, 
int *got_frame,
 
 2050     int buf_size        = avpkt->
size;
 
 2058 #if CONFIG_THEORA_DECODER 
 2064             av_log(avctx, 
AV_LOG_ERROR, 
"midstream reconfiguration with multithreading is unsupported, try -threads 1\n");
 
 2078         } 
else if (type == 2) {
 
 2091                "Header packet passed to frame decoder, skipping\n");
 
 2103     for (i = 0; i < 3; i++)
 
 2110     for (i = s->
nqps; i < 3; i++)
 
 2115                s->
keyframe ? 
"key" : 
"", avctx->frame_number + 1, s->
qps[0]);
 
 2124     for (i = 0; i < s->
nqps; i++)
 
 2148                 if (avctx->frame_number == 0)
 
 2150                            "VP version: %d\n", s->
version);
 
 2156                        "Warning, unsupported keyframe coding type?!\n");
 
 2162                    "vp3: first frame not a keyframe\n");
 
 2200     for (i = 0; i < 3; i++) {
 
 2213     for (i = 0; i < 3; i++) {
 
 2258         ff_dlog(avctx, 
"hti %d hbits %x token %d entry : %d size %d\n",
 
 2289     s-> kf_coded_fragment_list= 
NULL;
 
 2302 #if CONFIG_THEORA_DECODER 
 2310     int visible_width, visible_height, colorspace;
 
 2311     uint8_t offset_x = 0, offset_y = 0;
 
 2321     if (s->
theora < 0x030200) {
 
 2324                "Old (<alpha3) Theora bitstream, flipped image\n");
 
 2332     if (s->
theora >= 0x030200) {
 
 2342         visible_width  + offset_x > s->
width ||
 
 2343         visible_height + offset_y > s->
height) {
 
 2345                "Invalid frame dimensions - w:%d h:%d x:%d y:%d (%dx%d).\n",
 
 2346                visible_width, visible_height, offset_x, offset_y,
 
 2353     if (fps.
num && fps.
den) {
 
 2354         if (fps.
num < 0 || fps.
den < 0) {
 
 2359                   fps.
den, fps.
num, 1 << 30);
 
 2364     if (aspect.
num && aspect.
den) {
 
 2367                   aspect.
num, aspect.
den, 1 << 30);
 
 2371     if (s->
theora < 0x030200)
 
 2378     if (s->
theora >= 0x030200) {
 
 2393         avctx->
width  = visible_width;
 
 2394         avctx->
height = visible_height;
 
 2401     if (colorspace == 1)
 
 2403     else if (colorspace == 2)
 
 2406     if (colorspace == 1 || colorspace == 2) {
 
 2418     int i, 
n, matrices, inter, 
plane;
 
 2423     if (s->
theora >= 0x030200) {
 
 2427             for (i = 0; i < 64; i++)
 
 2431     if (s->
theora >= 0x030200)
 
 2436     for (i = 0; i < 64; i++)
 
 2439     if (s->
theora >= 0x030200)
 
 2444     for (i = 0; i < 64; i++)
 
 2447     if (s->
theora >= 0x030200)
 
 2452     if (matrices > 384) {
 
 2457     for (n = 0; n < matrices; n++)
 
 2458         for (i = 0; i < 64; i++)
 
 2461     for (inter = 0; inter <= 1; inter++) {
 
 2462         for (plane = 0; plane <= 2; plane++) {
 
 2464             if (inter || plane > 0)
 
 2472                     qtj = (3 * inter + plane - 1) / 3;
 
 2473                     plj = (plane + 2) % 3;
 
 2486                     if (i >= matrices) {
 
 2488                                "invalid base matrix index\n");
 
 2509     for (s->
hti = 0; s->
hti < 80; s->
hti++) {
 
 2532     const uint8_t *header_start[3];
 
 2547                                   42, header_start, header_len) < 0) {
 
 2552     for (i = 0; i < 3; i++) {
 
 2553         if (header_len[i] <= 0)
 
 2561         if (!(ptype & 0x80)) {
 
 2584                    "Unknown Theora config packet: %d\n", ptype & ~0x80);
 
 2589                    "%d bits left in packet %X\n",
 
 2591         if (s->
theora < 0x030200)
 
 2604     .
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]
int num_kf_coded_fragment[3]
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 table[]
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. 
#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. 
int * nkf_coded_fragment_list
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)
int * kf_coded_fragment_list
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]