X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fwmv2.c;h=7b1ea57c05ddcbd84e38a8cd85c1499694f91d29;hb=436ced244fadcde2c0b925627920e84b25482542;hp=b3307763a090654bd7edbd11caf94f168d81bbcf;hpb=458446acfa1441d283dacf9e6e545beb083b8bb0;p=ffmpeg diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c index b3307763a09..7b1ea57c05d 100644 --- a/libavcodec/wmv2.c +++ b/libavcodec/wmv2.c @@ -19,6 +19,7 @@ */ #include "avcodec.h" +#include "idctdsp.h" #include "mpegvideo.h" #include "msmpeg4data.h" #include "simple_idct.h" @@ -28,25 +29,26 @@ av_cold void ff_wmv2_common_init(Wmv2Context * w){ MpegEncContext * const s= &w->s; + ff_blockdsp_init(&s->bdsp, s->avctx); ff_wmv2dsp_init(&w->wdsp); - s->dsp.idct_permutation_type = w->wdsp.idct_perm; - ff_init_scantable_permutation(s->dsp.idct_permutation, + s->idsp.perm_type = w->wdsp.idct_perm; + ff_init_scantable_permutation(s->idsp.idct_permutation, w->wdsp.idct_perm); - ff_init_scantable(s->dsp.idct_permutation, &w->abt_scantable[0], + ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[0], ff_wmv2_scantableA); - ff_init_scantable(s->dsp.idct_permutation, &w->abt_scantable[1], + ff_init_scantable(s->idsp.idct_permutation, &w->abt_scantable[1], ff_wmv2_scantableB); - ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable, + ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_wmv1_scantable[1]); - ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, + ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_wmv1_scantable[2]); - ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, + ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_wmv1_scantable[3]); - ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable, + ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_wmv1_scantable[0]); - s->dsp.idct_put = w->wdsp.idct_put; - s->dsp.idct_add = w->wdsp.idct_add; - s->dsp.idct = NULL; + s->idsp.idct_put = w->wdsp.idct_put; + s->idsp.idct_add = w->wdsp.idct_add; + s->idsp.idct = NULL; } static void wmv2_add_block(Wmv2Context *w, int16_t *block1, uint8_t *dst, int stride, int n){ @@ -60,12 +62,12 @@ static void wmv2_add_block(Wmv2Context *w, int16_t *block1, uint8_t *dst, int st case 1: ff_simple_idct84_add(dst , stride, block1); ff_simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]); - s->dsp.clear_block(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->dsp.clear_block(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"); @@ -117,24 +119,22 @@ void ff_mspel_motion(MpegEncContext *s, uvlinesize = s->uvlinesize; ptr = ref_picture[0] + (src_y * linesize) + src_x; - if(s->flags&CODEC_FLAG_EMU_EDGE){ - if(src_x<1 || src_y<1 || src_x + 17 >= s->h_edge_pos - || src_y + h+1 >= v_edge_pos){ - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ptr - 1 - s->linesize, - s->linesize, s->linesize, - 19, 19, - src_x - 1, src_y - 1, - s->h_edge_pos, s->v_edge_pos); - ptr= s->edge_emu_buffer + 1 + s->linesize; - emu=1; - } + if(src_x<1 || src_y<1 || src_x + 17 >= s->h_edge_pos + || src_y + h+1 >= v_edge_pos){ + s->vdsp.emulated_edge_mc(s->edge_emu_buffer, + ptr - 1 - s->linesize, + s->linesize, s->linesize, + 19, 19, + src_x - 1, src_y - 1, + s->h_edge_pos, s->v_edge_pos); + ptr= s->edge_emu_buffer + 1 + s->linesize; + emu=1; } - s->dsp.put_mspel_pixels_tab[dxy](dest_y , ptr , linesize); - s->dsp.put_mspel_pixels_tab[dxy](dest_y+8 , ptr+8 , linesize); - s->dsp.put_mspel_pixels_tab[dxy](dest_y +8*linesize, ptr +8*linesize, linesize); - s->dsp.put_mspel_pixels_tab[dxy](dest_y+8+8*linesize, ptr+8+8*linesize, linesize); + w->wdsp.put_mspel_pixels_tab[dxy](dest_y, ptr, linesize); + w->wdsp.put_mspel_pixels_tab[dxy](dest_y + 8, ptr + 8, linesize); + 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;