diff mbox series

[FFmpeg-devel,1/3] avcodec/bswapdsp: Don't presume src to be naturally aligned

Message ID GV1P250MB073744E0C70DD7FFE1268A208FED9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
State New
Headers show
Series [FFmpeg-devel,1/3] avcodec/bswapdsp: Don't presume src to be naturally aligned | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Andreas Rheinhardt Dec. 27, 2022, 10:41 p.m. UTC
src typically comes from AVPackets and AVPacket.data has
no alignment requirement. This means that the casts to
uint32_t* might be undefined behaviour (they are if the
pointer is no suitably aligned) and that the C versions
of the conversion functions presume too much alignment;
I don't know whether the same is true for the riscv asm.

Fix this by using const void* for src.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
Would be nice if someone could actually check whether riscv
presumes alignment.

 libavcodec/4xm.c                 |  2 +-
 libavcodec/ac3dec.c              |  2 +-
 libavcodec/alsdec.c              |  2 +-
 libavcodec/apedec.c              |  2 +-
 libavcodec/asvdec.c              |  2 +-
 libavcodec/asvenc.c              |  2 +-
 libavcodec/bswapdsp.c            | 37 ++++++++++++++++++--------------
 libavcodec/bswapdsp.h            |  4 ++--
 libavcodec/cllc.c                |  2 +-
 libavcodec/eamad.c               |  2 +-
 libavcodec/eatqi.c               |  3 +--
 libavcodec/flacenc.c             |  2 +-
 libavcodec/fraps.c               |  3 +--
 libavcodec/hevcdec.c             |  3 +--
 libavcodec/huffyuvdec.c          |  2 +-
 libavcodec/huffyuvenc.c          |  2 +-
 libavcodec/imc.c                 |  2 +-
 libavcodec/imm4.c                |  3 +--
 libavcodec/mdec.c                |  2 +-
 libavcodec/mimic.c               |  2 +-
 libavcodec/mobiclip.c            |  3 +--
 libavcodec/motionpixels.c        |  3 +--
 libavcodec/rawdec.c              |  4 ++--
 libavcodec/riscv/bswapdsp_init.c |  6 +++---
 libavcodec/shorten.c             |  2 +-
 libavcodec/truemotion2.c         |  3 +--
 libavcodec/truespeech.c          |  2 +-
 libavcodec/utvideodec.c          |  2 +-
 libavcodec/utvideoenc.c          |  3 +--
 libavcodec/x86/bswapdsp.asm      |  2 +-
 libavcodec/x86/bswapdsp_init.c   |  6 +++---
 libavcodec/ylc.c                 |  2 +-
 32 files changed, 58 insertions(+), 61 deletions(-)
diff mbox series

Patch

diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c
index 5636fdef2d..5708888011 100644
--- a/libavcodec/4xm.c
+++ b/libavcodec/4xm.c
@@ -813,7 +813,7 @@  static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length)
                           prestream_size);
     if (!f->bitstream_buffer)
         return AVERROR(ENOMEM);
-    f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) prestream,
+    f->bbdsp.bswap_buf(f->bitstream_buffer, prestream,
                        prestream_size / 4);
     init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);
 
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 1f2949dcfd..8c7cd547bf 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -1524,7 +1524,7 @@  static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
         // seems to be byte-swapped AC-3
         int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
         s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
-                            (const uint16_t *) buf, cnt);
+                            buf, cnt);
     } else
         memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
 
diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
index 4605b2248f..16d6d18895 100644
--- a/libavcodec/alsdec.c
+++ b/libavcodec/alsdec.c
@@ -1900,7 +1900,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
                         *dest++ = av_bswap16(src[sample]);
                 } else {
                     ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
-                                        (uint32_t *) frame->data[0],
+                                        frame->data[0],
                                         ctx->cur_frame_length * channels);
                 }
                 crc_source = ctx->crc_buffer;
diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
index c08d13d6c2..49f27ab2c1 100644
--- a/libavcodec/apedec.c
+++ b/libavcodec/apedec.c
@@ -1499,7 +1499,7 @@  static int ape_decode_frame(AVCodecContext *avctx, AVFrame *frame,
         av_fast_padded_malloc(&s->data, &s->data_size, buf_size);
         if (!s->data)
             return AVERROR(ENOMEM);
-        s->bdsp.bswap_buf((uint32_t *) s->data, (const uint32_t *) buf,
+        s->bdsp.bswap_buf((uint32_t *) s->data, buf,
                           buf_size >> 2);
         memset(s->data + (buf_size & ~3), 0, buf_size & 3);
         s->ptr = s->data;
diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c
index 699aab9f8f..f5b5800100 100644
--- a/libavcodec/asvdec.c
+++ b/libavcodec/asvdec.c
@@ -254,7 +254,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
             return AVERROR(ENOMEM);
 
         c->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer,
-                           (const uint32_t *) buf, buf_size / 4);
+                           buf, buf_size / 4);
         ret = init_get_bits8(&a->gb, a->bitstream_buffer, buf_size);
     } else {
         ret = init_get_bits8_le(&a->gb, buf, buf_size);
diff --git a/libavcodec/asvenc.c b/libavcodec/asvenc.c
index 9da7cbb986..2845ac913c 100644
--- a/libavcodec/asvenc.c
+++ b/libavcodec/asvenc.c
@@ -310,7 +310,7 @@  static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
 
     if (avctx->codec_id == AV_CODEC_ID_ASV1) {
         c->bbdsp.bswap_buf((uint32_t *) pkt->data,
-                           (uint32_t *) pkt->data, size);
+                           pkt->data, size);
     }
 
     pkt->size   = size * 4;
diff --git a/libavcodec/bswapdsp.c b/libavcodec/bswapdsp.c
index f0ea2b55c5..ebcdc1fd9b 100644
--- a/libavcodec/bswapdsp.c
+++ b/libavcodec/bswapdsp.c
@@ -20,30 +20,35 @@ 
 
 #include "libavutil/attributes.h"
 #include "libavutil/bswap.h"
+#include "libavutil/intreadwrite.h"
 #include "bswapdsp.h"
 
-static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
+static void bswap_buf(uint32_t *dst, const void *src_, int w)
 {
-    int i;
+    const unsigned char *src = src_;
+    uint32_t *const end = dst + w, *end2 = dst + (w & ~7);
 
-    for (i = 0; i + 8 <= w; i += 8) {
-        dst[i + 0] = av_bswap32(src[i + 0]);
-        dst[i + 1] = av_bswap32(src[i + 1]);
-        dst[i + 2] = av_bswap32(src[i + 2]);
-        dst[i + 3] = av_bswap32(src[i + 3]);
-        dst[i + 4] = av_bswap32(src[i + 4]);
-        dst[i + 5] = av_bswap32(src[i + 5]);
-        dst[i + 6] = av_bswap32(src[i + 6]);
-        dst[i + 7] = av_bswap32(src[i + 7]);
+    for (; dst < end2; dst += 8, src += 8 * 4) {
+        dst[0] = av_bswap32(AV_RN32(src));
+        dst[1] = av_bswap32(AV_RN32(src +  4));
+        dst[2] = av_bswap32(AV_RN32(src +  8));
+        dst[3] = av_bswap32(AV_RN32(src + 12));
+        dst[4] = av_bswap32(AV_RN32(src + 16));
+        dst[5] = av_bswap32(AV_RN32(src + 20));
+        dst[6] = av_bswap32(AV_RN32(src + 24));
+        dst[7] = av_bswap32(AV_RN32(src + 28));
     }
-    for (; i < w; i++)
-        dst[i + 0] = av_bswap32(src[i + 0]);
+    for (; dst < end; dst++, src += 4)
+        dst[0] = av_bswap32(AV_RN32(src));
 }
 
-static void bswap16_buf(uint16_t *dst, const uint16_t *src, int len)
+static void bswap16_buf(uint16_t *dst, const void *src_, int len)
 {
-    while (len--)
-        *dst++ = av_bswap16(*src++);
+    const unsigned char *src = src_;
+    while (len--) {
+        *dst++ = av_bswap16(AV_RN16(src));
+        src   += 2;
+    }
 }
 
 av_cold void ff_bswapdsp_init(BswapDSPContext *c)
diff --git a/libavcodec/bswapdsp.h b/libavcodec/bswapdsp.h
index 6f4db66115..a5b1fd38bf 100644
--- a/libavcodec/bswapdsp.h
+++ b/libavcodec/bswapdsp.h
@@ -22,8 +22,8 @@ 
 #include <stdint.h>
 
 typedef struct BswapDSPContext {
-    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
-    void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
+    void (*bswap_buf)(uint32_t *dst, const void *src, int w);
+    void (*bswap16_buf)(uint16_t *dst, const void *src, int len);
 } BswapDSPContext;
 
 void ff_bswapdsp_init(BswapDSPContext *c);
diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
index 911717b68d..eef2506936 100644
--- a/libavcodec/cllc.c
+++ b/libavcodec/cllc.c
@@ -397,7 +397,7 @@  static int cllc_decode_frame(AVCodecContext *avctx, AVFrame *pic,
     }
 
     /* bswap16 the buffer since CLLC's bitreader works in 16-bit words */
-    ctx->bdsp.bswap16_buf((uint16_t *) ctx->swapped_buf, (uint16_t *) src,
+    ctx->bdsp.bswap16_buf((uint16_t *) ctx->swapped_buf, src,
                           data_size / 2);
 
     if ((ret = init_get_bits8(&gb, ctx->swapped_buf, data_size)) < 0)
diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
index 45012c62b8..51b34dd61e 100644
--- a/libavcodec/eamad.c
+++ b/libavcodec/eamad.c
@@ -304,7 +304,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
                           bytestream2_get_bytes_left(&gb));
     if (!s->bitstream_buf)
         return AVERROR(ENOMEM);
-    s->bbdsp.bswap16_buf(s->bitstream_buf, (const uint16_t *)(buf + bytestream2_tell(&gb)),
+    s->bbdsp.bswap16_buf(s->bitstream_buf, buf + bytestream2_tell(&gb),
                          bytestream2_get_bytes_left(&gb) / 2);
     memset((uint8_t*)s->bitstream_buf + bytestream2_get_bytes_left(&gb), 0, AV_INPUT_BUFFER_PADDING_SIZE);
     init_get_bits(&s->gb, s->bitstream_buf, 8*(bytestream2_get_bytes_left(&gb)));
diff --git a/libavcodec/eatqi.c b/libavcodec/eatqi.c
index e4f12b3db2..f9a5f9ae39 100644
--- a/libavcodec/eatqi.c
+++ b/libavcodec/eatqi.c
@@ -148,8 +148,7 @@  static int tqi_decode_frame(AVCodecContext *avctx, AVFrame *frame,
                           buf_end - buf);
     if (!t->bitstream_buf)
         return AVERROR(ENOMEM);
-    t->bsdsp.bswap_buf(t->bitstream_buf, (const uint32_t *) buf,
-                       (buf_end - buf) / 4);
+    t->bsdsp.bswap_buf(t->bitstream_buf, buf, (buf_end - buf) / 4);
     init_get_bits(&t->gb, t->bitstream_buf, 8 * (buf_end - buf));
 
     t->last_dc[0] =
diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
index 8aacc93e28..bf5d12facb 100644
--- a/libavcodec/flacenc.c
+++ b/libavcodec/flacenc.c
@@ -1587,7 +1587,7 @@  static int update_md5_sum(FlacEncodeContext *s, const void *samples)
         buf = (const uint8_t *)samples;
 #if HAVE_BIGENDIAN
         s->bdsp.bswap16_buf((uint16_t *) s->md5_buffer,
-                            (const uint16_t *) samples, buf_size / 2);
+                            samples, buf_size / 2);
         buf = s->md5_buffer;
 #endif
     } else if (s->avctx->bits_per_raw_sample <= 24) {
diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
index 4c4c46b602..2f3365eca8 100644
--- a/libavcodec/fraps.c
+++ b/libavcodec/fraps.c
@@ -106,8 +106,7 @@  static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w,
     /* we have built Huffman table and are ready to decode plane */
 
     /* convert bits so they may be used by standard bitreader */
-    s->bdsp.bswap_buf((uint32_t *) s->tmpbuf,
-                      (const uint32_t *) src, size >> 2);
+    s->bdsp.bswap_buf((uint32_t *) s->tmpbuf, src, size >> 2);
 
     if ((ret = init_get_bits8(&gb, s->tmpbuf, size)) < 0)
         return ret;
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 567e8d81d4..32f1525349 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -3274,8 +3274,7 @@  static int verify_md5(HEVCContext *s, AVFrame *frame)
             const uint8_t *src = frame->data[i] + j * frame->linesize[i];
 #if HAVE_BIGENDIAN
             if (pixel_shift) {
-                s->bdsp.bswap16_buf((uint16_t *) s->checksum_buf,
-                                    (const uint16_t *) src, w);
+                s->bdsp.bswap16_buf((uint16_t *) s->checksum_buf, src, w);
                 src = s->checksum_buf;
             }
 #endif
diff --git a/libavcodec/huffyuvdec.c b/libavcodec/huffyuvdec.c
index 7d3515cc88..670f26d263 100644
--- a/libavcodec/huffyuvdec.c
+++ b/libavcodec/huffyuvdec.c
@@ -1240,7 +1240,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
         return AVERROR(ENOMEM);
 
     s->bdsp.bswap_buf((uint32_t *) s->bitstream_buffer,
-                      (const uint32_t *) buf, buf_size / 4);
+                      buf, buf_size / 4);
 
     if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0)
         return ret;
diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c
index db274e37ad..b5ed991d11 100644
--- a/libavcodec/huffyuvenc.c
+++ b/libavcodec/huffyuvenc.c
@@ -1018,7 +1018,7 @@  static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
         avctx->stats_out[0] = '\0';
     if (!(s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT)) {
         flush_put_bits(&s->pb);
-        s->bdsp.bswap_buf((uint32_t *) pkt->data, (uint32_t *) pkt->data, size);
+        s->bdsp.bswap_buf((uint32_t *) pkt->data, pkt->data, size);
     }
 
     s->picture_number++;
diff --git a/libavcodec/imc.c b/libavcodec/imc.c
index 174332de4d..365ec08601 100644
--- a/libavcodec/imc.c
+++ b/libavcodec/imc.c
@@ -986,7 +986,7 @@  static int imc_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
         q->out_samples = (float *)frame->extended_data[i];
 
-        q->bdsp.bswap16_buf(buf16, (const uint16_t *) buf, IMC_BLOCK_SIZE / 2);
+        q->bdsp.bswap16_buf(buf16, buf, IMC_BLOCK_SIZE / 2);
 
         init_get_bits(&q->gb, (const uint8_t*)buf16, IMC_BLOCK_SIZE * 8);
 
diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c
index ccec5dff43..72c5cb8b64 100644
--- a/libavcodec/imm4.c
+++ b/libavcodec/imm4.c
@@ -369,8 +369,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
         return AVERROR(ENOMEM);
 
     s->bdsp.bswap_buf((uint32_t *)s->bitstream,
-                      (uint32_t *)avpkt->data,
-                      (avpkt->size + 3) >> 2);
+                      avpkt->data, (avpkt->size + 3) >> 2);
 
     if ((ret = init_get_bits8(gb, s->bitstream, FFALIGN(avpkt->size, 4))) < 0)
         return ret;
diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
index 640b671a0f..0538b4362f 100644
--- a/libavcodec/mdec.c
+++ b/libavcodec/mdec.c
@@ -182,7 +182,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
     av_fast_padded_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size, buf_size);
     if (!a->bitstream_buffer)
         return AVERROR(ENOMEM);
-    a->bbdsp.bswap16_buf((uint16_t *)a->bitstream_buffer, (uint16_t *)buf, (buf_size + 1) / 2);
+    a->bbdsp.bswap16_buf((uint16_t *)a->bitstream_buffer, buf, (buf_size + 1) / 2);
     if ((ret = init_get_bits8(&a->gb, a->bitstream_buffer, buf_size)) < 0)
         return ret;
 
diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
index 891471b30e..167673a8fe 100644
--- a/libavcodec/mimic.c
+++ b/libavcodec/mimic.c
@@ -412,7 +412,7 @@  static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
         return AVERROR(ENOMEM);
 
     ctx->bbdsp.bswap_buf(ctx->swap_buf,
-                         (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
+                         buf + MIMIC_HEADER_SIZE,
                          swap_buf_size >> 2);
     init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3);
 
diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c
index c3b2383dbc..2197760266 100644
--- a/libavcodec/mobiclip.c
+++ b/libavcodec/mobiclip.c
@@ -1226,8 +1226,7 @@  static int mobiclip_decode(AVCodecContext *avctx, AVFrame *rframe,
         return ret;
 
     s->bdsp.bswap16_buf((uint16_t *)s->bitstream,
-                        (uint16_t *)pkt->data,
-                        (pkt->size + 1) >> 1);
+                        pkt->data, (pkt->size + 1) >> 1);
 
     ret = init_get_bits8(gb, s->bitstream, FFALIGN(pkt->size, 2));
     if (ret < 0)
diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c
index 4141c5a495..9eed773ad5 100644
--- a/libavcodec/motionpixels.c
+++ b/libavcodec/motionpixels.c
@@ -294,8 +294,7 @@  static int mp_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     av_fast_padded_malloc(&mp->bswapbuf, &mp->bswapbuf_size, buf_size);
     if (!mp->bswapbuf)
         return AVERROR(ENOMEM);
-    mp->bdsp.bswap_buf((uint32_t *) mp->bswapbuf, (const uint32_t *) buf,
-                       buf_size / 4);
+    mp->bdsp.bswap_buf((uint32_t *) mp->bswapbuf, buf, buf_size / 4);
     if (buf_size & 3)
         memcpy(mp->bswapbuf + (buf_size & ~3), buf + (buf_size & ~3), buf_size & 3);
     init_get_bits(&gb, mp->bswapbuf, buf_size * 8);
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index c20c317fed..40500a55a0 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -319,9 +319,9 @@  static int raw_decode(AVCodecContext *avctx, AVFrame *frame,
             if (!context->bitstream_buf)
                 return AVERROR(ENOMEM);
             if (swap == 16)
-                context->bbdsp.bswap16_buf(context->bitstream_buf, (const uint16_t*)buf, buf_size / 2);
+                context->bbdsp.bswap16_buf(context->bitstream_buf, buf, buf_size / 2);
             else if (swap == 32)
-                context->bbdsp.bswap_buf(context->bitstream_buf, (const uint32_t*)buf, buf_size / 4);
+                context->bbdsp.bswap_buf(context->bitstream_buf, buf, buf_size / 4);
             else
                 return AVERROR_INVALIDDATA;
             buf = context->bitstream_buf;
diff --git a/libavcodec/riscv/bswapdsp_init.c b/libavcodec/riscv/bswapdsp_init.c
index abe84ec1f7..d0089d3cc1 100644
--- a/libavcodec/riscv/bswapdsp_init.c
+++ b/libavcodec/riscv/bswapdsp_init.c
@@ -25,9 +25,9 @@ 
 #include "libavutil/cpu.h"
 #include "libavcodec/bswapdsp.h"
 
-void ff_bswap32_buf_rvb(uint32_t *dst, const uint32_t *src, int len);
-void ff_bswap32_buf_rvv(uint32_t *dst, const uint32_t *src, int len);
-void ff_bswap16_buf_rvv(uint16_t *dst, const uint16_t *src, int len);
+void ff_bswap32_buf_rvb(uint32_t *dst, const void *src, int len);
+void ff_bswap32_buf_rvv(uint32_t *dst, const void *src, int len);
+void ff_bswap16_buf_rvv(uint16_t *dst, const void *src, int len);
 
 av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
 {
diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
index 1b2abd76b1..3c13694ea6 100644
--- a/libavcodec/shorten.c
+++ b/libavcodec/shorten.c
@@ -758,7 +758,7 @@  static int shorten_decode_frame(AVCodecContext *avctx, AVFrame *frame,
                     }
                     if (s->swap && s->internal_ftype != TYPE_U8)
                         s->bdsp.bswap16_buf(((uint16_t **)frame->extended_data)[chan],
-                                            ((uint16_t **)frame->extended_data)[chan],
+                                            frame->extended_data[chan],
                                             s->blocksize);
 
                 }
diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c
index b168b9cda1..02776f287c 100644
--- a/libavcodec/truemotion2.c
+++ b/libavcodec/truemotion2.c
@@ -907,8 +907,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     if ((ret = ff_reget_buffer(avctx, p, 0)) < 0)
         return ret;
 
-    l->bdsp.bswap_buf((uint32_t *) l->buffer, (const uint32_t *) buf,
-                      buf_size >> 2);
+    l->bdsp.bswap_buf((uint32_t *) l->buffer, buf, buf_size >> 2);
 
     if ((ret = tm2_read_header(l, l->buffer)) < 0) {
         return ret;
diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c
index 454121cc75..574a427239 100644
--- a/libavcodec/truespeech.c
+++ b/libavcodec/truespeech.c
@@ -82,7 +82,7 @@  static void truespeech_read_frame(TSContext *dec, const uint8_t *input)
 {
     GetBitContext gb;
 
-    dec->bdsp.bswap_buf((uint32_t *) dec->buffer, (const uint32_t *) input, 8);
+    dec->bdsp.bswap_buf((uint32_t *) dec->buffer, input, 8);
     init_get_bits(&gb, dec->buffer, 32 * 8);
 
     dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)];
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index 83120d1b22..85ff19dd9e 100644
--- a/libavcodec/utvideodec.c
+++ b/libavcodec/utvideodec.c
@@ -151,7 +151,7 @@  static int decode_plane10(UtvideoContext *c, int plane_no,
 
         memset(c->slice_bits + slice_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
         c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
-                          (uint32_t *)(src + slice_data_start + c->slices * 4),
+                          src + slice_data_start + c->slices * 4,
                           (slice_data_end - slice_data_start + 3) >> 2);
         init_get_bits(&gb, c->slice_bits, slice_size * 8);
 
diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c
index d4388da8ba..2a3c50dd15 100644
--- a/libavcodec/utvideoenc.c
+++ b/libavcodec/utvideoenc.c
@@ -491,8 +491,7 @@  static int encode_plane(AVCodecContext *avctx, const uint8_t *src,
 
         /* Byteswap the written huffman codes */
         c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
-                          (uint32_t *) c->slice_bits,
-                          slice_len >> 2);
+                          c->slice_bits, slice_len >> 2);
 
         /* Write the offset to the stream */
         bytestream2_put_le32(pb, offset);
diff --git a/libavcodec/x86/bswapdsp.asm b/libavcodec/x86/bswapdsp.asm
index 31c6c48a21..16f4f8c032 100644
--- a/libavcodec/x86/bswapdsp.asm
+++ b/libavcodec/x86/bswapdsp.asm
@@ -99,7 +99,7 @@  SECTION .text
     add      r0, 16
 %endmacro
 
-; void ff_bswap_buf(uint32_t *dst, const uint32_t *src, int w);
+; void ff_bswap_buf(uint32_t *dst, const void *src, int w);
 %macro BSWAP32_BUF 0
 %if cpuflag(ssse3)||cpuflag(avx2)
 cglobal bswap32_buf, 3,4,3
diff --git a/libavcodec/x86/bswapdsp_init.c b/libavcodec/x86/bswapdsp_init.c
index 877bab1a2c..0f949033c5 100644
--- a/libavcodec/x86/bswapdsp_init.c
+++ b/libavcodec/x86/bswapdsp_init.c
@@ -23,9 +23,9 @@ 
 #include "libavutil/x86/cpu.h"
 #include "libavcodec/bswapdsp.h"
 
-void ff_bswap32_buf_sse2(uint32_t *dst, const uint32_t *src, int w);
-void ff_bswap32_buf_ssse3(uint32_t *dst, const uint32_t *src, int w);
-void ff_bswap32_buf_avx2(uint32_t *dst, const uint32_t *src, int w);
+void ff_bswap32_buf_sse2(uint32_t *dst, const void *src, int w);
+void ff_bswap32_buf_ssse3(uint32_t *dst, const void *src, int w);
+void ff_bswap32_buf_avx2(uint32_t *dst, const void *src, int w);
 
 av_cold void ff_bswapdsp_init_x86(BswapDSPContext *c)
 {
diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c
index 29c10f05da..d9cc7e33eb 100644
--- a/libavcodec/ylc.c
+++ b/libavcodec/ylc.c
@@ -312,7 +312,7 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
     memcpy(s->buffer, avpkt->data + toffset, boffset - toffset);
     memset(s->buffer + boffset - toffset, 0, AV_INPUT_BUFFER_PADDING_SIZE);
     s->bdsp.bswap_buf((uint32_t *) s->buffer,
-                      (uint32_t *) s->buffer,
+                      s->buffer,
                       (boffset - toffset + 3) >> 2);
     if ((ret = init_get_bits8(&gb, s->buffer, boffset - toffset)) < 0)
         return ret;