X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fwmv2dec.c;h=21fc1cf82e315cdf4d236eff85615d2c8b19bfe7;hb=ec6402b7c595c3ceed6d1b8c1b75c6aa8336e052;hp=b14b5143aaf11f51f556391ab28dae0bf6fb64f7;hpb=09a9b45e4fa77a533391184ace5cadb30c6b83c7;p=ffmpeg diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index b14b5143aaf..21fc1cf82e3 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -1,26 +1,27 @@ /* - * Copyright (c) 2002 The FFmpeg Project + * Copyright (c) 2002 The Libav Project * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avcodec.h" #include "dsputil.h" #include "mpegvideo.h" +#include "h263.h" #include "mathops.h" #include "msmpeg4.h" #include "msmpeg4data.h" @@ -31,7 +32,7 @@ static void parse_mb_skip(Wmv2Context * w){ int mb_x, mb_y; MpegEncContext * const s= &w->s; - uint32_t * const mb_type= s->current_picture_ptr->mb_type; + uint32_t * const mb_type = s->current_picture_ptr->f.mb_type; w->skip_type= get_bits(&s->gb, 2); switch(w->skip_type){ @@ -86,7 +87,7 @@ static int decode_ext_header(Wmv2Context *w){ if(s->avctx->extradata_size<4) return -1; - init_get_bits(&gb, s->avctx->extradata, s->avctx->extradata_size*8); + init_get_bits(&gb, s->avctx->extradata, 32); fps = get_bits(&gb, 5); s->bit_rate = get_bits(&gb, 11)*1024; @@ -115,21 +116,11 @@ int ff_wmv2_decode_picture_header(MpegEncContext * s) Wmv2Context * const w= (Wmv2Context*)s; int code; -#if 0 -{ -int i; -for(i=0; igb.size*8; i++) - printf("%d", get_bits1(&s->gb)); -// get_bits1(&s->gb); -printf("END\n"); -return -1; -} -#endif if(s->picture_number==0) decode_ext_header(w); s->pict_type = get_bits1(&s->gb) + 1; - if(s->pict_type == FF_I_TYPE){ + if(s->pict_type == AV_PICTURE_TYPE_I){ code = get_bits(&s->gb, 7); av_log(s->avctx, AV_LOG_DEBUG, "I7:%X/\n", code); } @@ -144,7 +135,7 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext * s) { Wmv2Context * const w= (Wmv2Context*)s; - if (s->pict_type == FF_I_TYPE) { + if (s->pict_type == AV_PICTURE_TYPE_I) { if(w->j_type_bit) w->j_type= get_bits1(&s->gb); else w->j_type= 0; //FIXME check @@ -266,11 +257,11 @@ static int16_t *wmv2_pred_motion(Wmv2Context *w, int *px, int *py){ wrap = s->b8_stride; xy = s->block_index[0]; - mot_val = s->current_picture.motion_val[0][xy]; + mot_val = s->current_picture.f.motion_val[0][xy]; - A = s->current_picture.motion_val[0][xy - 1]; - B = s->current_picture.motion_val[0][xy - wrap]; - C = s->current_picture.motion_val[0][xy + 2 - wrap]; + A = s->current_picture.f.motion_val[0][xy - 1]; + B = s->current_picture.f.motion_val[0][xy - wrap]; + C = s->current_picture.f.motion_val[0][xy + 2 - wrap]; if(s->mb_x && !s->first_slice_line && !s->mspel && w->top_left_mv_flag) diff= FFMAX(FFABS(A[0] - B[0]), FFABS(A[1] - B[1])); @@ -315,10 +306,6 @@ static inline int wmv2_decode_inter_block(Wmv2Context *w, DCTELEM *block, int n, if(w->per_block_abt) w->abt_type= decode012(&s->gb); -#if 0 - if(w->per_block_abt) - printf("B%d", w->abt_type); -#endif w->abt_type_table[n]= w->abt_type; if(w->abt_type){ @@ -355,8 +342,8 @@ int ff_wmv2_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) if(w->j_type) return 0; - if (s->pict_type == FF_P_TYPE) { - if(IS_SKIP(s->current_picture.mb_type[s->mb_y * s->mb_stride + s->mb_x])){ + if (s->pict_type == AV_PICTURE_TYPE_P) { + if (IS_SKIP(s->current_picture.f.mb_type[s->mb_y * s->mb_stride + s->mb_x])) { /* skip mb */ s->mb_intra = 0; for(i=0;i<6;i++) @@ -432,7 +419,7 @@ int ff_wmv2_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) } } } else { -//if(s->pict_type==FF_P_TYPE) +//if(s->pict_type==AV_PICTURE_TYPE_P) // printf("%d%d ", s->inter_intra_pred, cbp); //printf("I at %d %d %d %06X\n", s->mb_x, s->mb_y, ((cbp&3)? 1 : 0) +((cbp&0x3C)? 2 : 0), show_bits(&s->gb, 24)); s->ac_pred = get_bits1(&s->gb); @@ -465,7 +452,7 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx){ avctx->idct_algo=FF_IDCT_WMV2; } - if(ff_h263_decode_init(avctx) < 0) + if(ff_msmpeg4_decode_init(avctx) < 0) return -1; ff_wmv2_common_init(w); @@ -483,16 +470,16 @@ static av_cold int wmv2_decode_end(AVCodecContext *avctx) return ff_h263_decode_end(avctx); } -AVCodec wmv2_decoder = { - "wmv2", - CODEC_TYPE_VIDEO, - CODEC_ID_WMV2, - sizeof(Wmv2Context), - wmv2_decode_init, - NULL, - wmv2_decode_end, - ff_h263_decode_frame, - CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, +AVCodec ff_wmv2_decoder = { + .name = "wmv2", + .type = AVMEDIA_TYPE_VIDEO, + .id = CODEC_ID_WMV2, + .priv_data_size = sizeof(Wmv2Context), + .init = wmv2_decode_init, + .close = wmv2_decode_end, + .decode = ff_h263_decode_frame, + .capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, + .max_lowres = 3, .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 8"), .pix_fmts= ff_pixfmt_list_420, };