ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | Tue May 27 21:46:06 2025 +0200| [23761c7acd5352e4452b24cb5fd97d6b12b9ae91] | committer: Andreas Rheinhardt
avcodec/asvenc,dvenc: Optimize unaligned checks away if possible For certain arches (AARCH64, x86, generic) get_pixels and get_pixels_unaligned always coincide for 8 bit input. In these cases it is possible to avoid checks for unaligned input in asvenc, dvenc. Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=23761c7acd5352e4452b24cb5fd97d6b12b9ae91 --- libavcodec/asvenc.c | 7 ++++--- libavcodec/dvenc.c | 7 ++++--- libavcodec/pixblockdsp.h | 7 ++++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/libavcodec/asvenc.c b/libavcodec/asvenc.c index 159b070821..883edd0468 100644 --- a/libavcodec/asvenc.c +++ b/libavcodec/asvenc.c @@ -301,9 +301,10 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, if (ret < 0) return ret; - if ((uintptr_t)pict->data[0] & 7 || pict->linesize[0] & 7 || - (uintptr_t)pict->data[1] & 7 || pict->linesize[1] & 7 || - (uintptr_t)pict->data[2] & 7 || pict->linesize[2] & 7) + if (!PIXBLOCKDSP_8BPP_GET_PIXELS_SUPPORTS_UNALIGNED && + ((uintptr_t)pict->data[0] & 7 || pict->linesize[0] & 7 || + (uintptr_t)pict->data[1] & 7 || pict->linesize[1] & 7 || + (uintptr_t)pict->data[2] & 7 || pict->linesize[2] & 7)) a->get_pixels = a->pdsp.get_pixels_unaligned; else a->get_pixels = a->pdsp.get_pixels; diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c index b6764e9c2c..a477b84261 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -1200,9 +1200,10 @@ static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt, DVEncContext *s = c->priv_data; int ret; - if ((uintptr_t)frame->data[0] & 7 || frame->linesize[0] & 7 || - (uintptr_t)frame->data[1] & 7 || frame->linesize[1] & 7 || - (uintptr_t)frame->data[2] & 7 || frame->linesize[2] & 7) + if (!PIXBLOCKDSP_8BPP_GET_PIXELS_SUPPORTS_UNALIGNED && + ((uintptr_t)frame->data[0] & 7 || frame->linesize[0] & 7 || + (uintptr_t)frame->data[1] & 7 || frame->linesize[1] & 7 || + (uintptr_t)frame->data[2] & 7 || frame->linesize[2] & 7)) s->get_pixels = s->pdsp.get_pixels_unaligned; else s->get_pixels = s->pdsp.get_pixels; diff --git a/libavcodec/pixblockdsp.h b/libavcodec/pixblockdsp.h index 8d767b2fd3..d493d0e22b 100644 --- a/libavcodec/pixblockdsp.h +++ b/libavcodec/pixblockdsp.h @@ -22,9 +22,14 @@ #include <stddef.h> #include <stdint.h> +#define PIXBLOCKDSP_8BPP_GET_PIXELS_SUPPORTS_UNALIGNED \ + !(ARCH_ARM || ARCH_MIPS || ARCH_PPC || ARCH_RISCV) + typedef struct PixblockDSPContext { void (*get_pixels)(int16_t *restrict block /* align 16 */, - const uint8_t *pixels /* align 8 for <= 8 bit, 16 otherwise */, + /* align 16 for > 8 bits; align 8 for <= 8 bits + * (or 1 if PIXBLOCKDSP_8BPP_GET_PIXELS_SUPPORTS_UNALIGNED is set) */ + const uint8_t *pixels, ptrdiff_t stride); void (*get_pixels_unaligned)(int16_t *restrict block /* align 16 */, const uint8_t *pixels, _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".