This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 34c9438bbe6ca2dd6014853055f514a04a9eb16d Author: Andreas Rheinhardt <[email protected]> AuthorDate: Wed Jun 25 08:44:18 2025 +0200 Commit: Andreas Rheinhardt <[email protected]> CommitDate: Fri Jan 2 18:39:48 2026 +0100 avcodec/wmv2dsp: Move mspel motion functions out of WMV2DSPContext They are only used by the decoder (which has them twice, because the IntraX8Context contains a WMV2DSPContext whose put_mspel_pixels functions were unused), so move them there. Signed-off-by: Andreas Rheinhardt <[email protected]> --- configure | 3 +- libavcodec/wmv2dec.c | 137 ++++++++++++++++++++++++++++++++++++++++++++++++--- libavcodec/wmv2dsp.c | 119 -------------------------------------------- libavcodec/wmv2dsp.h | 5 +- 4 files changed, 133 insertions(+), 131 deletions(-) diff --git a/configure b/configure index 301a3e5e3e..74e0345d88 100755 --- a/configure +++ b/configure @@ -2963,7 +2963,6 @@ msmpeg4dec_select="h263_decoder" msmpeg4enc_select="h263_encoder" vc1dsp_select="h264chroma startcode" vvc_sei_select="atsc_a53 golomb" -wmv2dsp_select="qpeldsp" # decoders / encoders aac_decoder_select="adts_header mpeg4audio sinewin" @@ -3225,7 +3224,7 @@ wmav2_encoder_select="sinewin wma_freqs" wmavoice_decoder_select="lsp sinewin" wmv1_decoder_select="msmpeg4dec" wmv1_encoder_select="msmpeg4enc" -wmv2_decoder_select="blockdsp error_resilience idctdsp intrax8 msmpeg4dec videodsp wmv2dsp" +wmv2_decoder_select="blockdsp error_resilience idctdsp intrax8 msmpeg4dec qpeldsp videodsp wmv2dsp" wmv2_encoder_select="msmpeg4enc wmv2dsp" wmv3_decoder_select="vc1_decoder" wmv3image_decoder_select="wmv3_decoder" diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index 554b784a5d..749a8608a2 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -32,6 +32,7 @@ #include "msmpeg4.h" #include "msmpeg4_vc1_data.h" #include "msmpeg4dec.h" +#include "qpeldsp.h" #include "simple_idct.h" #include "wmv2.h" #include "wmv2data.h" @@ -41,6 +42,9 @@ typedef struct WMV2DecContext { MSMP4DecContext ms; WMV2Context common; IntraX8Context x8; + + qpel_mc_func put_mspel_pixels_tab[8]; + int j_type_bit; int j_type; int abt_flag; @@ -56,20 +60,139 @@ typedef struct WMV2DecContext { DECLARE_ALIGNED(32, int16_t, abt_block2)[6][64]; } WMV2DecContext; +static void wmv2_mspel8_h_lowpass(uint8_t *dst, const uint8_t *src, + int dstStride, int srcStride, int h) +{ + const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP; + + for (int i = 0; i < h; i++) { + dst[0] = cm[(9 * (src[0] + src[1]) - (src[-1] + src[2]) + 8) >> 4]; + dst[1] = cm[(9 * (src[1] + src[2]) - (src[0] + src[3]) + 8) >> 4]; + dst[2] = cm[(9 * (src[2] + src[3]) - (src[1] + src[4]) + 8) >> 4]; + dst[3] = cm[(9 * (src[3] + src[4]) - (src[2] + src[5]) + 8) >> 4]; + dst[4] = cm[(9 * (src[4] + src[5]) - (src[3] + src[6]) + 8) >> 4]; + dst[5] = cm[(9 * (src[5] + src[6]) - (src[4] + src[7]) + 8) >> 4]; + dst[6] = cm[(9 * (src[6] + src[7]) - (src[5] + src[8]) + 8) >> 4]; + dst[7] = cm[(9 * (src[7] + src[8]) - (src[6] + src[9]) + 8) >> 4]; + dst += dstStride; + src += srcStride; + } +} + +static void wmv2_mspel8_v_lowpass(uint8_t *dst, const uint8_t *src, + int dstStride, int srcStride, int w) +{ + const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP; + + for (int i = 0; i < w; i++) { + const int src_1 = src[-srcStride]; + const int src0 = src[0]; + const int src1 = src[srcStride]; + const int src2 = src[2 * srcStride]; + const int src3 = src[3 * srcStride]; + const int src4 = src[4 * srcStride]; + const int src5 = src[5 * srcStride]; + const int src6 = src[6 * srcStride]; + const int src7 = src[7 * srcStride]; + const int src8 = src[8 * srcStride]; + const int src9 = src[9 * srcStride]; + dst[0 * dstStride] = cm[(9 * (src0 + src1) - (src_1 + src2) + 8) >> 4]; + dst[1 * dstStride] = cm[(9 * (src1 + src2) - (src0 + src3) + 8) >> 4]; + dst[2 * dstStride] = cm[(9 * (src2 + src3) - (src1 + src4) + 8) >> 4]; + dst[3 * dstStride] = cm[(9 * (src3 + src4) - (src2 + src5) + 8) >> 4]; + dst[4 * dstStride] = cm[(9 * (src4 + src5) - (src3 + src6) + 8) >> 4]; + dst[5 * dstStride] = cm[(9 * (src5 + src6) - (src4 + src7) + 8) >> 4]; + dst[6 * dstStride] = cm[(9 * (src6 + src7) - (src5 + src8) + 8) >> 4]; + dst[7 * dstStride] = cm[(9 * (src7 + src8) - (src6 + src9) + 8) >> 4]; + src++; + dst++; + } +} + +static void put_mspel8_mc10_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + uint8_t half[64]; + + wmv2_mspel8_h_lowpass(half, src, 8, stride, 8); + ff_put_pixels8_l2_8(dst, src, half, stride, stride, 8, 8); +} + +static void put_mspel8_mc20_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + wmv2_mspel8_h_lowpass(dst, src, stride, stride, 8); +} + +static void put_mspel8_mc30_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + uint8_t half[64]; + + wmv2_mspel8_h_lowpass(half, src, 8, stride, 8); + ff_put_pixels8_l2_8(dst, src + 1, half, stride, stride, 8, 8); +} + +static void put_mspel8_mc02_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + wmv2_mspel8_v_lowpass(dst, src, stride, stride, 8); +} + +static void put_mspel8_mc12_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + uint8_t halfH[88]; + uint8_t halfV[64]; + uint8_t halfHV[64]; + + wmv2_mspel8_h_lowpass(halfH, src - stride, 8, stride, 11); + wmv2_mspel8_v_lowpass(halfV, src, 8, stride, 8); + wmv2_mspel8_v_lowpass(halfHV, halfH + 8, 8, 8, 8); + ff_put_pixels8_l2_8(dst, halfV, halfHV, stride, 8, 8, 8); +} + +static void put_mspel8_mc32_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + uint8_t halfH[88]; + uint8_t halfV[64]; + uint8_t halfHV[64]; + + wmv2_mspel8_h_lowpass(halfH, src - stride, 8, stride, 11); + wmv2_mspel8_v_lowpass(halfV, src + 1, 8, stride, 8); + wmv2_mspel8_v_lowpass(halfHV, halfH + 8, 8, 8, 8); + ff_put_pixels8_l2_8(dst, halfV, halfHV, stride, 8, 8, 8); +} + +static void put_mspel8_mc22_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) +{ + uint8_t halfH[88]; + + wmv2_mspel8_h_lowpass(halfH, src - stride, 8, stride, 11); + wmv2_mspel8_v_lowpass(dst, halfH + 8, stride, 8, 8); +} + +static av_cold void wmv2_mspel_init(WMV2DecContext *w) +{ + w->put_mspel_pixels_tab[0] = ff_put_pixels8x8_c; + w->put_mspel_pixels_tab[1] = put_mspel8_mc10_c; + w->put_mspel_pixels_tab[2] = put_mspel8_mc20_c; + w->put_mspel_pixels_tab[3] = put_mspel8_mc30_c; + w->put_mspel_pixels_tab[4] = put_mspel8_mc02_c; + w->put_mspel_pixels_tab[5] = put_mspel8_mc12_c; + w->put_mspel_pixels_tab[6] = put_mspel8_mc22_c; + w->put_mspel_pixels_tab[7] = put_mspel8_mc32_c; +} + void ff_mspel_motion(MPVContext *const s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, uint8_t *const *ref_picture, const op_pixels_func (*pix_op)[4], int motion_x, int motion_y, int h) { - WMV2Context *const w = s->private_ctx; + WMV2DecContext *const w = (WMV2DecContext *) s; const uint8_t *ptr; int dxy, mx, my, src_x, src_y, v_edge_pos; ptrdiff_t offset, linesize, uvlinesize; int emu = 0; dxy = ((motion_y & 1) << 1) | (motion_x & 1); - dxy = 2 * dxy + w->hshift; + dxy = 2 * dxy + w->common.hshift; src_x = s->mb_x * 16 + (motion_x >> 1); src_y = s->mb_y * 16 + (motion_y >> 1); @@ -97,10 +220,10 @@ void ff_mspel_motion(MPVContext *const s, uint8_t *dest_y, emu = 1; } - 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); + w->put_mspel_pixels_tab[dxy](dest_y, ptr, linesize); + w->put_mspel_pixels_tab[dxy](dest_y + 8, ptr + 8, linesize); + w->put_mspel_pixels_tab[dxy](dest_y + 8 * linesize, ptr + 8 * linesize, linesize); + w->put_mspel_pixels_tab[dxy](dest_y + 8 + 8 * linesize, ptr + 8 + 8 * linesize, linesize); if (s->avctx->flags & AV_CODEC_FLAG_GRAY) return; @@ -659,6 +782,8 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx) MpegEncContext *const s = &h->c; int ret; + wmv2_mspel_init(w); + s->private_ctx = &w->common; if ((ret = ff_msmpeg4_decode_init(avctx)) < 0) diff --git a/libavcodec/wmv2dsp.c b/libavcodec/wmv2dsp.c index 4ad8a596b8..2616f133ba 100644 --- a/libavcodec/wmv2dsp.c +++ b/libavcodec/wmv2dsp.c @@ -21,7 +21,6 @@ #include "libavutil/common.h" #include "idctdsp.h" #include "mathops.h" -#include "qpeldsp.h" #include "wmv2dsp.h" #define W0 2048 @@ -140,130 +139,12 @@ static void wmv2_idct_put_c(uint8_t *dest, ptrdiff_t line_size, int16_t *block) } } -static void wmv2_mspel8_h_lowpass(uint8_t *dst, const uint8_t *src, - int dstStride, int srcStride, int h) -{ - const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP; - int i; - - for (i = 0; i < h; i++) { - dst[0] = cm[(9 * (src[0] + src[1]) - (src[-1] + src[2]) + 8) >> 4]; - dst[1] = cm[(9 * (src[1] + src[2]) - (src[0] + src[3]) + 8) >> 4]; - dst[2] = cm[(9 * (src[2] + src[3]) - (src[1] + src[4]) + 8) >> 4]; - dst[3] = cm[(9 * (src[3] + src[4]) - (src[2] + src[5]) + 8) >> 4]; - dst[4] = cm[(9 * (src[4] + src[5]) - (src[3] + src[6]) + 8) >> 4]; - dst[5] = cm[(9 * (src[5] + src[6]) - (src[4] + src[7]) + 8) >> 4]; - dst[6] = cm[(9 * (src[6] + src[7]) - (src[5] + src[8]) + 8) >> 4]; - dst[7] = cm[(9 * (src[7] + src[8]) - (src[6] + src[9]) + 8) >> 4]; - dst += dstStride; - src += srcStride; - } -} - -static void wmv2_mspel8_v_lowpass(uint8_t *dst, const uint8_t *src, - int dstStride, int srcStride, int w) -{ - const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP; - int i; - - for (i = 0; i < w; i++) { - const int src_1 = src[-srcStride]; - const int src0 = src[0]; - const int src1 = src[srcStride]; - const int src2 = src[2 * srcStride]; - const int src3 = src[3 * srcStride]; - const int src4 = src[4 * srcStride]; - const int src5 = src[5 * srcStride]; - const int src6 = src[6 * srcStride]; - const int src7 = src[7 * srcStride]; - const int src8 = src[8 * srcStride]; - const int src9 = src[9 * srcStride]; - dst[0 * dstStride] = cm[(9 * (src0 + src1) - (src_1 + src2) + 8) >> 4]; - dst[1 * dstStride] = cm[(9 * (src1 + src2) - (src0 + src3) + 8) >> 4]; - dst[2 * dstStride] = cm[(9 * (src2 + src3) - (src1 + src4) + 8) >> 4]; - dst[3 * dstStride] = cm[(9 * (src3 + src4) - (src2 + src5) + 8) >> 4]; - dst[4 * dstStride] = cm[(9 * (src4 + src5) - (src3 + src6) + 8) >> 4]; - dst[5 * dstStride] = cm[(9 * (src5 + src6) - (src4 + src7) + 8) >> 4]; - dst[6 * dstStride] = cm[(9 * (src6 + src7) - (src5 + src8) + 8) >> 4]; - dst[7 * dstStride] = cm[(9 * (src7 + src8) - (src6 + src9) + 8) >> 4]; - src++; - dst++; - } -} - -static void put_mspel8_mc10_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - uint8_t half[64]; - - wmv2_mspel8_h_lowpass(half, src, 8, stride, 8); - ff_put_pixels8_l2_8(dst, src, half, stride, stride, 8, 8); -} - -static void put_mspel8_mc20_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - wmv2_mspel8_h_lowpass(dst, src, stride, stride, 8); -} - -static void put_mspel8_mc30_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - uint8_t half[64]; - - wmv2_mspel8_h_lowpass(half, src, 8, stride, 8); - ff_put_pixels8_l2_8(dst, src + 1, half, stride, stride, 8, 8); -} - -static void put_mspel8_mc02_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - wmv2_mspel8_v_lowpass(dst, src, stride, stride, 8); -} - -static void put_mspel8_mc12_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - uint8_t halfH[88]; - uint8_t halfV[64]; - uint8_t halfHV[64]; - - wmv2_mspel8_h_lowpass(halfH, src - stride, 8, stride, 11); - wmv2_mspel8_v_lowpass(halfV, src, 8, stride, 8); - wmv2_mspel8_v_lowpass(halfHV, halfH + 8, 8, 8, 8); - ff_put_pixels8_l2_8(dst, halfV, halfHV, stride, 8, 8, 8); -} - -static void put_mspel8_mc32_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - uint8_t halfH[88]; - uint8_t halfV[64]; - uint8_t halfHV[64]; - - wmv2_mspel8_h_lowpass(halfH, src - stride, 8, stride, 11); - wmv2_mspel8_v_lowpass(halfV, src + 1, 8, stride, 8); - wmv2_mspel8_v_lowpass(halfHV, halfH + 8, 8, 8, 8); - ff_put_pixels8_l2_8(dst, halfV, halfHV, stride, 8, 8, 8); -} - -static void put_mspel8_mc22_c(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) -{ - uint8_t halfH[88]; - - wmv2_mspel8_h_lowpass(halfH, src - stride, 8, stride, 11); - wmv2_mspel8_v_lowpass(dst, halfH + 8, stride, 8, 8); -} - av_cold void ff_wmv2dsp_init(WMV2DSPContext *c) { c->idct_add = wmv2_idct_add_c; c->idct_put = wmv2_idct_put_c; c->idct_perm = FF_IDCT_PERM_NONE; - c->put_mspel_pixels_tab[0] = ff_put_pixels8x8_c; - c->put_mspel_pixels_tab[1] = put_mspel8_mc10_c; - c->put_mspel_pixels_tab[2] = put_mspel8_mc20_c; - c->put_mspel_pixels_tab[3] = put_mspel8_mc30_c; - c->put_mspel_pixels_tab[4] = put_mspel8_mc02_c; - c->put_mspel_pixels_tab[5] = put_mspel8_mc12_c; - c->put_mspel_pixels_tab[6] = put_mspel8_mc22_c; - c->put_mspel_pixels_tab[7] = put_mspel8_mc32_c; - #if ARCH_MIPS ff_wmv2dsp_init_mips(c); #endif diff --git a/libavcodec/wmv2dsp.h b/libavcodec/wmv2dsp.h index 5e40b30a20..6906dc29f2 100644 --- a/libavcodec/wmv2dsp.h +++ b/libavcodec/wmv2dsp.h @@ -19,16 +19,13 @@ #ifndef AVCODEC_WMV2DSP_H #define AVCODEC_WMV2DSP_H +#include <stddef.h> #include <stdint.h> -#include "qpeldsp.h" - typedef struct WMV2DSPContext { void (*idct_add)(uint8_t *dest, ptrdiff_t line_size, int16_t *block); void (*idct_put)(uint8_t *dest, ptrdiff_t line_size, int16_t *block); - qpel_mc_func put_mspel_pixels_tab[8]; - int idct_perm; } WMV2DSPContext; _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
