38 #define V2_INTRA_CBPC_VLC_BITS 3
39 #define V2_MB_TYPE_VLC_BITS 7
41 #define TEX_VLC_BITS 9
43 #define DEFAULT_INTER_INDEX 3
56 *dc_val_ptr= &
s->last_dc[
i];
105 uint32_t *
const mb_type_ptr = &
s->current_picture.mb_type[
s->mb_x +
s->mb_y*
s->mb_stride];
108 if (
s->use_skip_mb_code) {
113 s->block_last_index[
i] = -1;
124 if(
s->msmpeg4_version==2)
128 if(code<0 || code>7){
133 s->mb_intra =
code >>2;
138 if(
s->msmpeg4_version==2)
158 if(
s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
171 if(
s->msmpeg4_version==2){
192 s->bdsp.clear_blocks(
s->block[0]);
193 for (
i = 0;
i < 6;
i++) {
207 uint32_t *
const mb_type_ptr = &
s->current_picture.mb_type[
s->mb_x +
s->mb_y*
s->mb_stride];
213 if (
s->use_skip_mb_code) {
218 s->block_last_index[
i] = -1;
232 s->mb_intra = (~
code & 0x40) >> 6;
247 cbp |=
val << (5 -
i);
253 if(
s->per_mb_rl_table && cbp){
255 s->rl_chroma_table_index =
s->rl_table_index;
265 ff_dlog(
s,
"I at %d %d %d %06X\n",
s->mb_x,
s->mb_y,
266 ((cbp & 3) ? 1 : 0) +((cbp & 0x3C)? 2 : 0),
270 if(
s->inter_intra_pred){
273 s->ac_pred,
s->h263_aic_dir,
s->mb_x,
s->mb_y);
275 if(
s->per_mb_rl_table && cbp){
277 s->rl_chroma_table_index =
s->rl_table_index;
281 s->bdsp.clear_blocks(
s->block[0]);
282 for (
i = 0;
i < 6;
i++) {
297 static volatile int done = 0;
325 mv->table_mv_bits, 1, 1,
326 mv->table_mv_code, 2, 2, 3714);
329 mv->table_mv_bits, 1, 1,
330 mv->table_mv_code, 2, 2, 2694);
382 switch(
s->msmpeg4_version){
399 s->slice_height=
s->mb_height;
416 if(
s->msmpeg4_version==1){
440 if(
s->msmpeg4_version==1){
446 s->slice_height =
code;
454 s->slice_height =
s->mb_height / (
code - 0x16);
457 switch(
s->msmpeg4_version){
460 s->rl_chroma_table_index = 2;
461 s->rl_table_index = 2;
463 s->dc_table_index = 0;
475 else s->per_mb_rl_table= 0;
477 if(!
s->per_mb_rl_table){
483 s->inter_intra_pred= 0;
490 s->rl_chroma_table_index,
496 switch(
s->msmpeg4_version){
499 if(
s->msmpeg4_version==1)
500 s->use_skip_mb_code = 1;
503 s->rl_table_index = 2;
504 s->rl_chroma_table_index =
s->rl_table_index;
505 s->dc_table_index = 0;
506 s->mv_table_index = 0;
511 s->rl_chroma_table_index =
s->rl_table_index;
521 else s->per_mb_rl_table= 0;
523 if(!
s->per_mb_rl_table){
525 s->rl_chroma_table_index =
s->rl_table_index;
531 s->inter_intra_pred= (
s->width*
s->height < 320*240 &&
s->bit_rate<=
II_BITRATE);
539 s->rl_chroma_table_index,
545 if(
s->flipflop_rounding){
551 ff_dlog(
s->avctx,
"%d %"PRId64
" %d %d %d\n",
s->pict_type,
s->bit_rate,
552 s->inter_intra_pred,
s->width,
s->height);
554 s->esc3_level_length= 0;
555 s->esc3_run_length= 0;
563 int length=
s->msmpeg4_version>=3 ? 17 : 16;
565 if(left>=length && left<length+8)
569 if(
s->msmpeg4_version>=3)
572 s->flipflop_rounding= 0;
574 else if(left<length+8)
576 s->flipflop_rounding= 0;
577 if(
s->msmpeg4_version != 2)
592 if(
s->msmpeg4_version<=2){
615 }
else if (
level != 0) {
621 if(
s->msmpeg4_version==1){
635 *dc_val =
level *
s->y_dc_scale;
637 *dc_val =
level *
s->c_dc_scale;
645 int n,
int coded,
const uint8_t *scan_table)
662 if(
s->inter_intra_pred)
level=0;
666 if(
level > 256*
s->y_dc_scale){
668 if(!
s->inter_intra_pred)
return -1;
672 if(
level > 256*
s->c_dc_scale){
674 if(!
s->inter_intra_pred)
return -1;
679 run_diff =
s->msmpeg4_version >= 4;
685 if (dc_pred_dir == 0)
686 scan_table =
s->intra_v_scantable.permutated;
688 scan_table =
s->intra_h_scantable.permutated;
690 scan_table =
s->intra_scantable.permutated;
694 qmul =
s->qscale << 1;
695 qadd = (
s->qscale - 1) | 1;
699 if(
s->msmpeg4_version==2)
705 s->block_last_index[n] =
i;
709 scan_table =
s->inter_scantable.permutated;
721 if (
s->msmpeg4_version==1 || (cache&0x80000000)==0) {
722 if (
s->msmpeg4_version==1 || (cache&0x40000000)==0) {
726 if(
s->msmpeg4_version<=3){
734 if(!
s->esc3_level_length){
736 ff_dlog(
s->avctx,
"ESC-3 %X at %d %d\n",
752 s->esc3_level_length= ll;
798 if (((
i + 192 == 64 &&
level / qmul == -1) ||
825 if(
s->msmpeg4_version>=4 &&
i>0)
i=63;
826 s->block_last_index[n] =
i;
static double val(void *priv, double ch)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Libavcodec external API header.
#define AV_EF_BITSTREAM
detect bitstream specification deviations
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
#define FF_DEBUG_PICT_INFO
static av_cold int init(AVCodecContext *avctx)
#define CONFIG_WMV2_DECODER
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int decode012(GetBitContext *gb)
#define GET_CACHE(name, gb)
#define SKIP_CACHE(name, gb, num)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define CLOSE_READER(name, gb)
static int get_bits_left(GetBitContext *gb)
#define SHOW_UBITS(name, gb, num)
static unsigned int get_bits1(GetBitContext *s)
#define SHOW_SBITS(name, gb, num)
#define OPEN_READER(name, gb)
static void skip_bits(GetBitContext *s, int n)
#define SKIP_BITS(name, gb, num)
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)
#define UPDATE_CACHE(name, gb)
#define LAST_SKIP_BITS(name, gb, num)
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define SKIP_COUNTER(name, gb, num)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#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.
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...
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_P
Predicted.
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
VLC ff_h263_intra_MCBPC_vlc
VLC ff_h263_inter_MCBPC_vlc
int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define INTRA_MCBPC_VLC_BITS
int ff_h263_decode_end(AVCodecContext *avctx)
int ff_h263_decode_init(AVCodecContext *avctx)
#define INTER_MCBPC_VLC_BITS
static const int8_t mv[256][2]
#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
The decoder extracts and fills its parameters even if the frame is skipped due to the skip_frame sett...
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[]
void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n, int dir)
Predict the ac.
#define MV_TYPE_16X16
1 vector for the whole mb
av_cold void ff_msmpeg4_common_init(MpegEncContext *s)
int ff_msmpeg4_pred_dc(MpegEncContext *s, int n, int16_t **dc_val_ptr, int *dir_ptr)
int ff_msmpeg4_coded_block_pred(MpegEncContext *s, int n, uint8_t **coded_block_ptr)
#define INTER_INTRA_VLC_BITS
#define MB_NON_INTRA_VLC_BITS
#define MB_INTRA_VLC_BITS
const uint32_t ff_table1_dc_chroma[120][2]
uint32_t ff_v2_dc_chroma_table[512][2]
uint8_t ff_static_rl_table_store[NB_RL_TABLES][2][2 *MAX_RUN+MAX_LEVEL+3]
uint32_t ff_v2_dc_lum_table[512][2]
VLC ff_msmp4_dc_chroma_vlc[2]
const uint16_t ff_msmp4_mb_i_table[64][2]
const uint32_t ff_table0_dc_lum[120][2]
RLTable ff_rl_table[NB_RL_TABLES]
const uint32_t ff_table0_dc_chroma[120][2]
const uint8_t ff_v2_mb_type[8][2]
VLC ff_msmp4_dc_luma_vlc[2]
const uint8_t ff_table_inter_intra[4][2]
const uint32_t(*const [WMV2_INTER_CBP_TABLE_COUNT] ff_wmv2_inter_table)[2]
const uint32_t ff_table1_dc_lum[120][2]
const uint8_t ff_v2_intra_cbpc[4][2]
#define MSMPEG4_MV_TABLES_NB_ELEMS
static VLC v2_intra_cbpc_vlc
av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
VLC ff_mb_non_intra_vlc[4]
void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr)
static VLC v2_dc_chroma_vlc
static VLC v2_mb_type_vlc
int ff_msmpeg4_decode_block(MpegEncContext *s, int16_t *block, int n, int coded, const uint8_t *scan_table)
static int msmpeg4v1_pred_dc(MpegEncContext *s, int n, int32_t **dc_val_ptr)
static int msmpeg4_decode_dc(MpegEncContext *s, int n, int *dir_ptr)
AVCodec ff_msmpeg4v2_decoder
AVCodec ff_msmpeg4v3_decoder
#define DEFAULT_INTER_INDEX
static int msmpeg4v2_decode_motion(MpegEncContext *s, int pred, int f_code)
static int msmpeg4v12_decode_mb(MpegEncContext *s, int16_t block[6][64])
#define V2_INTRA_CBPC_VLC_BITS
#define V2_MB_TYPE_VLC_BITS
int ff_msmpeg4_decode_ext_header(MpegEncContext *s, int buf_size)
int ff_msmpeg4_decode_picture_header(MpegEncContext *s)
AVCodec ff_msmpeg4v1_decoder
static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64])
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
av_cold void ff_rl_init(RLTable *rl, uint8_t static_store[2][2 *MAX_RUN+MAX_LEVEL+3])
#define INIT_VLC_RL(rl, static_size)
#define INIT_FIRST_VLC_RL(rl, static_size)
static const float pred[4]
static int shift(int a, int b)
main external API structure.
int width
picture width / height.
const char * name
Name of the codec implementation.
int8_t * max_run[2]
encoding & decoding
RL_VLC_ELEM * rl_vlc[32]
decoding only
int8_t * max_level[2]
encoding & decoding
VLC_TYPE(* table)[2]
code, bits
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
int ff_wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64])