36 int coded_mb_count = 0;
38 uint32_t *
const mb_type =
s->current_picture_ptr->mb_type;
41 switch (
w->skip_type) {
43 for (mb_y = 0; mb_y <
s->mb_height; mb_y++)
44 for (mb_x = 0; mb_x <
s->mb_width; mb_x++)
45 mb_type[mb_y *
s->mb_stride + mb_x] =
51 for (mb_y = 0; mb_y <
s->mb_height; mb_y++)
52 for (mb_x = 0; mb_x <
s->mb_width; mb_x++)
53 mb_type[mb_y *
s->mb_stride + mb_x] =
57 for (mb_y = 0; mb_y <
s->mb_height; mb_y++) {
61 for (mb_x = 0; mb_x <
s->mb_width; mb_x++)
62 mb_type[mb_y *
s->mb_stride + mb_x] =
65 for (mb_x = 0; mb_x <
s->mb_width; mb_x++)
66 mb_type[mb_y *
s->mb_stride + mb_x] =
72 for (mb_x = 0; mb_x <
s->mb_width; mb_x++) {
76 for (mb_y = 0; mb_y <
s->mb_height; mb_y++)
77 mb_type[mb_y *
s->mb_stride + mb_x] =
80 for (mb_y = 0; mb_y <
s->mb_height; mb_y++)
81 mb_type[mb_y *
s->mb_stride + mb_x] =
88 for (mb_y = 0; mb_y <
s->mb_height; mb_y++)
89 for (mb_x = 0; mb_x <
s->mb_width; mb_x++)
90 coded_mb_count += !
IS_SKIP(mb_type[mb_y *
s->mb_stride + mb_x]);
105 if (
s->avctx->extradata_size < 4)
123 s->slice_height =
s->mb_height /
code;
127 "fps:%d, br:%"PRId64
", qpbit:%d, abt_flag:%d, j_type_bit:%d, "
128 "tl_mv_flag:%d, mbrl_bit:%d, code:%d, loop_filter:%d, "
130 fps,
s->bit_rate,
w->mspel_bit,
w->abt_flag,
w->j_type_bit,
131 w->top_left_mv_flag,
w->per_mb_rl_bit,
code,
s->loop_filter,
141 if (
s->picture_number == 0)
149 s->chroma_qscale =
s->qscale =
get_bits(&
s->gb, 5);
182 if (
w->per_mb_rl_bit)
185 s->per_mb_rl_table = 0;
187 if (!
s->per_mb_rl_table) {
202 s->inter_intra_pred = 0;
206 "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d j_type:%d \n",
207 s->qscale,
s->rl_chroma_table_index,
s->rl_table_index,
208 s->dc_table_index,
s->per_mb_rl_table,
w->j_type);
232 if (
w->per_mb_rl_bit)
235 s->per_mb_rl_table = 0;
237 if (!
s->per_mb_rl_table) {
239 s->rl_chroma_table_index =
s->rl_table_index;
248 s->inter_intra_pred = 0;
253 "rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d mspel:%d "
254 "per_mb_abt:%d abt_type:%d cbp:%d ii:%d\n",
255 s->rl_table_index,
s->rl_chroma_table_index,
256 s->dc_table_index,
s->mv_table_index,
257 s->per_mb_rl_table,
s->qscale,
s->mspel,
258 w->per_mb_abt,
w->abt_type,
w->cbp_table_index,
259 s->inter_intra_pred);
262 s->esc3_level_length = 0;
263 s->esc3_run_length = 0;
268 &
s->gb, &
s->mb_x, &
s->mb_y,
269 2 *
s->qscale, (
s->qscale - 1) | 1,
270 s->loop_filter,
s->low_delay);
273 (
w->s.mb_x >> 1) - 1, (
w->s.mb_y >> 1) - 1,
287 if ((((*mx_ptr) | (*my_ptr)) & 1) &&
s->mspel)
297 int16_t *
A, *
B, *
C, *mot_val;
300 xy =
s->block_index[0];
302 mot_val =
s->current_picture.motion_val[0][xy];
304 A =
s->current_picture.motion_val[0][xy - 1];
305 B =
s->current_picture.motion_val[0][xy -
wrap];
306 C =
s->current_picture.motion_val[0][xy + 2 -
wrap];
308 if (
s->mb_x && !
s->first_slice_line && !
s->mspel &&
w->top_left_mv_flag)
321 }
else if (
type == 1) {
326 if (
s->first_slice_line) {
342 static const int sub_cbp_table[3] = { 2, 3, 1 };
346 s->block_last_index[n] = -1;
350 if (
w->per_block_abt)
352 w->abt_type_table[n] =
w->abt_type;
356 const uint8_t *scantable =
w->abt_scantable[
w->abt_type - 1].scantable;
369 s->block_last_index[n] = 63;
374 s->inter_scantable.permutated);
381 int cbp,
code,
i, ret;
388 if (
IS_SKIP(
s->current_picture.mb_type[
s->mb_y *
s->mb_stride +
s->mb_x])) {
391 for (
i = 0;
i < 6;
i++)
392 s->block_last_index[
i] = -1;
406 s->mb_intra = (~
code & 0x40) >> 6;
416 for (
i = 0;
i < 6;
i++) {
423 cbp |=
val << (5 -
i);
432 s->bdsp.clear_blocks(
s->block[0]);
433 if (
s->per_mb_rl_table) {
435 s->rl_chroma_table_index =
s->rl_table_index;
438 if (
w->abt_flag &&
w->per_mb_abt) {
440 if (!
w->per_block_abt)
443 w->per_block_abt = 0;
453 for (
i = 0;
i < 6;
i++) {
456 "\nerror while decoding inter block: %d x %d (%d)\n",
457 s->mb_x,
s->mb_y,
i);
463 ff_dlog(
s->avctx,
"%d%d ",
s->inter_intra_pred, cbp);
464 ff_dlog(
s->avctx,
"I at %d %d %d %06X\n",
s->mb_x,
s->mb_y,
465 ((cbp & 3) ? 1 : 0) + ((cbp & 0x3C) ? 2 : 0),
468 if (
s->inter_intra_pred) {
472 s->ac_pred,
s->h263_aic_dir,
s->mb_x,
s->mb_y);
474 if (
s->per_mb_rl_table && cbp) {
476 s->rl_chroma_table_index =
s->rl_table_index;
479 s->bdsp.clear_blocks(
s->block[0]);
480 for (
i = 0;
i < 6;
i++) {
483 "\nerror while decoding intra block: %d x %d (%d)\n",
484 s->mb_x,
s->mb_y,
i);
504 w->s.block,
w->s.block_last_index,
505 w->s.mb_width,
w->s.mb_height);
static double val(void *priv, double ch)
Libavcodec external API header.
#define FF_DEBUG_PICT_INFO
static av_cold int init(AVCodecContext *avctx)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, int status)
Add a slice.
static int decode012(GetBitContext *gb)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static int get_bits_left(GetBitContext *gb)
static unsigned int get_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_P
Predicted.
int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int ff_h263_decode_end(AVCodecContext *avctx)
av_cold int ff_intrax8_common_init(AVCodecContext *avctx, IntraX8Context *w, IDCTDSPContext *idsp, int16_t(*block)[64], int block_last_index[12], int mb_width, int mb_height)
Initialize IntraX8 frame decoder.
int ff_intrax8_decode_picture(IntraX8Context *w, Picture *pict, GetBitContext *gb, int *mb_x, int *mb_y, int dquant, int quant_offset, int loopfilter, int lowdelay)
Decode single IntraX8 frame.
av_cold void ff_intrax8_common_end(IntraX8Context *w)
Destroy IntraX8 frame structure.
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static enum AVPixelFormat pix_fmts[]
#define FRAME_SKIPPED
Return value for header parsers if frame is not coded.
#define MV_TYPE_16X16
1 vector for the whole mb
int ff_msmpeg4_coded_block_pred(MpegEncContext *s, int n, uint8_t **coded_block_ptr)
VLC ff_mb_non_intra_vlc[4]
#define INTER_INTRA_VLC_BITS
void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr)
#define MB_NON_INTRA_VLC_BITS
int ff_msmpeg4_decode_block(MpegEncContext *s, int16_t *block, int n, int coded, const uint8_t *scan_table)
#define MB_INTRA_VLC_BITS
int ff_msmpeg4_decode_init(AVCodecContext *avctx)
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static const float pred[4]
main external API structure.
const char * name
Name of the codec implementation.
VLC_TYPE(* table)[2]
code, bits
static av_always_inline int diff(const uint32_t a, const uint32_t b)
av_cold void ff_wmv2_common_init(Wmv2Context *w)
static av_always_inline int wmv2_get_cbp_table_index(MpegEncContext *s, int cbp_index)
static void wmv2_decode_motion(Wmv2Context *w, int *mx_ptr, int *my_ptr)
int ff_wmv2_decode_picture_header(MpegEncContext *s)
static int parse_mb_skip(Wmv2Context *w)
static int decode_ext_header(Wmv2Context *w)
static av_cold int wmv2_decode_end(AVCodecContext *avctx)
int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s)
static int wmv2_decode_inter_block(Wmv2Context *w, int16_t *block, int n, int cbp)
static int16_t * wmv2_pred_motion(Wmv2Context *w, int *px, int *py)
static av_cold int wmv2_decode_init(AVCodecContext *avctx)
int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64])