From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/bswapdsp: Don't presume src to be naturally aligned Date: Tue, 27 Dec 2022 23:41:49 +0100 Message-ID: <GV1P250MB073744E0C70DD7FFE1268A208FED9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> (raw) 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 --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; -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2022-12-27 22:41 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-12-27 22:41 Andreas Rheinhardt [this message] 2022-12-27 22:47 ` [FFmpeg-devel] [PATCH 2/3] avcodec/flacenc: Don't copy buffer if avoidable Andreas Rheinhardt 2022-12-27 22:47 ` [FFmpeg-devel] [PATCH 3/3] avcodec/flacenc: Don't reload bits_per_raw_sample Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=GV1P250MB073744E0C70DD7FFE1268A208FED9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git