Home | History | Annotate | Download | only in decoder

Lines Matching refs:pbi

41 void vp8cx_init_de_quantizer(VP8D_COMP *pbi)
44 VP8_COMMON *const pc = & pbi->common;
58 void vp8_mb_init_dequantizer(VP8D_COMP *pbi, MACROBLOCKD *xd)
63 VP8_COMMON *const pc = & pbi->common;
97 static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
113 eobtotal = vp8_decode_mb_tokens(pbi, xd);
122 vp8_mb_init_dequantizer(pbi, xd);
127 if(pbi->ec_active)
133 throw_residual = (!pbi->independent_partitions &&
134 pbi->frame_corrupt_residual);
137 if ((mb_idx >= pbi->mvs_corrupt_from_mb || throw_residual))
142 pbi->frame_corrupt_residual = 1;
500 static void decode_mb_rows(VP8D_COMP *pbi)
502 VP8_COMMON *const pc = & pbi->common;
503 MACROBLOCKD *const xd = & pbi->mb;
514 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME];
530 YV12_BUFFER_CONFIG *this_fb = pbi->dec_fb_ref[i];
557 xd->current_bc = & pbi->mbc[ibc];
607 int corrupt_residual = (!pbi->independent_partitions &&
608 pbi->frame_corrupt_residual) ||
610 if (pbi->ec_active &&
650 decode_macroblock(pbi, xd, mb_idx);
755 static unsigned int read_partition_size(VP8D_COMP *pbi,
759 if (pbi->decrypt_cb)
761 pbi->decrypt_cb(pbi->decrypt_state, cx_size, temp, 3);
775 VP8D_COMP *pbi,
783 VP8_COMMON* pc = &pbi->common;
795 partition_size = read_partition_size(pbi, partition_size_ptr);
796 else if (pbi->ec_active)
811 if (pbi->ec_active)
822 static void setup_token_decoder(VP8D_COMP *pbi,
825 vp8_reader *bool_decoder = &pbi->mbc[0];
829 const unsigned char *first_fragment_end = pbi->fragments.ptrs[0] +
830 pbi->fragments.sizes[0];
833 (TOKEN_PARTITION)vp8_read_literal(&pbi->mbc[8], 2);
834 if (!vp8dx_bool_error(&pbi->mbc[8]))
835 pbi->common.multi_token_partition = multi_token_partition;
836 num_token_partitions = 1 << pbi->common.multi_token_partition;
840 for (fragment_idx = 0; fragment_idx < pbi->fragments.count; ++fragment_idx)
842 unsigned int fragment_size = pbi->fragments.sizes[fragment_idx];
843 const unsigned char *fragment_end = pbi->fragments.ptrs[fragment_idx] +
851 pbi->fragments.ptrs[0] + 3 * (num_token_partitions - 1);
855 pbi->fragments.sizes[0] = (unsigned int)ext_first_part_size;
859 pbi->fragments.ptrs[fragment_idx] = pbi->fragments.ptrs[0] +
860 pbi->fragments.sizes[0];
867 pbi,
869 pbi->fragments.ptrs[fragment_idx],
874 pbi->fragments.sizes[fragment_idx] = (unsigned int)partition_size;
882 pbi->fragments.ptrs[fragment_idx] =
883 pbi->fragments.ptrs[fragment_idx - 1] + partition_size;
888 pbi->fragments.count = num_token_partitions + 1;
890 for (partition_idx = 1; partition_idx < pbi->fragments.count; ++partition_idx)
893 pbi->fragments.ptrs[partition_idx],
894 pbi->fragments.sizes[partition_idx],
895 pbi->decrypt_cb, pbi->decrypt_state))
896 vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,
905 if (pbi->decoding_thread_count > num_token_partitions - 1)
906 pbi->decoding_thread_count = num_token_partitions - 1;
911 static void init_frame(VP8D_COMP *pbi)
913 VP8_COMMON *const pc = & pbi->common;
914 MACROBLOCKD *const xd = & pbi->mb;
963 if (pbi->decoded_key_frame && pbi->ec_enabled && !pbi->ec_active)
964 pbi->ec_active = 1;
980 int vp8_decode_frame(VP8D_COMP *pbi)
982 vp8_reader *const bc = &pbi->mbc[8];
983 VP8_COMMON *const pc = &pbi->common;
984 MACROBLOCKD *const xd = &pbi->mb;
985 const unsigned char *data = pbi->fragments.ptrs[0];
986 const unsigned char *data_end = data + pbi->fragments.sizes[0];
992 int prev_independent_partitions = pbi->independent_partitions;
994 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME];
1002 if (!pbi->ec_active)
1020 if (pbi->decrypt_cb)
1023 pbi->decrypt_cb(pbi->decrypt_state, data, clear_buffer, n);
1033 if (!pbi->ec_active &&
1051 if (!pbi->ec_active || data + 3 < data_end)
1062 if (!pbi->ec_active || data + 6 < data_end)
1078 if ((!pbi->decoded_key_frame && pc->frame_type != KEY_FRAME))
1083 init_frame(pbi);
1086 pbi->decrypt_cb, pbi->decrypt_state))
1193 setup_token_decoder(pbi, data + first_partition_length_in_bytes);
1195 xd->current_bc = &pbi->mbc[0];
1211 vp8cx_init_de_quantizer(pbi);
1214 vp8_mb_init_dequantizer(pbi, &pbi->mb);
1228 if (pbi->ec_active && xd->corrupted)
1236 if (pbi->ec_active && xd->corrupted)
1249 if (pbi->ec_active && xd->corrupted)
1261 if (pbi->ec_active && xd->corrupted)
1275 if (pbi->ec_active && xd->corrupted)
1288 if (pbi->ec_active && xd->corrupted)
1306 pbi->independent_partitions = 1;
1323 pbi->independent_partitions = 0;
1331 vp8_decode_mode_mvs(pbi);
1334 if (pbi->ec_active &&
1335 pbi->mvs_corrupt_from_mb < (unsigned int)pc->mb_cols * pc->mb_rows)
1339 vp8_estimate_missing_mvs(pbi);
1344 pbi->frame_corrupt_residual = 0;
1347 if (pbi->b_multithreaded_rd && pc->multi_token_partition != ONE_PARTITION)
1350 vp8mt_decode_mb_rows(pbi, xd);
1352 for (thread = 0; thread < pbi->decoding_thread_count; ++thread)
1353 corrupt_tokens |= pbi->mb_row_di[thread].mbd.corrupted;
1358 decode_mb_rows(pbi);
1368 if (!pbi->decoded_key_frame)
1372 pbi->decoded_key_frame = 1;
1374 vpx_internal_error(&pbi->common.error, VPX_CODEC_CORRUPT_FRAME,
1378 /* vpx_log("Decoder: Frame Decoded, Size Roughly:%d bytes \n",bc->pos+pbi->bc2.pos); */
1383 pbi->independent_partitions = prev_independent_partitions;
1389 unsigned int size = pbi->bc2.pos + pbi->bc.pos + 8;
1391 fwrite((void *) pbi->Source, size, 1, f);