This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 956bfec1152c89c935a9f754f0013bf435bbabd9 Author: Andreas Rheinhardt <[email protected]> AuthorDate: Wed Jun 25 08:30:22 2025 +0200 Commit: Andreas Rheinhardt <[email protected]> CommitDate: Fri Jan 2 18:39:48 2026 +0100 avcodec/wmv2: Move ff_msmpel_motion() to the decoder mspel is not supported by the encoder. Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavcodec/mpegvideo_motion.c | 8 ++-- libavcodec/wmv2.c | 90 ------------------------------------------- libavcodec/wmv2.h | 7 ---- libavcodec/wmv2dec.c | 89 ++++++++++++++++++++++++++++++++++++++++++ libavcodec/wmv2dec.h | 6 +++ 5 files changed, 100 insertions(+), 100 deletions(-) diff --git a/libavcodec/mpegvideo_motion.c b/libavcodec/mpegvideo_motion.c index a48b898dac..741927d809 100644 --- a/libavcodec/mpegvideo_motion.c +++ b/libavcodec/mpegvideo_motion.c @@ -34,7 +34,7 @@ #include "mpegvideo.h" #include "mpeg4videodec.h" #include "qpeldsp.h" -#include "wmv2.h" +#include "wmv2dec.h" static inline int hpel_motion(MpegEncContext *s, uint8_t *dest, uint8_t *src, @@ -706,11 +706,13 @@ static av_always_inline void mpv_motion_internal(MpegEncContext *s, 0, 0, 0, ref_picture, pix_op, qpix_op, s->mv[dir][0][0], s->mv[dir][0][1], 16); - } else if (!is_mpeg12 && (CONFIG_WMV2_DECODER || CONFIG_WMV2_ENCODER) && - s->mspel && s->codec_id == AV_CODEC_ID_WMV2) { +#if CONFIG_WMV2_DECODER + } else if (!is_mpeg12 && s->mspel && s->codec_id == AV_CODEC_ID_WMV2) { + av_assert2(av_codec_is_decoder(s->avctx->codec)); ff_mspel_motion(s, dest_y, dest_cb, dest_cr, ref_picture, pix_op, s->mv[dir][0][0], s->mv[dir][0][1], 16); +#endif } else { mpeg_motion(s, dest_y, dest_cb, dest_cr, 0, ref_picture, pix_op, diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c index d36ae66581..b29037cacb 100644 --- a/libavcodec/wmv2.c +++ b/libavcodec/wmv2.c @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "avcodec.h" #include "idctdsp.h" #include "mpegvideo.h" #include "wmv2.h" @@ -36,92 +35,3 @@ av_cold void ff_wmv2_common_init(MpegEncContext *s) s->idsp.idct_add = w->wdsp.idct_add; s->idsp.idct = NULL; } - -void ff_mspel_motion(MpegEncContext *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; - 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; - src_x = s->mb_x * 16 + (motion_x >> 1); - src_y = s->mb_y * 16 + (motion_y >> 1); - - /* WARNING: do no forget half pels */ - v_edge_pos = s->v_edge_pos; - src_x = av_clip(src_x, -16, s->width); - src_y = av_clip(src_y, -16, s->height); - - if (src_x <= -16 || src_x >= s->width) - dxy &= ~3; - if (src_y <= -16 || src_y >= s->height) - dxy &= ~4; - - linesize = s->linesize; - uvlinesize = s->uvlinesize; - ptr = ref_picture[0] + (src_y * linesize) + src_x; - - 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->sc.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->sc.edge_emu_buffer + 1 + s->linesize; - 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); - - if (s->avctx->flags & AV_CODEC_FLAG_GRAY) - return; - - 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; - src_x = av_clip(src_x, -8, s->width >> 1); - if (src_x == (s->width >> 1)) - dxy &= ~1; - src_y = av_clip(src_y, -8, s->height >> 1); - if (src_y == (s->height >> 1)) - dxy &= ~2; - offset = (src_y * uvlinesize) + src_x; - ptr = ref_picture[1] + offset; - if (emu) { - s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, - s->uvlinesize, s->uvlinesize, - 9, 9, - src_x, src_y, - s->h_edge_pos >> 1, s->v_edge_pos >> 1); - ptr = s->sc.edge_emu_buffer; - } - pix_op[1][dxy](dest_cb, ptr, uvlinesize, h >> 1); - - ptr = ref_picture[2] + offset; - if (emu) { - s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, - s->uvlinesize, s->uvlinesize, - 9, 9, - src_x, src_y, - s->h_edge_pos >> 1, s->v_edge_pos >> 1); - ptr = s->sc.edge_emu_buffer; - } - pix_op[1][dxy](dest_cr, ptr, uvlinesize, h >> 1); -} diff --git a/libavcodec/wmv2.h b/libavcodec/wmv2.h index 409d9456ab..b2767c6ca4 100644 --- a/libavcodec/wmv2.h +++ b/libavcodec/wmv2.h @@ -37,13 +37,6 @@ typedef struct WMV2Context { void ff_wmv2_common_init(MpegEncContext *s); -void ff_mspel_motion(MpegEncContext *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); - - static av_always_inline int wmv2_get_cbp_table_index(int qscale, int cbp_index) { static const uint8_t map[3][3] = { diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index 2421513adf..554b784a5d 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -56,6 +56,95 @@ typedef struct WMV2DecContext { DECLARE_ALIGNED(32, int16_t, abt_block2)[6][64]; } WMV2DecContext; +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; + 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; + src_x = s->mb_x * 16 + (motion_x >> 1); + src_y = s->mb_y * 16 + (motion_y >> 1); + + /* WARNING: do no forget half pels */ + v_edge_pos = s->v_edge_pos; + src_x = av_clip(src_x, -16, s->width); + src_y = av_clip(src_y, -16, s->height); + + if (src_x <= -16 || src_x >= s->width) + dxy &= ~3; + if (src_y <= -16 || src_y >= s->height) + dxy &= ~4; + + linesize = s->linesize; + uvlinesize = s->uvlinesize; + ptr = ref_picture[0] + (src_y * linesize) + src_x; + + 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->sc.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->sc.edge_emu_buffer + 1 + s->linesize; + 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); + + if (s->avctx->flags & AV_CODEC_FLAG_GRAY) + return; + + 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; + src_x = av_clip(src_x, -8, s->width >> 1); + if (src_x == (s->width >> 1)) + dxy &= ~1; + src_y = av_clip(src_y, -8, s->height >> 1); + if (src_y == (s->height >> 1)) + dxy &= ~2; + offset = (src_y * uvlinesize) + src_x; + ptr = ref_picture[1] + offset; + if (emu) { + s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, + s->uvlinesize, s->uvlinesize, + 9, 9, + src_x, src_y, + s->h_edge_pos >> 1, s->v_edge_pos >> 1); + ptr = s->sc.edge_emu_buffer; + } + pix_op[1][dxy](dest_cb, ptr, uvlinesize, h >> 1); + + ptr = ref_picture[2] + offset; + if (emu) { + s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, + s->uvlinesize, s->uvlinesize, + 9, 9, + src_x, src_y, + s->h_edge_pos >> 1, s->v_edge_pos >> 1); + ptr = s->sc.edge_emu_buffer; + } + pix_op[1][dxy](dest_cr, ptr, uvlinesize, h >> 1); +} + static void wmv2_add_block(WMV2DecContext *w, int16_t blocks1[][64], uint8_t *dst, int stride, int n) { diff --git a/libavcodec/wmv2dec.h b/libavcodec/wmv2dec.h index 1bd0d13725..d19760b6c9 100644 --- a/libavcodec/wmv2dec.h +++ b/libavcodec/wmv2dec.h @@ -28,4 +28,10 @@ int ff_wmv2_decode_secondary_picture_header(struct H263DecContext *const h); void ff_wmv2_add_mb(MpegEncContext *s, int16_t block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr); +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); + #endif _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
