From 3bd062bf7f818bcb410713a4717b65679056ed80 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sat, 9 Mar 2013 21:26:09 -0800 Subject: [PATCH 1/5] vp3: Use hpeldsp instead of dsputil for half-pel functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes vp3 independent of dsputil. Signed-off-by: Martin Storsjö --- configure | 2 +- libavcodec/vp3.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/configure b/configure index ca22569caf..7a892d4d51 100755 --- a/configure +++ b/configure @@ -1661,7 +1661,7 @@ vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel" vc1image_decoder_select="vc1_decoder" vorbis_decoder_select="mdct" vorbis_encoder_select="mdct" -vp3_decoder_select="dsputil vp3dsp videodsp" +vp3_decoder_select="hpeldsp vp3dsp videodsp" vp5_decoder_select="dsputil h264chroma videodsp vp3dsp" vp6_decoder_select="dsputil h264chroma huffman videodsp vp3dsp" vp6a_decoder_select="vp6_decoder" diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 7c26609b09..0211537eb5 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -38,6 +38,7 @@ #include "internal.h" #include "dsputil.h" #include "get_bits.h" +#include "hpeldsp.h" #include "videodsp.h" #include "vp3data.h" #include "vp3dsp.h" @@ -137,7 +138,7 @@ typedef struct Vp3DecodeContext { int keyframe; uint8_t idct_permutation[64]; uint8_t idct_scantable[64]; - DSPContext dsp; + HpelDSPContext hdsp; VideoDSPContext vdsp; VP3DSPContext vp3dsp; DECLARE_ALIGNED(16, int16_t, block)[64]; @@ -1556,7 +1557,7 @@ static void render_slice(Vp3DecodeContext *s, int slice) VP3 source but this would be slower as put_no_rnd_pixels_tab is better optimzed */ if(motion_halfpel_index != 3){ - s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index]( + s->hdsp.put_no_rnd_pixels_tab[1][motion_halfpel_index]( output_plane + first_pixel, motion_source, stride, 8); }else{ @@ -1596,7 +1597,7 @@ static void render_slice(Vp3DecodeContext *s, int slice) } else { /* copy directly from the previous frame */ - s->dsp.put_pixels_tab[1][0]( + s->hdsp.put_pixels_tab[1][0]( output_plane + first_pixel, last_plane + first_pixel, stride, 8); @@ -1695,7 +1696,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx) if (avctx->pix_fmt == AV_PIX_FMT_NONE) avctx->pix_fmt = AV_PIX_FMT_YUV420P; avctx->chroma_sample_location = AVCHROMA_LOC_CENTER; - ff_dsputil_init(&s->dsp, avctx); + ff_hpeldsp_init(&s->hdsp, avctx->flags | CODEC_FLAG_BITEXACT); ff_videodsp_init(&s->vdsp, 8); ff_vp3dsp_init(&s->vp3dsp, avctx->flags); From cb7ecb75635d124984fbdb5a8d08cc44f93662c4 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sun, 10 Mar 2013 06:55:58 -0700 Subject: [PATCH 2/5] vp56: Use hpeldsp instead of dsputil for half-pel functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes vp5 and vp6 independent of dsputil. Signed-off-by: Martin Storsjö --- configure | 4 ++-- libavcodec/vp56.c | 16 ++++++++-------- libavcodec/vp56.h | 3 ++- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 7a892d4d51..9cc9c23f9d 100755 --- a/configure +++ b/configure @@ -1662,8 +1662,8 @@ vc1image_decoder_select="vc1_decoder" vorbis_decoder_select="mdct" vorbis_encoder_select="mdct" vp3_decoder_select="hpeldsp vp3dsp videodsp" -vp5_decoder_select="dsputil h264chroma videodsp vp3dsp" -vp6_decoder_select="dsputil h264chroma huffman videodsp vp3dsp" +vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp" +vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp" vp6a_decoder_select="vp6_decoder" vp6f_decoder_select="vp6_decoder" vp8_decoder_select="h264pred videodsp" diff --git a/libavcodec/vp56.c b/libavcodec/vp56.c index 1a83f00f47..b0ca92622e 100644 --- a/libavcodec/vp56.c +++ b/libavcodec/vp56.c @@ -349,9 +349,9 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src, } else if (deblock_filtering) { /* only need a 12x12 block, but there is no such dsp function, */ /* so copy a 16x12 block */ - s->dsp.put_pixels_tab[0][0](s->edge_emu_buffer, - src + s->block_offset[b] + (dy-2)*stride + (dx-2), - stride, 12); + s->hdsp.put_pixels_tab[0][0](s->edge_emu_buffer, + src + s->block_offset[b] + (dy-2)*stride + (dx-2), + stride, 12); src_block = s->edge_emu_buffer; src_offset = 2 + 2*stride; } else { @@ -376,7 +376,7 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src, src_block+src_offset+overlap_offset, stride, 8); } else { - s->dsp.put_pixels_tab[1][0](dst, src_block+src_offset, stride, 8); + s->hdsp.put_pixels_tab[1][0](dst, src_block+src_offset, stride, 8); } } @@ -419,9 +419,9 @@ static void vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha) for (b=0; bblock_offset[b]; - s->dsp.put_pixels_tab[1][0](frame_current->data[plane] + off, - frame_ref->data[plane] + off, - s->stride[plane], 8); + s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off, + frame_ref->data[plane] + off, + s->stride[plane], 8); s->vp3dsp.idct_add(frame_current->data[plane] + off, s->stride[plane], s->block_coeff[b]); } @@ -656,8 +656,8 @@ av_cold int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha) s->avctx = avctx; avctx->pix_fmt = has_alpha ? AV_PIX_FMT_YUVA420P : AV_PIX_FMT_YUV420P; - ff_dsputil_init(&s->dsp, avctx); ff_h264chroma_init(&s->h264chroma, 8); + ff_hpeldsp_init(&s->hdsp, avctx->flags); ff_videodsp_init(&s->vdsp, 8); ff_vp3dsp_init(&s->vp3dsp, avctx->flags); ff_vp56dsp_init(&s->vp56dsp, avctx->codec->id); diff --git a/libavcodec/vp56.h b/libavcodec/vp56.h index 7fe6cf3eb4..553a625a17 100644 --- a/libavcodec/vp56.h +++ b/libavcodec/vp56.h @@ -29,6 +29,7 @@ #include "vp56data.h" #include "dsputil.h" #include "get_bits.h" +#include "hpeldsp.h" #include "bytestream.h" #include "h264chroma.h" #include "videodsp.h" @@ -95,8 +96,8 @@ typedef struct VP56Model { struct vp56_context { AVCodecContext *avctx; - DSPContext dsp; H264ChromaContext h264chroma; + HpelDSPContext hdsp; VideoDSPContext vdsp; VP3DSPContext vp3dsp; VP56DSPContext vp56dsp; From 8f992dc8c7c50cddaf297eefa3955ce01857e5f2 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sun, 10 Mar 2013 08:19:27 -0700 Subject: [PATCH 3/5] indeo3: Use hpeldsp instead of dsputil for half-pel functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes the Indeo 3 decoder independent of dsputil. Signed-off-by: Martin Storsjö --- configure | 2 +- libavcodec/indeo3.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/configure b/configure index 9cc9c23f9d..4c4d0b95b9 100755 --- a/configure +++ b/configure @@ -1578,7 +1578,7 @@ huffyuv_decoder_select="dsputil" huffyuv_encoder_select="dsputil huffman" iac_decoder_select="dsputil fft mdct sinewin" imc_decoder_select="dsputil fft mdct sinewin" -indeo3_decoder_select="dsputil" +indeo3_decoder_select="hpeldsp" interplay_video_decoder_select="dsputil" jpegls_decoder_select="dsputil golomb" jpegls_encoder_select="golomb" diff --git a/libavcodec/indeo3.c b/libavcodec/indeo3.c index 102b31e06a..2e1bb494a7 100644 --- a/libavcodec/indeo3.c +++ b/libavcodec/indeo3.c @@ -32,9 +32,9 @@ #include "libavutil/imgutils.h" #include "libavutil/intreadwrite.h" #include "avcodec.h" -#include "dsputil.h" #include "bytestream.h" #include "get_bits.h" +#include "hpeldsp.h" #include "internal.h" #include "indeo3data.h" @@ -81,7 +81,7 @@ typedef struct Cell { typedef struct Indeo3DecodeContext { AVCodecContext *avctx; - DSPContext dsp; + HpelDSPContext hdsp; GetBitContext gb; int need_resync; @@ -251,19 +251,19 @@ static int copy_cell(Indeo3DecodeContext *ctx, Plane *plane, Cell *cell) /* copy using 16xH blocks */ if (!((cell->xpos << 2) & 15) && w >= 4) { for (; w >= 4; src += 16, dst += 16, w -= 4) - ctx->dsp.put_no_rnd_pixels_tab[0][0](dst, src, plane->pitch, h); + ctx->hdsp.put_no_rnd_pixels_tab[0][0](dst, src, plane->pitch, h); } /* copy using 8xH blocks */ if (!((cell->xpos << 2) & 7) && w >= 2) { - ctx->dsp.put_no_rnd_pixels_tab[1][0](dst, src, plane->pitch, h); + ctx->hdsp.put_no_rnd_pixels_tab[1][0](dst, src, plane->pitch, h); w -= 2; src += 8; dst += 8; } if (w >= 1) { - ctx->dsp.put_no_rnd_pixels_tab[2][0](dst, src, plane->pitch, h); + ctx->hdsp.put_no_rnd_pixels_tab[2][0](dst, src, plane->pitch, h); w--; src += 4; dst += 4; @@ -335,7 +335,7 @@ if (*data_ptr >= last_ptr) \ #define RLE_BLOCK_COPY \ if (cell->mv_ptr || !skip_flag) \ - ctx->dsp.put_pixels_tab[2][0](dst, ref, row_offset, 4 << v_zoom) + ctx->hdsp.put_pixels_tab[2][0](dst, ref, row_offset, 4 << v_zoom) #define RLE_BLOCK_COPY_8 \ pix64 = AV_RN64A(ref);\ @@ -347,7 +347,7 @@ if (*data_ptr >= last_ptr) \ fill_64(dst, pix64, 8, row_offset) #define RLE_LINES_COPY \ - ctx->dsp.put_pixels_tab[2][0](dst, ref, row_offset, num_lines << v_zoom) + ctx->hdsp.put_pixels_tab[2][0](dst, ref, row_offset, num_lines << v_zoom) #define RLE_LINES_COPY_M10 \ pix64 = AV_RN64A(ref);\ @@ -1047,7 +1047,7 @@ static av_cold int decode_init(AVCodecContext *avctx) build_requant_tab(); - ff_dsputil_init(&ctx->dsp, avctx); + ff_hpeldsp_init(&ctx->hdsp, avctx->flags); allocate_frame_buffers(ctx, avctx); From 0f0a11d5768e50f5bb517c023a7618e00e21840a Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sun, 10 Mar 2013 09:12:01 -0700 Subject: [PATCH 4/5] bink: Use hpeldsp instead of dsputil for half-pel functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- configure | 2 +- libavcodec/bink.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 4c4d0b95b9..030700a1ee 100755 --- a/configure +++ b/configure @@ -1533,7 +1533,7 @@ asv2_decoder_select="dsputil" asv2_encoder_select="dsputil" atrac1_decoder_select="mdct sinewin" atrac3_decoder_select="mdct" -bink_decoder_select="dsputil" +bink_decoder_select="dsputil hpeldsp" binkaudio_dct_decoder_select="mdct rdft dct sinewin" binkaudio_rdft_decoder_select="mdct rdft sinewin" cavs_decoder_select="dsputil golomb h264chroma videodsp" diff --git a/libavcodec/bink.c b/libavcodec/bink.c index 22e13c33dd..33feb42a44 100644 --- a/libavcodec/bink.c +++ b/libavcodec/bink.c @@ -26,6 +26,7 @@ #include "dsputil.h" #include "binkdata.h" #include "binkdsp.h" +#include "hpeldsp.h" #include "internal.h" #include "mathops.h" @@ -112,6 +113,7 @@ typedef struct Bundle { typedef struct BinkContext { AVCodecContext *avctx; DSPContext dsp; + HpelDSPContext hdsp; BinkDSPContext bdsp; AVFrame *last; int version; ///< internal Bink file version @@ -870,7 +872,7 @@ static int binkb_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, if (ref < ref_start || ref + 8*stride > ref_end) { av_log(c->avctx, AV_LOG_WARNING, "Reference block is out of bounds\n"); } else if (ref + 8*stride < dst || ref >= dst + 8*stride) { - c->dsp.put_pixels_tab[1][0](dst, ref, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, ref, stride, 8); } else { put_pixels8x8_overlapped(dst, ref, stride); } @@ -886,7 +888,7 @@ static int binkb_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, if (ref < ref_start || ref + 8 * stride > ref_end) { av_log(c->avctx, AV_LOG_WARNING, "Reference block is out of bounds\n"); } else if (ref + 8*stride < dst || ref >= dst + 8*stride) { - c->dsp.put_pixels_tab[1][0](dst, ref, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, ref, stride, 8); } else { put_pixels8x8_overlapped(dst, ref, stride); } @@ -916,7 +918,7 @@ static int binkb_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, if (ref < ref_start || ref + 8 * stride > ref_end) { av_log(c->avctx, AV_LOG_WARNING, "Reference block is out of bounds\n"); } else if (ref + 8*stride < dst || ref >= dst + 8*stride) { - c->dsp.put_pixels_tab[1][0](dst, ref, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, ref, stride, 8); } else { put_pixels8x8_overlapped(dst, ref, stride); } @@ -1005,7 +1007,7 @@ static int bink_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, } switch (blk) { case SKIP_BLOCK: - c->dsp.put_pixels_tab[1][0](dst, prev, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, prev, stride, 8); break; case SCALED_BLOCK: blk = get_value(c, BINK_SRC_SUB_BLOCK_TYPES); @@ -1076,7 +1078,7 @@ static int bink_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, bx*8 + xoff, by*8 + yoff); return AVERROR_INVALIDDATA; } - c->dsp.put_pixels_tab[1][0](dst, ref, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, ref, stride, 8); break; case RUN_BLOCK: scan = bink_patterns[get_bits(gb, 4)]; @@ -1110,7 +1112,7 @@ static int bink_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, bx*8 + xoff, by*8 + yoff); return AVERROR_INVALIDDATA; } - c->dsp.put_pixels_tab[1][0](dst, ref, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, ref, stride, 8); c->dsp.clear_block(block); v = get_bits(gb, 7); read_residue(gb, block, v); @@ -1130,7 +1132,7 @@ static int bink_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, xoff = get_value(c, BINK_SRC_X_OFF); yoff = get_value(c, BINK_SRC_Y_OFF); ref = prev + xoff + yoff * stride; - c->dsp.put_pixels_tab[1][0](dst, ref, stride, 8); + c->hdsp.put_pixels_tab[1][0](dst, ref, stride, 8); memset(dctblock, 0, sizeof(*dctblock) * 64); dctblock[0] = get_value(c, BINK_SRC_INTER_DC); read_dct_coeffs(gb, dctblock, bink_scan, bink_inter_quant, -1); @@ -1305,6 +1307,7 @@ static av_cold int decode_init(AVCodecContext *avctx) avctx->pix_fmt = c->has_alpha ? AV_PIX_FMT_YUVA420P : AV_PIX_FMT_YUV420P; ff_dsputil_init(&c->dsp, avctx); + ff_hpeldsp_init(&c->hdsp, avctx->flags); ff_binkdsp_init(&c->bdsp); init_bundles(c); From 8071264f2196d71ff49c3944c33f8d3d83f548f1 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sun, 10 Mar 2013 12:58:02 -0700 Subject: [PATCH 5/5] interplayvideo: Use hpeldsp instead of dsputil for half-pel functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes interplayvideo independent of dsputil. Signed-off-by: Martin Storsjö --- configure | 2 +- libavcodec/interplayvideo.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 030700a1ee..a7e8cdf875 100755 --- a/configure +++ b/configure @@ -1579,7 +1579,7 @@ huffyuv_encoder_select="dsputil huffman" iac_decoder_select="dsputil fft mdct sinewin" imc_decoder_select="dsputil fft mdct sinewin" indeo3_decoder_select="hpeldsp" -interplay_video_decoder_select="dsputil" +interplay_video_decoder_select="hpeldsp" jpegls_decoder_select="dsputil golomb" jpegls_encoder_select="golomb" jv_decoder_select="dsputil" diff --git a/libavcodec/interplayvideo.c b/libavcodec/interplayvideo.c index 57035fd11a..b76fe6d50c 100644 --- a/libavcodec/interplayvideo.c +++ b/libavcodec/interplayvideo.c @@ -40,7 +40,7 @@ #include "avcodec.h" #include "bytestream.h" -#include "dsputil.h" +#include "hpeldsp.h" #define BITSTREAM_READER_LE #include "get_bits.h" #include "internal.h" @@ -50,7 +50,7 @@ typedef struct IpvideoContext { AVCodecContext *avctx; - DSPContext dsp; + HpelDSPContext hdsp; AVFrame *second_last_frame; AVFrame *last_frame; const unsigned char *decoding_map; @@ -83,8 +83,8 @@ static int copy_from(IpvideoContext *s, AVFrame *src, AVFrame *dst, int delta_x, av_log(s->avctx, AV_LOG_ERROR, "Invalid decode type, corrupted header?\n"); return AVERROR(EINVAL); } - s->dsp.put_pixels_tab[!s->is_16bpp][0](s->pixel_ptr, src->data[0] + motion_offset, - dst->linesize[0], 8); + s->hdsp.put_pixels_tab[!s->is_16bpp][0](s->pixel_ptr, src->data[0] + motion_offset, + dst->linesize[0], 8); return 0; } @@ -939,7 +939,7 @@ static av_cold int ipvideo_decode_init(AVCodecContext *avctx) s->is_16bpp = avctx->bits_per_coded_sample == 16; avctx->pix_fmt = s->is_16bpp ? AV_PIX_FMT_RGB555 : AV_PIX_FMT_PAL8; - ff_dsputil_init(&s->dsp, avctx); + ff_hpeldsp_init(&s->hdsp, avctx->flags); s->last_frame = av_frame_alloc(); s->second_last_frame = av_frame_alloc();