s->idsp.idct = NULL;
}
- static void wmv2_add_block(Wmv2Context *w, int16_t *block1, uint8_t *dst, int stride, int n){
- MpegEncContext * const s= &w->s;
-
- if (s->block_last_index[n] >= 0) {
- switch(w->abt_type_table[n]){
- case 0:
- w->wdsp.idct_add(dst, stride, block1);
- break;
- case 1:
- ff_simple_idct84_add(dst , stride, block1);
- ff_simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]);
- s->bdsp.clear_block(w->abt_block2[n]);
- break;
- case 2:
- ff_simple_idct48_add(dst , stride, block1);
- ff_simple_idct48_add(dst + 4 , stride, w->abt_block2[n]);
- s->bdsp.clear_block(w->abt_block2[n]);
- break;
- default:
- av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\n");
+ static void wmv2_add_block(Wmv2Context *w, int16_t *block1,
+ uint8_t *dst, int stride, int n)
+ {
+ MpegEncContext *const s = &w->s;
+
+ if (s->block_last_index[n] >= 0) {
+ switch (w->abt_type_table[n]) {
+ case 0:
+ w->wdsp.idct_add(dst, stride, block1);
+ break;
+ case 1:
+ ff_simple_idct84_add(dst, stride, block1);
+ ff_simple_idct84_add(dst + 4 * stride, stride, w->abt_block2[n]);
+ s->bdsp.clear_block(w->abt_block2[n]);
+ break;
+ case 2:
+ ff_simple_idct48_add(dst, stride, block1);
+ ff_simple_idct48_add(dst + 4, stride, w->abt_block2[n]);
+ s->bdsp.clear_block(w->abt_block2[n]);
+ break;
+ default:
+ av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\n");
+ }
}
- }
}
- void ff_wmv2_add_mb(MpegEncContext *s, int16_t block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr){
- Wmv2Context * const w= (Wmv2Context*)s;
+ void ff_wmv2_add_mb(MpegEncContext *s, int16_t block1[6][64],
+ uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr)
+ {
+ Wmv2Context *const w = (Wmv2Context *) s;
- wmv2_add_block(w, block1[0], dest_y , s->linesize, 0);
- wmv2_add_block(w, block1[1], dest_y + 8 , s->linesize, 1);
- wmv2_add_block(w, block1[2], dest_y + 8*s->linesize, s->linesize, 2);
- wmv2_add_block(w, block1[3], dest_y + 8 + 8*s->linesize, s->linesize, 3);
+ wmv2_add_block(w, block1[0], dest_y, s->linesize, 0);
+ wmv2_add_block(w, block1[1], dest_y + 8, s->linesize, 1);
+ wmv2_add_block(w, block1[2], dest_y + 8 * s->linesize, s->linesize, 2);
+ wmv2_add_block(w, block1[3], dest_y + 8 + 8 * s->linesize, s->linesize, 3);
- if(s->flags&CODEC_FLAG_GRAY) return;
+ if (s->flags & CODEC_FLAG_GRAY)
+ return;
- wmv2_add_block(w, block1[4], dest_cb , s->uvlinesize, 4);
- wmv2_add_block(w, block1[5], dest_cr , s->uvlinesize, 5);
+ wmv2_add_block(w, block1[4], dest_cb, s->uvlinesize, 4);
+ wmv2_add_block(w, block1[5], dest_cr, s->uvlinesize, 5);
}
- void ff_mspel_motion(MpegEncContext *s,
- uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr,
- uint8_t **ref_picture, op_pixels_func (*pix_op)[4],
- int motion_x, int motion_y, int h)
+ void ff_mspel_motion(MpegEncContext *s, uint8_t *dest_y,
+ uint8_t *dest_cb, uint8_t *dest_cr,
+ uint8_t **ref_picture, op_pixels_func (*pix_op)[4],
+ int motion_x, int motion_y, int h)
{
- Wmv2Context * const w= (Wmv2Context*)s;
+ Wmv2Context *const w = (Wmv2Context *) s;
uint8_t *ptr;
- int dxy, offset, mx, my, src_x, src_y, v_edge_pos;
- ptrdiff_t linesize, uvlinesize;
+ int dxy, mx, my, src_x, src_y, v_edge_pos;
+ ptrdiff_t offset, linesize, uvlinesize;
- int emu=0;
+ int emu = 0;
- dxy = ((motion_y & 1) << 1) | (motion_x & 1);
- dxy = 2*dxy + w->hshift;
+ dxy = ((motion_y & 1) << 1) | (motion_x & 1);
+ dxy = 2 * dxy + w->hshift;
src_x = s->mb_x * 16 + (motion_x >> 1);
src_y = s->mb_y * 16 + (motion_y >> 1);
w->wdsp.put_mspel_pixels_tab[dxy](dest_y + 8 * linesize, ptr + 8 * linesize, linesize);
w->wdsp.put_mspel_pixels_tab[dxy](dest_y + 8 + 8 * linesize, ptr + 8 + 8 * linesize, linesize);
- if(s->flags&CODEC_FLAG_GRAY) return;
+ if (s->flags & CODEC_FLAG_GRAY)
+ return;
- if (s->out_format == FMT_H263) {
- dxy = 0;
- if ((motion_x & 3) != 0)
- dxy |= 1;
- if ((motion_y & 3) != 0)
- dxy |= 2;
- mx = motion_x >> 2;
- my = motion_y >> 2;
- } else {
- mx = motion_x / 2;
- my = motion_y / 2;
- dxy = ((my & 1) << 1) | (mx & 1);
- mx >>= 1;
- my >>= 1;
- }
+ dxy = 0;
+ if ((motion_x & 3) != 0)
+ dxy |= 1;
+ if ((motion_y & 3) != 0)
+ dxy |= 2;
+ mx = motion_x >> 2;
+ my = motion_y >> 2;
src_x = s->mb_x * 8 + mx;
src_y = s->mb_y * 8 + my;
ff_wmv2_common_init(w);
- avctx->extradata_size= 4;
- avctx->extradata= av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
+ avctx->extradata_size = 4;
- avctx->extradata = av_mallocz(avctx->extradata_size + 10);
++ avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
+ if (!avctx->extradata)
+ return AVERROR(ENOMEM);
encode_ext_header(w);
return 0;
}
- int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number)
+ int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number)
{
- Wmv2Context * const w= (Wmv2Context*)s;
+ Wmv2Context *const w = (Wmv2Context *) s;
put_bits(&s->pb, 1, s->pict_type - 1);
- if(s->pict_type == AV_PICTURE_TYPE_I){
+ if (s->pict_type == AV_PICTURE_TYPE_I)
put_bits(&s->pb, 7, 0);
- }
put_bits(&s->pb, 5, s->qscale);
- s->dc_table_index = 1;
- s->mv_table_index = 1; /* only if P frame */
+ s->dc_table_index = 1;
+ s->mv_table_index = 1; /* only if P frame */
s->per_mb_rl_table = 0;
- s->mspel= 0;
- w->per_mb_abt=0;
- w->abt_type=0;
- w->j_type=0;
+ s->mspel = 0;
+ w->per_mb_abt = 0;
+ w->abt_type = 0;
+ w->j_type = 0;
- assert(s->flipflop_rounding);
+ av_assert0(s->flipflop_rounding);
if (s->pict_type == AV_PICTURE_TYPE_I) {
- av_assert0(s->no_rounding==1);
- if(w->j_type_bit) put_bits(&s->pb, 1, w->j_type);
- assert(s->no_rounding == 1);
++ av_assert0(s->no_rounding == 1);
+ if (w->j_type_bit)
+ put_bits(&s->pb, 1, w->j_type);
- if(w->per_mb_rl_bit) put_bits(&s->pb, 1, s->per_mb_rl_table);
+ if (w->per_mb_rl_bit)
+ put_bits(&s->pb, 1, s->per_mb_rl_table);
- if(!s->per_mb_rl_table){
+ if (!s->per_mb_rl_table) {
ff_msmpeg4_code012(&s->pb, s->rl_chroma_table_index);
ff_msmpeg4_code012(&s->pb, s->rl_table_index);
}
/* motion vector */
ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
ff_msmpeg4_encode_motion(s, motion_x - pred_x,
- motion_y - pred_y);
+ motion_y - pred_y);
+ s->mv_bits += get_bits_diff(s);
} else {
/* compute cbp */
- cbp = 0;
+ cbp = 0;
coded_cbp = 0;
for (i = 0; i < 6; i++) {
int val, pred;
put_bits(&s->pb,
ff_wmv2_inter_table[w->cbp_table_index][cbp][1],
ff_wmv2_inter_table[w->cbp_table_index][cbp][0]);
- }
put_bits(&s->pb, 1, 0); /* no AC prediction yet */
- if(s->inter_intra_pred){
- s->h263_aic_dir=0;
- put_bits(&s->pb, ff_table_inter_intra[s->h263_aic_dir][1], ff_table_inter_intra[s->h263_aic_dir][0]);
+ if (s->inter_intra_pred) {
+ s->h263_aic_dir = 0;
+ put_bits(&s->pb,
+ ff_table_inter_intra[s->h263_aic_dir][1],
+ ff_table_inter_intra[s->h263_aic_dir][0]);
}
+ s->misc_bits += get_bits_diff(s);
}
- for (i = 0; i < 6; i++) {
+ for (i = 0; i < 6; i++)
ff_msmpeg4_encode_block(s, block[i], i);
- }
+ if (s->mb_intra)
+ s->i_tex_bits += get_bits_diff(s);
+ else
+ s->p_tex_bits += get_bits_diff(s);
}
AVCodec ff_wmv2_encoder = {