diff mbox series

[FFmpeg-devel,v2,1/2] avutil: move bswapdsp from avcodec to avutil

Message ID 20221205221641.1215-1-mindmark@gmail.com
State New
Headers show
Series [FFmpeg-devel,v2,1/2] avutil: move bswapdsp from avcodec to avutil | 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

Mark Reid Dec. 5, 2022, 10:16 p.m. UTC
From: Mark Reid <mindmark@gmail.com>

Also renamed bswap_buf to bswap32_buf
---
 configure                                     | 56 ++++++++-----------
 libavcodec/4xm.c                              | 14 ++---
 libavcodec/Makefile                           |  1 -
 libavcodec/ac3dec.c                           |  4 +-
 libavcodec/ac3dec.h                           |  4 +-
 libavcodec/alsdec.c                           | 12 ++--
 libavcodec/apedec.c                           | 10 ++--
 libavcodec/asv.c                              |  4 +-
 libavcodec/asv.h                              |  4 +-
 libavcodec/asvdec.c                           |  4 +-
 libavcodec/asvenc.c                           |  4 +-
 libavcodec/cllc.c                             |  6 +-
 libavcodec/eamad.c                            |  6 +-
 libavcodec/eatqi.c                            | 10 ++--
 libavcodec/exr.c                              |  6 +-
 libavcodec/flacenc.c                          |  6 +-
 libavcodec/fraps.c                            | 10 ++--
 libavcodec/hevcdec.c                          |  4 +-
 libavcodec/hevcdec.h                          |  4 +-
 libavcodec/huffyuvdec.c                       | 14 ++---
 libavcodec/huffyuvenc.c                       |  8 +--
 libavcodec/imc.c                              |  6 +-
 libavcodec/imm4.c                             | 12 ++--
 libavcodec/mdec.c                             |  6 +-
 libavcodec/mimic.c                            | 12 ++--
 libavcodec/mobiclip.c                         |  6 +-
 libavcodec/motionpixels.c                     | 10 ++--
 libavcodec/mpc.h                              |  4 +-
 libavcodec/mpc7.c                             |  8 +--
 libavcodec/rawdec.c                           |  8 +--
 libavcodec/riscv/Makefile                     |  3 -
 libavcodec/shorten.c                          |  7 ++-
 libavcodec/truemotion2.c                      | 11 ++--
 libavcodec/truespeech.c                       |  8 +--
 libavcodec/utvideo.h                          |  4 +-
 libavcodec/utvideodec.c                       | 16 +++---
 libavcodec/utvideoenc.c                       | 10 ++--
 libavcodec/x86/Makefile                       |  2 -
 libavcodec/ylc.c                              | 18 +++---
 libavutil/Makefile                            |  2 +
 {libavcodec => libavutil}/bswapdsp.c          | 17 +++---
 {libavcodec => libavutil}/bswapdsp.h          | 16 +++---
 libavutil/riscv/Makefile                      |  7 ++-
 .../riscv/bswapdsp_init.c                     |  9 +--
 .../riscv/bswapdsp_rvb.S                      |  0
 .../riscv/bswapdsp_rvv.S                      |  0
 libavutil/version.h                           |  2 +-
 libavutil/x86/Makefile                        |  8 ++-
 {libavcodec => libavutil}/x86/bswapdsp.asm    |  4 +-
 {libavcodec => libavutil}/x86/bswapdsp_init.c | 17 +++---
 tests/checkasm/Makefile                       |  2 +-
 tests/checkasm/bswapdsp.c                     |  8 +--
 tests/checkasm/checkasm.c                     |  4 +-
 53 files changed, 216 insertions(+), 222 deletions(-)
 rename {libavcodec => libavutil}/bswapdsp.c (80%)
 rename {libavcodec => libavutil}/bswapdsp.h (71%)
 rename {libavcodec => libavutil}/riscv/bswapdsp_init.c (85%)
 rename {libavcodec => libavutil}/riscv/bswapdsp_rvb.S (100%)
 rename {libavcodec => libavutil}/riscv/bswapdsp_rvv.S (100%)
 rename {libavcodec => libavutil}/x86/bswapdsp.asm (97%)
 rename {libavcodec => libavutil}/x86/bswapdsp_init.c (80%)

Comments

Michael Niedermayer Dec. 6, 2022, 6:21 p.m. UTC | #1
On Mon, Dec 05, 2022 at 02:16:40PM -0800, mindmark@gmail.com wrote:
> From: Mark Reid <mindmark@gmail.com>
> 
> Also renamed bswap_buf to bswap32_buf
> ---
>  configure                                     | 56 ++++++++-----------
>  libavcodec/4xm.c                              | 14 ++---
>  libavcodec/Makefile                           |  1 -
>  libavcodec/ac3dec.c                           |  4 +-
>  libavcodec/ac3dec.h                           |  4 +-
>  libavcodec/alsdec.c                           | 12 ++--
>  libavcodec/apedec.c                           | 10 ++--
>  libavcodec/asv.c                              |  4 +-
>  libavcodec/asv.h                              |  4 +-
>  libavcodec/asvdec.c                           |  4 +-
>  libavcodec/asvenc.c                           |  4 +-
>  libavcodec/cllc.c                             |  6 +-
>  libavcodec/eamad.c                            |  6 +-
>  libavcodec/eatqi.c                            | 10 ++--
>  libavcodec/exr.c                              |  6 +-
>  libavcodec/flacenc.c                          |  6 +-
>  libavcodec/fraps.c                            | 10 ++--
>  libavcodec/hevcdec.c                          |  4 +-
>  libavcodec/hevcdec.h                          |  4 +-
>  libavcodec/huffyuvdec.c                       | 14 ++---
>  libavcodec/huffyuvenc.c                       |  8 +--
>  libavcodec/imc.c                              |  6 +-
>  libavcodec/imm4.c                             | 12 ++--
>  libavcodec/mdec.c                             |  6 +-
>  libavcodec/mimic.c                            | 12 ++--
>  libavcodec/mobiclip.c                         |  6 +-
>  libavcodec/motionpixels.c                     | 10 ++--
>  libavcodec/mpc.h                              |  4 +-
>  libavcodec/mpc7.c                             |  8 +--
>  libavcodec/rawdec.c                           |  8 +--
>  libavcodec/riscv/Makefile                     |  3 -
>  libavcodec/shorten.c                          |  7 ++-
>  libavcodec/truemotion2.c                      | 11 ++--
>  libavcodec/truespeech.c                       |  8 +--
>  libavcodec/utvideo.h                          |  4 +-
>  libavcodec/utvideodec.c                       | 16 +++---
>  libavcodec/utvideoenc.c                       | 10 ++--
>  libavcodec/x86/Makefile                       |  2 -
>  libavcodec/ylc.c                              | 18 +++---
>  libavutil/Makefile                            |  2 +
>  {libavcodec => libavutil}/bswapdsp.c          | 17 +++---
>  {libavcodec => libavutil}/bswapdsp.h          | 16 +++---
>  libavutil/riscv/Makefile                      |  7 ++-
>  .../riscv/bswapdsp_init.c                     |  9 +--
>  .../riscv/bswapdsp_rvb.S                      |  0
>  .../riscv/bswapdsp_rvv.S                      |  0
>  libavutil/version.h                           |  2 +-
>  libavutil/x86/Makefile                        |  8 ++-
>  {libavcodec => libavutil}/x86/bswapdsp.asm    |  4 +-
>  {libavcodec => libavutil}/x86/bswapdsp_init.c | 17 +++---
>  tests/checkasm/Makefile                       |  2 +-
>  tests/checkasm/bswapdsp.c                     |  8 +--
>  tests/checkasm/checkasm.c                     |  4 +-
>  53 files changed, 216 insertions(+), 222 deletions(-)
>  rename {libavcodec => libavutil}/bswapdsp.c (80%)
>  rename {libavcodec => libavutil}/bswapdsp.h (71%)
>  rename {libavcodec => libavutil}/riscv/bswapdsp_init.c (85%)
>  rename {libavcodec => libavutil}/riscv/bswapdsp_rvb.S (100%)
>  rename {libavcodec => libavutil}/riscv/bswapdsp_rvv.S (100%)
>  rename {libavcodec => libavutil}/x86/bswapdsp.asm (97%)
>  rename {libavcodec => libavutil}/x86/bswapdsp_init.c (80%)
> 
> diff --git a/configure b/configure
> index f4eedfc207..03b502ea37 100755
> --- a/configure
> +++ b/configure
> @@ -2421,7 +2421,6 @@ CONFIG_EXTRA="
>      audio_frame_queue
>      audiodsp
>      blockdsp
> -    bswapdsp
>      cabac
>      cbs
>      cbs_av1
> @@ -2749,8 +2748,8 @@ aac_decoder_select="adts_header mpeg4audio sinewin"
>  aac_fixed_decoder_select="adts_header mpeg4audio"
>  aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
>  aac_latm_decoder_select="aac_decoder aac_latm_parser"
> -ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert"
> -ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp"
> +ac3_decoder_select="ac3_parser ac3dsp fmtconvert"
> +ac3_fixed_decoder_select="ac3_parser ac3dsp"
>  ac3_encoder_select="ac3dsp audiodsp me_cmp"
>  ac3_fixed_encoder_select="ac3dsp audiodsp me_cmp"
>  acelp_kelvin_decoder_select="audiodsp"
> @@ -2759,20 +2758,20 @@ adpcm_g722_encoder_select="g722dsp"
>  agm_decoder_select="idctdsp"
>  aic_decoder_select="golomb idctdsp"
>  alac_encoder_select="lpc"
> -als_decoder_select="bswapdsp mpeg4audio"
> +als_decoder_select="mpeg4audio"
>  amrnb_decoder_select="lsp"
>  amrwb_decoder_select="lsp"
>  amv_decoder_select="sp5x_decoder exif"
>  amv_encoder_select="jpegtables mpegvideoenc"
> -ape_decoder_select="bswapdsp llauddsp"
> +ape_decoder_select="llauddsp"
>  apng_decoder_select="inflate_wrapper"
>  apng_encoder_select="deflate_wrapper llvidencdsp"
>  aptx_encoder_select="audio_frame_queue"
>  aptx_hd_encoder_select="audio_frame_queue"

> -asv1_decoder_select="blockdsp bswapdsp idctdsp"
> +asv1_decoder_select="idctdsp"

blockdsp is disappearing here, i dont think that should happen in this patch

thx

[...]
James Almer Dec. 6, 2022, 6:21 p.m. UTC | #2
On 12/5/2022 7:16 PM, mindmark@gmail.com wrote:
> diff --git a/libavcodec/bswapdsp.h b/libavutil/bswapdsp.h
> similarity index 71%
> rename from libavcodec/bswapdsp.h
> rename to libavutil/bswapdsp.h
> index 6f4db66115..b540560d6a 100644
> --- a/libavcodec/bswapdsp.h
> +++ b/libavutil/bswapdsp.h
> @@ -16,18 +16,16 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> -#ifndef AVCODEC_BSWAPDSP_H
> -#define AVCODEC_BSWAPDSP_H
> +#ifndef AVUTIL_BSWAPDSP_H
> +#define AVUTIL_BSWAPDSP_H
>  
>  #include <stdint.h>
>  
> -typedef struct BswapDSPContext {
> -    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
> +typedef struct AVBSwapDSPContext {
> +    void (*bswap32_buf)(uint32_t *dst, const uint32_t *src, int len);
>      void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
> -} BswapDSPContext;
> +} AVBSwapDSPContext;
>  
> -void ff_bswapdsp_init(BswapDSPContext *c);
> -void ff_bswapdsp_init_riscv(BswapDSPContext *c);
> -void ff_bswapdsp_init_x86(BswapDSPContext *c);
> +void av_bswapdsp_init(AVBSwapDSPContext *c);
>  
> -#endif /* AVCODEC_BSWAPDSP_H */
> +#endif /* AVUTIL_BSWAPDSP_H */

For what's supposed to become an installer header, this is barebones in 
the documentation department.

Also, does this have any real use for API users? If you want to access 
these functions from swscale as well as lavc, you could either duplicate 
the code, or use the avpriv prefix.
I'm not a fan of adding public API for something that has no use outside 
of our own libraries.
Mark Reid Dec. 6, 2022, 11:37 p.m. UTC | #3
On Tue, Dec 6, 2022 at 10:21 AM James Almer <jamrial@gmail.com> wrote:

> On 12/5/2022 7:16 PM, mindmark@gmail.com wrote:
> > diff --git a/libavcodec/bswapdsp.h b/libavutil/bswapdsp.h
> > similarity index 71%
> > rename from libavcodec/bswapdsp.h
> > rename to libavutil/bswapdsp.h
> > index 6f4db66115..b540560d6a 100644
> > --- a/libavcodec/bswapdsp.h
> > +++ b/libavutil/bswapdsp.h
> > @@ -16,18 +16,16 @@
> >   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> >   */
> >
> > -#ifndef AVCODEC_BSWAPDSP_H
> > -#define AVCODEC_BSWAPDSP_H
> > +#ifndef AVUTIL_BSWAPDSP_H
> > +#define AVUTIL_BSWAPDSP_H
> >
> >  #include <stdint.h>
> >
> > -typedef struct BswapDSPContext {
> > -    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
> > +typedef struct AVBSwapDSPContext {
> > +    void (*bswap32_buf)(uint32_t *dst, const uint32_t *src, int len);
> >      void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
> > -} BswapDSPContext;
> > +} AVBSwapDSPContext;
> >
> > -void ff_bswapdsp_init(BswapDSPContext *c);
> > -void ff_bswapdsp_init_riscv(BswapDSPContext *c);
> > -void ff_bswapdsp_init_x86(BswapDSPContext *c);
> > +void av_bswapdsp_init(AVBSwapDSPContext *c);
> >
> > -#endif /* AVCODEC_BSWAPDSP_H */
> > +#endif /* AVUTIL_BSWAPDSP_H */
>
> For what's supposed to become an installer header, this is barebones in
> the documentation department.
>
> Also, does this have any real use for API users? If you want to access
> these functions from swscale as well as lavc, you could either duplicate
> the code, or use the avpriv prefix.
> I'm not a fan of adding public API for something that has no use outside
> of our own libraries.
>

I agree, I don't see a need for this to be public. I'll change it to use
the avpriv prefix if that's okay.
I'll add a little doc to the header too anyway.

the blockdsp is disappearing from configure is a mistake, I'll fix that too



> _______________________________________________
> 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".
>
Andreas Rheinhardt Dec. 7, 2022, 4:11 a.m. UTC | #4
mindmark@gmail.com:
> From: Mark Reid <mindmark@gmail.com>
> 
> Also renamed bswap_buf to bswap32_buf
> ---
>  configure                                     | 56 ++++++++-----------
>  libavcodec/4xm.c                              | 14 ++---
>  libavcodec/Makefile                           |  1 -
>  libavcodec/ac3dec.c                           |  4 +-
>  libavcodec/ac3dec.h                           |  4 +-
>  libavcodec/alsdec.c                           | 12 ++--
>  libavcodec/apedec.c                           | 10 ++--
>  libavcodec/asv.c                              |  4 +-
>  libavcodec/asv.h                              |  4 +-
>  libavcodec/asvdec.c                           |  4 +-
>  libavcodec/asvenc.c                           |  4 +-
>  libavcodec/cllc.c                             |  6 +-
>  libavcodec/eamad.c                            |  6 +-
>  libavcodec/eatqi.c                            | 10 ++--
>  libavcodec/exr.c                              |  6 +-
>  libavcodec/flacenc.c                          |  6 +-
>  libavcodec/fraps.c                            | 10 ++--
>  libavcodec/hevcdec.c                          |  4 +-
>  libavcodec/hevcdec.h                          |  4 +-
>  libavcodec/huffyuvdec.c                       | 14 ++---
>  libavcodec/huffyuvenc.c                       |  8 +--
>  libavcodec/imc.c                              |  6 +-
>  libavcodec/imm4.c                             | 12 ++--
>  libavcodec/mdec.c                             |  6 +-
>  libavcodec/mimic.c                            | 12 ++--
>  libavcodec/mobiclip.c                         |  6 +-
>  libavcodec/motionpixels.c                     | 10 ++--
>  libavcodec/mpc.h                              |  4 +-
>  libavcodec/mpc7.c                             |  8 +--
>  libavcodec/rawdec.c                           |  8 +--
>  libavcodec/riscv/Makefile                     |  3 -
>  libavcodec/shorten.c                          |  7 ++-
>  libavcodec/truemotion2.c                      | 11 ++--
>  libavcodec/truespeech.c                       |  8 +--
>  libavcodec/utvideo.h                          |  4 +-
>  libavcodec/utvideodec.c                       | 16 +++---
>  libavcodec/utvideoenc.c                       | 10 ++--
>  libavcodec/x86/Makefile                       |  2 -
>  libavcodec/ylc.c                              | 18 +++---
>  libavutil/Makefile                            |  2 +
>  {libavcodec => libavutil}/bswapdsp.c          | 17 +++---
>  {libavcodec => libavutil}/bswapdsp.h          | 16 +++---
>  libavutil/riscv/Makefile                      |  7 ++-
>  .../riscv/bswapdsp_init.c                     |  9 +--
>  .../riscv/bswapdsp_rvb.S                      |  0
>  .../riscv/bswapdsp_rvv.S                      |  0
>  libavutil/version.h                           |  2 +-
>  libavutil/x86/Makefile                        |  8 ++-
>  {libavcodec => libavutil}/x86/bswapdsp.asm    |  4 +-
>  {libavcodec => libavutil}/x86/bswapdsp_init.c | 17 +++---
>  tests/checkasm/Makefile                       |  2 +-
>  tests/checkasm/bswapdsp.c                     |  8 +--
>  tests/checkasm/checkasm.c                     |  4 +-
>  53 files changed, 216 insertions(+), 222 deletions(-)
>  rename {libavcodec => libavutil}/bswapdsp.c (80%)
>  rename {libavcodec => libavutil}/bswapdsp.h (71%)
>  rename {libavcodec => libavutil}/riscv/bswapdsp_init.c (85%)
>  rename {libavcodec => libavutil}/riscv/bswapdsp_rvb.S (100%)
>  rename {libavcodec => libavutil}/riscv/bswapdsp_rvv.S (100%)
>  rename {libavcodec => libavutil}/x86/bswapdsp.asm (97%)
>  rename {libavcodec => libavutil}/x86/bswapdsp_init.c (80%)
> 
> diff --git a/configure b/configure
> index f4eedfc207..03b502ea37 100755
> --- a/configure
> +++ b/configure
> @@ -2421,7 +2421,6 @@ CONFIG_EXTRA="
>      audio_frame_queue
>      audiodsp
>      blockdsp
> -    bswapdsp
>      cabac
>      cbs
>      cbs_av1
> @@ -2749,8 +2748,8 @@ aac_decoder_select="adts_header mpeg4audio sinewin"
>  aac_fixed_decoder_select="adts_header mpeg4audio"
>  aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
>  aac_latm_decoder_select="aac_decoder aac_latm_parser"
> -ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert"
> -ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp"
> +ac3_decoder_select="ac3_parser ac3dsp fmtconvert"
> +ac3_fixed_decoder_select="ac3_parser ac3dsp"
>  ac3_encoder_select="ac3dsp audiodsp me_cmp"
>  ac3_fixed_encoder_select="ac3dsp audiodsp me_cmp"
>  acelp_kelvin_decoder_select="audiodsp"
> @@ -2759,20 +2758,20 @@ adpcm_g722_encoder_select="g722dsp"
>  agm_decoder_select="idctdsp"
>  aic_decoder_select="golomb idctdsp"
>  alac_encoder_select="lpc"
> -als_decoder_select="bswapdsp mpeg4audio"
> +als_decoder_select="mpeg4audio"
>  amrnb_decoder_select="lsp"
>  amrwb_decoder_select="lsp"
>  amv_decoder_select="sp5x_decoder exif"
>  amv_encoder_select="jpegtables mpegvideoenc"
> -ape_decoder_select="bswapdsp llauddsp"
> +ape_decoder_select="llauddsp"
>  apng_decoder_select="inflate_wrapper"
>  apng_encoder_select="deflate_wrapper llvidencdsp"
>  aptx_encoder_select="audio_frame_queue"
>  aptx_hd_encoder_select="audio_frame_queue"
> -asv1_decoder_select="blockdsp bswapdsp idctdsp"
> -asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
> -asv2_decoder_select="blockdsp bswapdsp idctdsp"
> -asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
> +asv1_decoder_select="idctdsp"
> +asv1_encoder_select="aandcttables fdctdsp pixblockdsp"
> +asv2_decoder_select="idctdsp"
> +asv2_encoder_select="aandcttables fdctdsp pixblockdsp"
>  atrac1_decoder_select="sinewin"
>  av1_decoder_select="av1_frame_split_bsf cbs_av1"
>  bink_decoder_select="blockdsp hpeldsp"
> @@ -2780,7 +2779,6 @@ binkaudio_dct_decoder_select="wma_freqs"
>  binkaudio_rdft_decoder_select="wma_freqs"
>  cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
>  clearvideo_decoder_select="idctdsp"
> -cllc_decoder_select="bswapdsp"
>  comfortnoise_encoder_select="lpc"
>  cook_decoder_select="audiodsp sinewin"
>  cri_decoder_select="mjpeg_decoder"
> @@ -2795,9 +2793,9 @@ dxa_decoder_deps="zlib"
>  dxv_decoder_select="lzf texturedsp"
>  eac3_decoder_select="ac3_decoder"
>  eac3_encoder_select="ac3_encoder"
> -eamad_decoder_select="aandcttables blockdsp bswapdsp"
> +eamad_decoder_select="aandcttables blockdsp"
>  eatgq_decoder_select="aandcttables"
> -eatqi_decoder_select="aandcttables blockdsp bswapdsp"
> +eatqi_decoder_select="aandcttables blockdsp"
>  exr_decoder_deps="zlib"
>  exr_encoder_deps="zlib"
>  ffv1_decoder_select="rangecoder"
> @@ -2805,15 +2803,15 @@ ffv1_encoder_select="rangecoder"
>  ffvhuff_decoder_select="huffyuv_decoder"
>  ffvhuff_encoder_select="huffyuv_encoder"
>  fic_decoder_select="golomb"
> -flac_encoder_select="bswapdsp lpc"
> +flac_encoder_select="lpc"
>  flashsv2_decoder_select="inflate_wrapper"
>  flashsv2_encoder_select="deflate_wrapper"
>  flashsv_decoder_select="inflate_wrapper"
>  flashsv_encoder_deps="zlib"
>  flv_decoder_select="h263_decoder"
>  flv_encoder_select="h263_encoder"
> -fourxm_decoder_select="blockdsp bswapdsp"
> -fraps_decoder_select="bswapdsp huffman"
> +fourxm_decoder_select="blockdsp"
> +fraps_decoder_select="huffman"
>  g2m_decoder_deps="zlib"
>  g2m_decoder_select="blockdsp idctdsp jpegtables"
>  g729_decoder_select="audiodsp"
> @@ -2829,13 +2827,13 @@ h264_decoder_suggest="error_resilience"
>  hap_decoder_select="snappy texturedsp"
>  hap_encoder_deps="libsnappy"
>  hap_encoder_select="texturedspenc"
> -hevc_decoder_select="bswapdsp cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
> -huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
> -huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
> +hevc_decoder_select="cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
> +huffyuv_decoder_select="huffyuvdsp llviddsp"
> +huffyuv_encoder_select="huffman huffyuvencdsp llvidencdsp"
>  hymt_decoder_select="huffyuv_decoder"
>  iac_decoder_select="imc_decoder"
> -imc_decoder_select="bswapdsp sinewin"
> -imm4_decoder_select="bswapdsp idctdsp"
> +imc_decoder_select="sinewin"
> +imm4_decoder_select="idctdsp"
>  imm5_decoder_select="h264_decoder hevc_decoder"
>  indeo3_decoder_select="hpeldsp"
>  indeo4_decoder_select="ividsp"
> @@ -2849,16 +2847,15 @@ ljpeg_encoder_select="jpegtables"
>  lscr_decoder_select="inflate_wrapper"
>  magicyuv_decoder_select="llviddsp"
>  magicyuv_encoder_select="llvidencdsp"
> -mdec_decoder_select="blockdsp bswapdsp idctdsp"
> +mdec_decoder_select="blockdsp idctdsp"
>  metasound_decoder_select="lsp sinewin"
> -mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
> +mimic_decoder_select="blockdsp hpeldsp idctdsp"
>  mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
>  mjpeg_encoder_select="jpegtables mpegvideoenc"
>  mjpegb_decoder_select="mjpeg_decoder"
>  mlp_decoder_select="mlp_parser"
>  mlp_encoder_select="lpc audio_frame_queue"
> -mobiclip_decoder_select="bswapdsp golomb"
> -motionpixels_decoder_select="bswapdsp"
> +mobiclip_decoder_select="golomb"
>  mp1_decoder_select="mpegaudio"
>  mp1float_decoder_select="mpegaudio"
>  mp2_decoder_select="mpegaudio"
> @@ -2869,7 +2866,7 @@ mp3adufloat_decoder_select="mpegaudio"
>  mp3float_decoder_select="mpegaudio"
>  mp3on4_decoder_select="mpegaudio mpeg4audio"
>  mp3on4float_decoder_select="mpegaudio mpeg4audio"
> -mpc7_decoder_select="bswapdsp mpegaudiodsp"
> +mpc7_decoder_select="mpegaudiodsp"
>  mpc8_decoder_select="mpegaudiodsp"
>  mpegvideo_decoder_select="mpegvideodec"
>  mpeg1video_decoder_select="mpegvideodec"
> @@ -2909,7 +2906,6 @@ ra_144_decoder_select="audiodsp"
>  ra_144_encoder_select="audio_frame_queue lpc audiodsp"
>  ralf_decoder_select="golomb"
>  rasc_decoder_select="inflate_wrapper"
> -rawvideo_decoder_select="bswapdsp"
>  rscc_decoder_deps="zlib"
>  rv10_decoder_select="h263_decoder"
>  rv10_encoder_select="h263_encoder"
> @@ -2918,7 +2914,6 @@ rv20_encoder_select="h263_encoder"
>  rv30_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
>  rv40_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
>  screenpresso_decoder_deps="zlib"
> -shorten_decoder_select="bswapdsp"
>  sipr_decoder_select="lsp"
>  smvjpeg_decoder_select="mjpeg_decoder"
>  snow_decoder_select="dwt h264qpel hpeldsp rangecoder videodsp"
> @@ -2944,13 +2939,11 @@ tiff_decoder_suggest="zlib lzma"
>  tiff_encoder_suggest="zlib"
>  truehd_decoder_select="mlp_parser"
>  truehd_encoder_select="lpc audio_frame_queue"
> -truemotion2_decoder_select="bswapdsp"
> -truespeech_decoder_select="bswapdsp"
>  tscc_decoder_select="inflate_wrapper"
>  twinvq_decoder_select="lsp sinewin"
>  txd_decoder_select="texturedsp"
> -utvideo_decoder_select="bswapdsp llviddsp"
> -utvideo_encoder_select="bswapdsp huffman llvidencdsp"
> +utvideo_decoder_select="llviddsp"
> +utvideo_encoder_select="huffman llvidencdsp"
>  vble_decoder_select="llviddsp"
>  vbn_decoder_select="texturedsp"
>  vbn_encoder_select="texturedspenc"
> @@ -2983,7 +2976,6 @@ wmv3_decoder_select="vc1_decoder"
>  wmv3image_decoder_select="wmv3_decoder"
>  xma1_decoder_select="wmapro_decoder"
>  xma2_decoder_select="wmapro_decoder"
> -ylc_decoder_select="bswapdsp"
>  zerocodec_decoder_select="inflate_wrapper"
>  zlib_decoder_select="inflate_wrapper"
>  zlib_encoder_select="deflate_wrapper"
> diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c
> index 5636fdef2d..b99f8be172 100644
> --- a/libavcodec/4xm.c
> +++ b/libavcodec/4xm.c
> @@ -27,6 +27,7 @@
>  #include <inttypes.h>
>  
>  #include "libavutil/avassert.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/frame.h"
>  #include "libavutil/imgutils.h"
>  #include "libavutil/intreadwrite.h"
> @@ -34,7 +35,6 @@
>  #include "libavutil/thread.h"
>  #include "avcodec.h"
>  #include "blockdsp.h"
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "codec_internal.h"
>  #include "decode.h"
> @@ -138,7 +138,7 @@ typedef struct CFrameBuffer {
>  typedef struct FourXContext {
>      AVCodecContext *avctx;
>      BlockDSPContext bdsp;
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>      uint16_t *frame_buffer;
>      uint16_t *last_frame_buffer;
>      GetBitContext pre_gb;          ///< ac/dc prefix
> @@ -469,8 +469,8 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length)
>                            bitstream_size);
>      if (!f->bitstream_buffer)
>          return AVERROR(ENOMEM);
> -    f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) (buf + extra),
> -                       bitstream_size / 4);
> +    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *) (buf + extra),
> +                         bitstream_size / 4);
>      init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size);
>  
>      wordstream_offset = extra + bitstream_size;
> @@ -813,8 +813,8 @@ 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,
> -                       prestream_size / 4);
> +    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *) prestream,
> +                         prestream_size / 4);
>      init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);
>  
>      f->last_dc = 0 * 128 * 8 * 8;
> @@ -1013,7 +1013,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>  
>      f->version = AV_RL32(avctx->extradata) >> 16;
>      ff_blockdsp_init(&f->bdsp);
> -    ff_bswapdsp_init(&f->bbdsp);
> +    av_bswapdsp_init(&f->bbdsp);
>      f->avctx = avctx;
>  
>      if (f->version > 2)
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index 98841ed07c..6b9b7a48dd 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -70,7 +70,6 @@ OBJS-$(CONFIG_AUDIO_FRAME_QUEUE)       += audio_frame_queue.o
>  OBJS-$(CONFIG_ATSC_A53)                += atsc_a53.o
>  OBJS-$(CONFIG_AUDIODSP)                += audiodsp.o
>  OBJS-$(CONFIG_BLOCKDSP)                += blockdsp.o
> -OBJS-$(CONFIG_BSWAPDSP)                += bswapdsp.o
>  OBJS-$(CONFIG_CABAC)                   += cabac.o
>  OBJS-$(CONFIG_CBS)                     += cbs.o cbs_bsf.o
>  OBJS-$(CONFIG_CBS_AV1)                 += cbs_av1.o
> diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
> index 1f2949dcfd..218f4e96d2 100644
> --- a/libavcodec/ac3dec.c
> +++ b/libavcodec/ac3dec.c
> @@ -31,13 +31,13 @@
>  #include <math.h>
>  #include <string.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/channel_layout.h"
>  #include "libavutil/crc.h"
>  #include "libavutil/downmix_info.h"
>  #include "libavutil/intmath.h"
>  #include "libavutil/opt.h"
>  #include "libavutil/thread.h"
> -#include "bswapdsp.h"
>  #include "aac_ac3_parser.h"
>  #include "ac3_parser_internal.h"
>  #include "ac3dec.h"
> @@ -229,7 +229,7 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx)
>          return ret;
>  
>      AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>  
>  #if (USE_FIXED)
>      s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags & AV_CODEC_FLAG_BITEXACT);
> diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
> index 138b462abb..8cd6d83e9a 100644
> --- a/libavcodec/ac3dec.h
> +++ b/libavcodec/ac3dec.h
> @@ -51,6 +51,7 @@
>  #define AVCODEC_AC3DEC_H
>  
>  #include "libavutil/tx.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/float_dsp.h"
>  #include "libavutil/fixed_dsp.h"
>  #include "libavutil/lfg.h"
> @@ -59,7 +60,6 @@
>  #include "ac3.h"
>  #include "ac3dsp.h"
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "get_bits.h"
>  #include "fmtconvert.h"
>  
> @@ -228,7 +228,7 @@ typedef struct AC3DecodeContext {
>  ///@}
>  
>  ///@name Optimization
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>  #if USE_FIXED
>      AVFixedDSPContext *fdsp;
>  #else
> diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
> index 4605b2248f..af41eda49f 100644
> --- a/libavcodec/alsdec.c
> +++ b/libavcodec/alsdec.c
> @@ -32,12 +32,12 @@
>  #include "unary.h"
>  #include "mpeg4audio.h"
>  #include "bgmc.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "internal.h"
>  #include "mlz.h"
>  #include "libavutil/samplefmt.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/crc.h"
>  #include "libavutil/softfloat_ieee754.h"
>  #include "libavutil/intfloat.h"
> @@ -197,7 +197,7 @@ typedef struct ALSDecContext {
>      AVCodecContext *avctx;
>      ALSSpecificConfig sconf;
>      GetBitContext gb;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      const AVCRC *crc_table;
>      uint32_t crc_org;               ///< CRC value of the original input data
>      uint32_t crc;                   ///< CRC value calculated from decoded data
> @@ -1899,9 +1899,9 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
>                           sample++)
>                          *dest++ = av_bswap16(src[sample]);
>                  } else {
> -                    ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
> -                                        (uint32_t *) frame->data[0],
> -                                        ctx->cur_frame_length * channels);
> +                    ctx->bdsp.bswap32_buf((uint32_t *) ctx->crc_buffer,
> +                                          (uint32_t *) frame->data[0],
> +                                          ctx->cur_frame_length * channels);
>                  }
>                  crc_source = ctx->crc_buffer;
>              } else {
> @@ -2164,7 +2164,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>          }
>      }
>  
> -    ff_bswapdsp_init(&ctx->bdsp);
> +    av_bswapdsp_init(&ctx->bdsp);
>  
>      return 0;
>  }
> diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
> index c08d13d6c2..7b9fa74416 100644
> --- a/libavcodec/apedec.c
> +++ b/libavcodec/apedec.c
> @@ -23,12 +23,12 @@
>  #include <inttypes.h>
>  
>  #include "libavutil/avassert.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/channel_layout.h"
>  #include "libavutil/crc.h"
>  #include "libavutil/opt.h"
>  #include "lossless_audiodsp.h"
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "codec_internal.h"
>  #include "decode.h"
> @@ -153,7 +153,7 @@ typedef struct APEPredictor64 {
>  typedef struct APEContext {
>      AVClass *class;                          ///< class for AVOptions
>      AVCodecContext *avctx;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      LLAudDSPContext adsp;
>      int channels;
>      int samples;                             ///< samples left to decode in current frame
> @@ -313,7 +313,7 @@ static av_cold int ape_decode_init(AVCodecContext *avctx)
>          s->predictor_decode_stereo = predictor_decode_stereo_3950;
>      }
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>      ff_llauddsp_init(&s->adsp);
>      av_channel_layout_uninit(&avctx->ch_layout);
>      avctx->ch_layout = (channels == 2) ? (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO
> @@ -1499,8 +1499,8 @@ 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,
> -                          buf_size >> 2);
> +        s->bdsp.bswap32_buf((uint32_t *) s->data, (const uint32_t *) buf,
> +                            buf_size >> 2);
>          memset(s->data + (buf_size & ~3), 0, buf_size & 3);
>          s->ptr = s->data;
>          s->data_end = s->data + buf_size;
> diff --git a/libavcodec/asv.c b/libavcodec/asv.c
> index 3aa08c30c0..bfe669d25e 100644
> --- a/libavcodec/asv.c
> +++ b/libavcodec/asv.c
> @@ -26,10 +26,10 @@
>  #include <stdint.h>
>  
>  #include "libavutil/attributes.h"
> +#include "libavutil/bswapdsp.h"
>  
>  #include "asv.h"
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  
>  const uint8_t ff_asv_scantab[64] = {
>      0x00, 0x08, 0x01, 0x09, 0x10, 0x18, 0x11, 0x19,
> @@ -92,7 +92,7 @@ av_cold void ff_asv_common_init(AVCodecContext *avctx)
>  {
>      ASVCommonContext *const a = avctx->priv_data;
>  
> -    ff_bswapdsp_init(&a->bbdsp);
> +    av_bswapdsp_init(&a->bbdsp);
>  
>      a->mb_width   = (avctx->width  + 15) / 16;
>      a->mb_height  = (avctx->height + 15) / 16;
> diff --git a/libavcodec/asv.h b/libavcodec/asv.h
> index 7c0983a497..f7e00d8ef2 100644
> --- a/libavcodec/asv.h
> +++ b/libavcodec/asv.h
> @@ -29,11 +29,11 @@
>  #include <stdint.h>
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
> +#include "libavutil/bswapdsp.h"
>  
>  typedef struct ASVCommonContext {
>      AVCodecContext *avctx;
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>      int mb_width;
>      int mb_height;
>      int mb_width2;
> diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c
> index 699aab9f8f..25dab7473f 100644
> --- a/libavcodec/asvdec.c
> +++ b/libavcodec/asvdec.c
> @@ -253,8 +253,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
>          if (!a->bitstream_buffer)
>              return AVERROR(ENOMEM);
>  
> -        c->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer,
> -                           (const uint32_t *) buf, buf_size / 4);
> +        c->bbdsp.bswap32_buf((uint32_t *) a->bitstream_buffer,
> +                             (const uint32_t *) 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..2bf67d686c 100644
> --- a/libavcodec/asvenc.c
> +++ b/libavcodec/asvenc.c
> @@ -309,8 +309,8 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
>      size = (put_bytes_output(&a->pb) + 3) / 4;
>  
>      if (avctx->codec_id == AV_CODEC_ID_ASV1) {
> -        c->bbdsp.bswap_buf((uint32_t *) pkt->data,
> -                           (uint32_t *) pkt->data, size);
> +        c->bbdsp.bswap32_buf((uint32_t *) pkt->data,
> +                             (uint32_t *) pkt->data, size);
>      }
>  
>      pkt->size   = size * 4;
> diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
> index 911717b68d..dede8591c5 100644
> --- a/libavcodec/cllc.c
> +++ b/libavcodec/cllc.c
> @@ -22,8 +22,8 @@
>  
>  #include <inttypes.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/intreadwrite.h"
> -#include "bswapdsp.h"
>  #include "canopus.h"
>  #include "get_bits.h"
>  #include "avcodec.h"
> @@ -36,7 +36,7 @@
>  
>  typedef struct CLLCContext {
>      AVCodecContext *avctx;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>  
>      uint8_t *swapped_buf;
>      int      swapped_buf_size;
> @@ -486,7 +486,7 @@ static av_cold int cllc_decode_init(AVCodecContext *avctx)
>      ctx->swapped_buf      = NULL;
>      ctx->swapped_buf_size = 0;
>  
> -    ff_bswapdsp_init(&ctx->bdsp);
> +    av_bswapdsp_init(&ctx->bdsp);
>  
>      return 0;
>  }
> diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
> index 45012c62b8..0ffcd14105 100644
> --- a/libavcodec/eamad.c
> +++ b/libavcodec/eamad.c
> @@ -28,12 +28,12 @@
>   * http://wiki.multimedia.cx/index.php?title=Electronic_Arts_MAD
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/mem_internal.h"
>  
>  #include "avcodec.h"
>  #include "blockdsp.h"
>  #include "bytestream.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "get_bits.h"
> @@ -50,7 +50,7 @@
>  typedef struct MadContext {
>      AVCodecContext *avctx;
>      BlockDSPContext bdsp;
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>      AVFrame *last_frame;
>      GetBitContext gb;
>      void *bitstream_buf;
> @@ -67,7 +67,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      s->avctx = avctx;
>      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>      ff_blockdsp_init(&s->bdsp);
> -    ff_bswapdsp_init(&s->bbdsp);
> +    av_bswapdsp_init(&s->bbdsp);
>      ff_mpeg12_init_vlcs();
>  
>      s->last_frame = av_frame_alloc();
> diff --git a/libavcodec/eatqi.c b/libavcodec/eatqi.c
> index e4f12b3db2..b1475b16c4 100644
> --- a/libavcodec/eatqi.c
> +++ b/libavcodec/eatqi.c
> @@ -26,11 +26,11 @@
>   * @see http://wiki.multimedia.cx/index.php?title=Electronic_Arts_TQI
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/mem_internal.h"
>  
>  #include "avcodec.h"
>  #include "blockdsp.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "get_bits.h"
> @@ -43,7 +43,7 @@ typedef struct TqiContext {
>      AVCodecContext *avctx;
>      GetBitContext gb;
>      BlockDSPContext bdsp;
> -    BswapDSPContext bsdsp;
> +    AVBSwapDSPContext bsdsp;
>  
>      void *bitstream_buf;
>      unsigned int bitstream_buf_size;
> @@ -60,7 +60,7 @@ static av_cold int tqi_decode_init(AVCodecContext *avctx)
>      TqiContext *t = avctx->priv_data;
>  
>      ff_blockdsp_init(&t->bdsp);
> -    ff_bswapdsp_init(&t->bsdsp);
> +    av_bswapdsp_init(&t->bsdsp);
>  
>      avctx->framerate = (AVRational){ 15, 1 };
>      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
> @@ -148,8 +148,8 @@ 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.bswap32_buf(t->bitstream_buf, (const uint32_t *) 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/exr.c b/libavcodec/exr.c
> index 6a0af96ce4..e22045a1a9 100644
> --- a/libavcodec/exr.c
> +++ b/libavcodec/exr.c
> @@ -47,7 +47,7 @@
>  #include "bytestream.h"
>  
>  #if HAVE_BIGENDIAN
> -#include "bswapdsp.h"
> +#include "libavutil/bswapdsp.h"
>  #endif
>  
>  #include "codec_internal.h"
> @@ -150,7 +150,7 @@ typedef struct EXRContext {
>      ExrDSPContext dsp;
>  
>  #if HAVE_BIGENDIAN
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>  #endif
>  
>      enum ExrCompr compression;
> @@ -2224,7 +2224,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      ff_exrdsp_init(&s->dsp);
>  
>  #if HAVE_BIGENDIAN
> -    ff_bswapdsp_init(&s->bbdsp);
> +    av_bswapdsp_init(&s->bbdsp);
>  #endif
>  
>      trc_func = avpriv_get_trc_function_from_trc(s->apply_trc_type);
> diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
> index bca71b3780..1082910974 100644
> --- a/libavcodec/flacenc.c
> +++ b/libavcodec/flacenc.c
> @@ -20,6 +20,7 @@
>   */
>  
>  #include "libavutil/avassert.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/channel_layout.h"
>  #include "libavutil/crc.h"
>  #include "libavutil/intmath.h"
> @@ -27,7 +28,6 @@
>  #include "libavutil/opt.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "encode.h"
>  #include "put_bits.h"
> @@ -123,7 +123,7 @@ typedef struct FlacEncodeContext {
>      struct AVMD5 *md5ctx;
>      uint8_t *md5_buffer;
>      unsigned int md5_buffer_size;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      FLACEncDSPContext flac_dsp;
>  
>      int flushed;
> @@ -454,7 +454,7 @@ static av_cold int flac_encode_init(AVCodecContext *avctx)
>      ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
>                        s->options.max_prediction_order, FF_LPC_TYPE_LEVINSON);
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>      ff_flacencdsp_init(&s->flac_dsp);
>  
>      dprint_compression_options(s);
> diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
> index 4c4c46b602..33e24a5bfb 100644
> --- a/libavcodec/fraps.c
> +++ b/libavcodec/fraps.c
> @@ -35,11 +35,11 @@
>  
>  #define CACHED_BITSTREAM_READER HAVE_FAST_64BIT
>  #define UNCHECKED_BITSTREAM_READER 1
> +#include "libavutil/bswapdsp.h"
>  #include "avcodec.h"
>  #include "get_bits.h"
>  #include "huffman.h"
>  #include "bytestream.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "thread.h"
>  
> @@ -51,7 +51,7 @@
>   */
>  typedef struct FrapsContext {
>      AVCodecContext *avctx;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      uint8_t *tmpbuf;
>      int tmpbuf_size;
>  } FrapsContext;
> @@ -69,7 +69,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      s->avctx  = avctx;
>      s->tmpbuf = NULL;
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>  
>      return 0;
>  }
> @@ -106,8 +106,8 @@ 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.bswap32_buf((uint32_t *) s->tmpbuf,
> +                        (const uint32_t *) 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..e9cef539b2 100644
> --- a/libavcodec/hevcdec.c
> +++ b/libavcodec/hevcdec.c
> @@ -27,6 +27,7 @@
>  
>  #include "libavutil/attributes.h"
>  #include "libavutil/avstring.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/common.h"
>  #include "libavutil/display.h"
>  #include "libavutil/film_grain_params.h"
> @@ -37,7 +38,6 @@
>  #include "libavutil/pixdesc.h"
>  #include "libavutil/timecode.h"
>  
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "cabac_functions.h"
>  #include "codec_internal.h"
> @@ -3527,7 +3527,7 @@ static av_cold int hevc_init_context(AVCodecContext *avctx)
>      if (!s->md5_ctx)
>          return AVERROR(ENOMEM);
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>  
>      s->dovi_ctx.logctx = avctx;
>      s->eos = 0;
> diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
> index 9d3f4adbb3..f73ff352d1 100644
> --- a/libavcodec/hevcdec.h
> +++ b/libavcodec/hevcdec.h
> @@ -25,11 +25,11 @@
>  
>  #include <stdatomic.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/buffer.h"
>  #include "libavutil/mem_internal.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "cabac.h"
>  #include "dovi_rpu.h"
>  #include "get_bits.h"
> @@ -541,7 +541,7 @@ typedef struct HEVCContext {
>      HEVCPredContext hpc;
>      HEVCDSPContext hevcdsp;
>      VideoDSPContext vdsp;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      H274FilmGrainDatabase h274db;
>      int8_t *qp_y_tab;
>      uint8_t *horizontal_bs;
> diff --git a/libavcodec/huffyuvdec.c b/libavcodec/huffyuvdec.c
> index 7d3515cc88..5d3c7a3828 100644
> --- a/libavcodec/huffyuvdec.c
> +++ b/libavcodec/huffyuvdec.c
> @@ -35,13 +35,13 @@
>  #include "config_components.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "get_bits.h"
>  #include "huffyuv.h"
>  #include "huffyuvdsp.h"
>  #include "lossless_videodsp.h"
>  #include "thread.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/imgutils.h"
>  #include "libavutil/pixdesc.h"
>  
> @@ -76,7 +76,7 @@ typedef struct HYuvDecContext {
>      VLC vlc[8];                             //Y,U,V,A,YY,YU,YV,AA
>      uint8_t *bitstream_buffer;
>      unsigned int bitstream_buffer_size;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      HuffYUVDSPContext hdsp;
>      LLVidDSPContext llviddsp;
>  } HYuvDecContext;
> @@ -340,7 +340,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>  
>      s->flags = avctx->flags;
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>      ff_huffyuvdsp_init(&s->hdsp, avctx->pix_fmt);
>      ff_llviddsp_init(&s->llviddsp);
>      memset(s->vlc, 0, 4 * sizeof(VLC));
> @@ -1239,8 +1239,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
>      if (!s->bitstream_buffer)
>          return AVERROR(ENOMEM);
>  
> -    s->bdsp.bswap_buf((uint32_t *) s->bitstream_buffer,
> -                      (const uint32_t *) buf, buf_size / 4);
> +    s->bdsp.bswap32_buf((uint32_t *) s->bitstream_buffer,
> +                        (const uint32_t *) buf, buf_size / 4);
>  
>      if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0)
>          return ret;
> @@ -1282,8 +1282,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
>                  return AVERROR_INVALIDDATA;
>  
>              y_offset = height - (slice + 1) * slice_height;
> -            s->bdsp.bswap_buf((uint32_t *)s->bitstream_buffer,
> -                              (const uint32_t *)(buf + slice_offset), slice_size / 4);
> +            s->bdsp.bswap32_buf((uint32_t *)s->bitstream_buffer,
> +                                (const uint32_t *)(buf + slice_offset), slice_size / 4);
>          } else {
>              y_offset = 0;
>              slice_offset = 0;
> diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c
> index db274e37ad..6230e107a3 100644
> --- a/libavcodec/huffyuvenc.c
> +++ b/libavcodec/huffyuvenc.c
> @@ -31,7 +31,6 @@
>  #include "config_components.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "encode.h"
>  #include "huffyuv.h"
> @@ -39,6 +38,7 @@
>  #include "huffyuvencdsp.h"
>  #include "lossless_videoencdsp.h"
>  #include "put_bits.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/opt.h"
>  #include "libavutil/pixdesc.h"
>  
> @@ -68,7 +68,7 @@ typedef struct HYuvEncContext {
>      uint64_t stats[4][MAX_VLC_N];
>      uint8_t len[4][MAX_VLC_N];
>      uint32_t bits[4][MAX_VLC_N];
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      HuffYUVEncDSPContext hencdsp;
>      LLVidEncDSPContext llvidencdsp;
>      int non_determ; // non-deterministic, multi-threaded encoder allowed
> @@ -247,7 +247,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
>      s->avctx = avctx;
>      s->flags = avctx->flags;
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>      ff_huffyuvencdsp_init(&s->hencdsp, avctx->pix_fmt);
>      ff_llvidencdsp_init(&s->llvidencdsp);
>  
> @@ -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.bswap32_buf((uint32_t *) pkt->data, (uint32_t *) pkt->data, size);
>      }
>  
>      s->picture_number++;
> diff --git a/libavcodec/imc.c b/libavcodec/imc.c
> index 174332de4d..185da01323 100644
> --- a/libavcodec/imc.c
> +++ b/libavcodec/imc.c
> @@ -34,6 +34,7 @@
>  #include <math.h>
>  #include <stddef.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/channel_layout.h"
>  #include "libavutil/ffmath.h"
>  #include "libavutil/float_dsp.h"
> @@ -43,7 +44,6 @@
>  #include "libavutil/tx.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "get_bits.h"
> @@ -92,7 +92,7 @@ typedef struct IMCContext {
>      GetBitContext gb;
>  
>      AVFloatDSPContext *fdsp;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      AVTXContext *mdct;
>      av_tx_fn mdct_fn;
>      float *out_samples;
> @@ -243,7 +243,7 @@ static av_cold int imc_decode_init(AVCodecContext *avctx)
>      if (ret < 0)
>          return ret;
>  
> -    ff_bswapdsp_init(&q->bdsp);
> +    av_bswapdsp_init(&q->bdsp);
>  
>      avctx->sample_fmt     = AV_SAMPLE_FMT_FLTP;
>  
> diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c
> index ccec5dff43..ae391b343b 100644
> --- a/libavcodec/imm4.c
> +++ b/libavcodec/imm4.c
> @@ -23,11 +23,11 @@
>  #include <stddef.h>
>  #include <string.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/mem_internal.h"
>  #include "libavutil/thread.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "copy_block.h"
> @@ -40,7 +40,7 @@
>  #define BLOCK_VLC_BITS  12
>  
>  typedef struct IMM4Context {
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      GetBitContext  gb;
>  
>      AVFrame *prev_frame;
> @@ -368,9 +368,9 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
>      if (!s->bitstream)
>          return AVERROR(ENOMEM);
>  
> -    s->bdsp.bswap_buf((uint32_t *)s->bitstream,
> -                      (uint32_t *)avpkt->data,
> -                      (avpkt->size + 3) >> 2);
> +    s->bdsp.bswap32_buf((uint32_t *)s->bitstream,
> +                        (uint32_t *)avpkt->data,
> +                        (avpkt->size + 3) >> 2);
>  
>      if ((ret = init_get_bits8(gb, s->bitstream, FFALIGN(avpkt->size, 4))) < 0)
>          return ret;
> @@ -495,7 +495,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      static AVOnce init_static_once = AV_ONCE_INIT;
>      IMM4Context *s = avctx->priv_data;
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>      ff_idctdsp_init(&s->idsp, avctx);
>  
>      s->prev_frame = av_frame_alloc();
> diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
> index 640b671a0f..269a3afdfe 100644
> --- a/libavcodec/mdec.c
> +++ b/libavcodec/mdec.c
> @@ -27,11 +27,11 @@
>   * This is very similar to intra-only MPEG-1.
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/mem_internal.h"
>  
>  #include "avcodec.h"
>  #include "blockdsp.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "idctdsp.h"
>  #include "mpeg12data.h"
> @@ -41,7 +41,7 @@
>  typedef struct MDECContext {
>      AVCodecContext *avctx;
>      BlockDSPContext bdsp;
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>      IDCTDSPContext idsp;
>      GetBitContext gb;
>      uint8_t permutated_scantable[64];
> @@ -219,7 +219,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      a->avctx           = avctx;
>  
>      ff_blockdsp_init(&a->bdsp);
> -    ff_bswapdsp_init(&a->bbdsp);
> +    av_bswapdsp_init(&a->bbdsp);
>      ff_idctdsp_init(&a->idsp, avctx);
>      ff_mpeg12_init_vlcs();
>      ff_permute_scantable(a->permutated_scantable, ff_zigzag_direct,
> diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
> index 891471b30e..333085f8f3 100644
> --- a/libavcodec/mimic.c
> +++ b/libavcodec/mimic.c
> @@ -21,6 +21,7 @@
>  
>  #include <stdint.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/mem_internal.h"
>  #include "libavutil/thread.h"
>  
> @@ -30,7 +31,6 @@
>  #include "decode.h"
>  #include "get_bits.h"
>  #include "bytestream.h"
> -#include "bswapdsp.h"
>  #include "hpeldsp.h"
>  #include "idctdsp.h"
>  #include "thread.h"
> @@ -58,7 +58,7 @@ typedef struct MimicContext {
>      GetBitContext   gb;
>      uint8_t         permutated_scantable[64];
>      BlockDSPContext bdsp;
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>      HpelDSPContext  hdsp;
>      IDCTDSPContext  idsp;
>  
> @@ -134,7 +134,7 @@ static av_cold int mimic_decode_init(AVCodecContext *avctx)
>      ctx->cur_index  = 15;
>  
>      ff_blockdsp_init(&ctx->bdsp);
> -    ff_bswapdsp_init(&ctx->bbdsp);
> +    av_bswapdsp_init(&ctx->bbdsp);
>      ff_hpeldsp_init(&ctx->hdsp, avctx->flags);
>      ff_idctdsp_init(&ctx->idsp, avctx);
>      ff_permute_scantable(ctx->permutated_scantable, col_zag, ctx->idsp.idct_permutation);
> @@ -411,9 +411,9 @@ static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
>      if (!ctx->swap_buf)
>          return AVERROR(ENOMEM);
>  
> -    ctx->bbdsp.bswap_buf(ctx->swap_buf,
> -                         (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
> -                         swap_buf_size >> 2);
> +    ctx->bbdsp.bswap32_buf(ctx->swap_buf,
> +                           (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
> +                           swap_buf_size >> 2);
>      init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3);
>  
>      res = decode(ctx, quality, num_coeffs, !is_pframe);
> diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c
> index c3b2383dbc..79c6953ee4 100644
> --- a/libavcodec/mobiclip.c
> +++ b/libavcodec/mobiclip.c
> @@ -24,10 +24,10 @@
>  #include <inttypes.h>
>  
>  #include "libavutil/avassert.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/thread.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "get_bits.h"
> @@ -271,7 +271,7 @@ typedef struct MobiClipContext {
>      MotionXY *motion;
>      int     motion_size;
>  
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>  } MobiClipContext;
>  
>  static VLC rl_vlc[2];
> @@ -310,7 +310,7 @@ static av_cold int mobiclip_init(AVCodecContext *avctx)
>          return AVERROR_INVALIDDATA;
>      }
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>  
>      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>  
> diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c
> index 4141c5a495..04a56a379c 100644
> --- a/libavcodec/motionpixels.c
> +++ b/libavcodec/motionpixels.c
> @@ -19,13 +19,13 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/thread.h"
>  
>  #include "config.h"
>  
>  #include "avcodec.h"
>  #include "get_bits.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  
> @@ -41,7 +41,7 @@ typedef struct HuffCode {
>  typedef struct MotionPixelsContext {
>      AVCodecContext *avctx;
>      AVFrame *frame;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      uint8_t *changes_map;
>      int offset_bits_len;
>      int codes_count, current_codes_count;
> @@ -80,7 +80,7 @@ static av_cold int mp_decode_init(AVCodecContext *avctx)
>      }
>  
>      mp->avctx = avctx;
> -    ff_bswapdsp_init(&mp->bdsp);
> +    av_bswapdsp_init(&mp->bdsp);
>      mp->changes_map = av_calloc(avctx->width, h4);
>      mp->offset_bits_len = av_log2(avctx->width * avctx->height) + 1;
>      mp->vpt = av_calloc(avctx->height, sizeof(*mp->vpt));
> @@ -294,8 +294,8 @@ 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.bswap32_buf((uint32_t *) mp->bswapbuf, (const uint32_t *) 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/mpc.h b/libavcodec/mpc.h
> index cef8db4899..c736a84088 100644
> --- a/libavcodec/mpc.h
> +++ b/libavcodec/mpc.h
> @@ -31,10 +31,10 @@
>  
>  #include <stdint.h>
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/lfg.h"
>  #include "libavutil/mem_internal.h"
>  
> -#include "bswapdsp.h"
>  #include "mpegaudio.h"
>  #include "mpegaudiodsp.h"
>  
> @@ -52,7 +52,7 @@ typedef struct Band {
>  }Band;
>  
>  typedef struct MPCContext {
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      MPADSPContext mpadsp;
>      int IS, MSS, gapless;
>      int lastframelen;
> diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
> index d2745366c2..9b7af9a01f 100644
> --- a/libavcodec/mpc7.c
> +++ b/libavcodec/mpc7.c
> @@ -91,9 +91,9 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
>      }
>      memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
>      av_lfg_init(&c->rnd, 0xDEADBEEF);
> -    ff_bswapdsp_init(&c->bdsp);
> +    av_bswapdsp_init(&c->bdsp);
>      ff_mpadsp_init(&c->mpadsp);
> -    c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4);
> +    c->bdsp.bswap32_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4);
>      init_get_bits(&gb, buf, 128);
>  
>      c->IS = get_bits1(&gb);
> @@ -211,8 +211,8 @@ static int mpc7_decode_frame(AVCodecContext *avctx, AVFrame *frame,
>      av_fast_padded_malloc(&c->bits, &c->buf_size, buf_size);
>      if (!c->bits)
>          return AVERROR(ENOMEM);
> -    c->bdsp.bswap_buf((uint32_t *) c->bits, (const uint32_t *) buf,
> -                      buf_size >> 2);
> +    c->bdsp.bswap32_buf((uint32_t *) c->bits, (const uint32_t *) buf,
> +                        buf_size >> 2);
>      if ((ret = init_get_bits8(&gb, c->bits, buf_size)) < 0)
>          return ret;
>      skip_bits_long(&gb, skip);
> diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
> index 72cdd13916..0fc25cac04 100644
> --- a/libavcodec/rawdec.c
> +++ b/libavcodec/rawdec.c
> @@ -25,13 +25,13 @@
>   */
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "get_bits.h"
>  #include "internal.h"
>  #include "raw.h"
>  #include "libavutil/avassert.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/buffer.h"
>  #include "libavutil/common.h"
>  #include "libavutil/intreadwrite.h"
> @@ -52,7 +52,7 @@ typedef struct RawVideoContext {
>      int is_lt_16bpp; // 16bpp pixfmt and bits_per_coded_sample < 16
>      int tff;
>  
> -    BswapDSPContext bbdsp;
> +    AVBSwapDSPContext bbdsp;
>      void *bitstream_buf;
>      unsigned int bitstream_buf_size;
>  } RawVideoContext;
> @@ -73,7 +73,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
>      RawVideoContext *context = avctx->priv_data;
>      const AVPixFmtDescriptor *desc;
>  
> -    ff_bswapdsp_init(&context->bbdsp);
> +    av_bswapdsp_init(&context->bbdsp);
>  
>      if (   avctx->codec_tag == MKTAG('r','a','w',' ')
>          || avctx->codec_tag == MKTAG('N','O','1','6'))
> @@ -324,7 +324,7 @@ static int raw_decode(AVCodecContext *avctx, AVFrame *frame,
>              if (swap == 16)
>                  context->bbdsp.bswap16_buf(context->bitstream_buf, (const uint16_t*)buf, buf_size / 2);
>              else if (swap == 32)
> -                context->bbdsp.bswap_buf(context->bitstream_buf, (const uint32_t*)buf, buf_size / 4);
> +                context->bbdsp.bswap32_buf(context->bitstream_buf, (const uint32_t*)buf, buf_size / 4);
>              else
>                  return AVERROR_INVALIDDATA;
>              buf = context->bitstream_buf;
> diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
> index 965942f4df..212ab3dc13 100644
> --- a/libavcodec/riscv/Makefile
> +++ b/libavcodec/riscv/Makefile
> @@ -5,9 +5,6 @@ RVV-OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_rvv.o
>  OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_init.o \
>                             riscv/audiodsp_rvf.o
>  RVV-OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_rvv.o
> -OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_init.o \
> -                           riscv/bswapdsp_rvb.o
> -RVV-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_rvv.o
>  OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_init.o
>  RVV-OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_rvv.o
>  OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_init.o
> diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
> index 1b2abd76b1..6385821ca1 100644
> --- a/libavcodec/shorten.c
> +++ b/libavcodec/shorten.c
> @@ -25,9 +25,10 @@
>   * @author Jeff Muizelaar
>   */
>  
> +#include "libavutil/bswapdsp.h"
> +
>  #include <limits.h>
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "codec_internal.h"
>  #include "decode.h"
> @@ -112,7 +113,7 @@ typedef struct ShortenContext {
>      int got_header;
>      int got_quit_command;
>      int swap;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>  } ShortenContext;
>  
>  static av_cold int shorten_decode_init(AVCodecContext *avctx)
> @@ -120,7 +121,7 @@ static av_cold int shorten_decode_init(AVCodecContext *avctx)
>      ShortenContext *s = avctx->priv_data;
>      s->avctx          = avctx;
>  
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>  
>      return 0;
>  }
> diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c
> index b168b9cda1..7b6db4d9d5 100644
> --- a/libavcodec/truemotion2.c
> +++ b/libavcodec/truemotion2.c
> @@ -26,8 +26,9 @@
>  
>  #include <inttypes.h>
>  
> +#include "libavutil/bswapdsp.h"
> +
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "codec_internal.h"
>  #include "decode.h"
> @@ -65,7 +66,7 @@ typedef struct TM2Context {
>  
>      GetBitContext gb;
>      int error;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>  
>      uint8_t *buffer;
>      int buffer_size;
> @@ -907,8 +908,8 @@ 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.bswap32_buf((uint32_t *) l->buffer, (const uint32_t *) buf,
> +                        buf_size >> 2);
>  
>      if ((ret = tm2_read_header(l, l->buffer)) < 0) {
>          return ret;
> @@ -960,7 +961,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      if (!l->pic)
>          return AVERROR(ENOMEM);
>  
> -    ff_bswapdsp_init(&l->bdsp);
> +    av_bswapdsp_init(&l->bdsp);
>  
>      l->last  = av_malloc_array(w, 2 * sizeof(*l->last));
>      if (!l->last)
> diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c
> index 454121cc75..06a76fe0db 100644
> --- a/libavcodec/truespeech.c
> +++ b/libavcodec/truespeech.c
> @@ -19,11 +19,11 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/channel_layout.h"
>  #include "libavutil/mem_internal.h"
>  
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "decode.h"
>  #include "get_bits.h"
> @@ -38,7 +38,7 @@
>   * TrueSpeech decoder context
>   */
>  typedef struct TSContext {
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      /* input data */
>      DECLARE_ALIGNED(16, uint8_t, buffer)[32];
>      int16_t vector[8];  ///< input vector: 5/5/4/4/4/3/3/3
> @@ -73,7 +73,7 @@ static av_cold int truespeech_decode_init(AVCodecContext * avctx)
>      avctx->ch_layout      = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO;
>      avctx->sample_fmt     = AV_SAMPLE_FMT_S16;
>  
> -    ff_bswapdsp_init(&c->bdsp);
> +    av_bswapdsp_init(&c->bdsp);
>  
>      return 0;
>  }
> @@ -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.bswap32_buf((uint32_t *) dec->buffer, (const uint32_t *) input, 8);
>      init_get_bits(&gb, dec->buffer, 32 * 8);
>  
>      dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)];
> diff --git a/libavcodec/utvideo.h b/libavcodec/utvideo.h
> index 9da9329ff3..2ccd088c47 100644
> --- a/libavcodec/utvideo.h
> +++ b/libavcodec/utvideo.h
> @@ -27,9 +27,9 @@
>   * Common Ut Video header
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/common.h"
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "utvideodsp.h"
>  #include "lossless_videodsp.h"
>  #include "lossless_videoencdsp.h"
> @@ -65,7 +65,7 @@ typedef struct UtvideoContext {
>      const AVClass *class;
>      AVCodecContext *avctx;
>      UTVideoDSPContext utdsp;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>      LLVidDSPContext llviddsp;
>      LLVidEncDSPContext llvidencdsp;
>  
> diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
> index 83120d1b22..dcf09b56c6 100644
> --- a/libavcodec/utvideodec.c
> +++ b/libavcodec/utvideodec.c
> @@ -30,10 +30,10 @@
>  #define CACHED_BITSTREAM_READER !ARCH_X86_32
>  #define UNCHECKED_BITSTREAM_READER 1
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/intreadwrite.h"
>  #include "libavutil/pixdesc.h"
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "codec_internal.h"
>  #include "get_bits.h"
> @@ -150,9 +150,9 @@ 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),
> -                          (slice_data_end - slice_data_start + 3) >> 2);
> +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
> +                            (uint32_t *)(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);
>  
>          prev = 0x200;
> @@ -311,9 +311,9 @@ static int decode_plane(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),
> -                          (slice_data_end - slice_data_start + 3) >> 2);
> +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
> +                            (uint32_t *)(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);
>  
>          prev = 0x80;
> @@ -887,7 +887,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      c->avctx = avctx;
>  
>      ff_utvideodsp_init(&c->utdsp);
> -    ff_bswapdsp_init(&c->bdsp);
> +    av_bswapdsp_init(&c->bdsp);
>      ff_llviddsp_init(&c->llviddsp);
>  
>      c->slice_bits_size = 0;
> diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c
> index d4388da8ba..de9ea8c135 100644
> --- a/libavcodec/utvideoenc.c
> +++ b/libavcodec/utvideoenc.c
> @@ -24,6 +24,7 @@
>   * Ut Video encoder
>   */
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/imgutils.h"
>  #include "libavutil/intreadwrite.h"
>  #include "libavutil/opt.h"
> @@ -31,7 +32,6 @@
>  #include "avcodec.h"
>  #include "codec_internal.h"
>  #include "encode.h"
> -#include "bswapdsp.h"
>  #include "bytestream.h"
>  #include "put_bits.h"
>  #include "mathops.h"
> @@ -132,7 +132,7 @@ static av_cold int utvideo_encode_init(AVCodecContext *avctx)
>          return AVERROR_INVALIDDATA;
>      }
>  
> -    ff_bswapdsp_init(&c->bdsp);
> +    av_bswapdsp_init(&c->bdsp);
>      ff_llvidencdsp_init(&c->llvidencdsp);
>  
>      if (c->frame_pred == PRED_GRADIENT) {
> @@ -490,9 +490,9 @@ static int encode_plane(AVCodecContext *avctx, const uint8_t *src,
>          slice_len = offset - slice_len;
>  
>          /* Byteswap the written huffman codes */
> -        c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
> -                          (uint32_t *) c->slice_bits,
> -                          slice_len >> 2);
> +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
> +                            (uint32_t *) c->slice_bits,
> +                            slice_len >> 2);
>  
>          /* Write the offset to the stream */
>          bytestream2_put_le32(pb, offset);
> diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
> index 6f62878081..ad0f54be3c 100644
> --- a/libavcodec/x86/Makefile
> +++ b/libavcodec/x86/Makefile
> @@ -4,7 +4,6 @@ OBJS                                   += x86/constants.o               \
>  OBJS-$(CONFIG_AC3DSP)                  += x86/ac3dsp_init.o
>  OBJS-$(CONFIG_AUDIODSP)                += x86/audiodsp_init.o
>  OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp_init.o
> -OBJS-$(CONFIG_BSWAPDSP)                += x86/bswapdsp_init.o
>  OBJS-$(CONFIG_DCT)                     += x86/dct_init.o
>  OBJS-$(CONFIG_DIRAC_DECODER)           += x86/diracdsp_init.o           \
>                                            x86/dirac_dwt_init.o
> @@ -98,7 +97,6 @@ X86ASM-OBJS-$(CONFIG_AC3DSP)           += x86/ac3dsp.o                  \
>                                            x86/ac3dsp_downmix.o
>  X86ASM-OBJS-$(CONFIG_AUDIODSP)         += x86/audiodsp.o
>  X86ASM-OBJS-$(CONFIG_BLOCKDSP)         += x86/blockdsp.o
> -X86ASM-OBJS-$(CONFIG_BSWAPDSP)         += x86/bswapdsp.o
>  X86ASM-OBJS-$(CONFIG_DCT)              += x86/dct32.o
>  X86ASM-OBJS-$(CONFIG_FFT)              += x86/fft.o
>  X86ASM-OBJS-$(CONFIG_FMTCONVERT)       += x86/fmtconvert.o
> diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c
> index 29c10f05da..7a90e2e5f1 100644
> --- a/libavcodec/ylc.c
> +++ b/libavcodec/ylc.c
> @@ -22,11 +22,11 @@
>  
>  #define YLC_VLC_BITS 10
>  
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/intreadwrite.h"
>  #include "libavutil/mem.h"
>  #include "libavutil/pixfmt.h"
>  #include "avcodec.h"
> -#include "bswapdsp.h"
>  #include "codec_internal.h"
>  #include "get_bits.h"
>  #include "thread.h"
> @@ -37,7 +37,7 @@ typedef struct YLCContext {
>      uint32_t table[256];
>      uint8_t *buffer;
>      int buffer_size;
> -    BswapDSPContext bdsp;
> +    AVBSwapDSPContext bdsp;
>  } YLCContext;
>  
>  static av_cold int decode_init(AVCodecContext *avctx)
> @@ -45,7 +45,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      YLCContext *s = avctx->priv_data;
>  
>      avctx->pix_fmt = AV_PIX_FMT_YUYV422;
> -    ff_bswapdsp_init(&s->bdsp);
> +    av_bswapdsp_init(&s->bdsp);
>  
>      return 0;
>  }
> @@ -311,9 +311,9 @@ 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,
> -                      (boffset - toffset + 3) >> 2);
> +    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
> +                        (uint32_t *) s->buffer,
> +                        (boffset - toffset + 3) >> 2);
>      if ((ret = init_get_bits8(&gb, s->buffer, boffset - toffset)) < 0)
>          return ret;
>  
> @@ -332,9 +332,9 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
>  
>      memcpy(s->buffer, avpkt->data + boffset, avpkt->size - boffset);
>      memset(s->buffer + avpkt->size - boffset, 0, AV_INPUT_BUFFER_PADDING_SIZE);
> -    s->bdsp.bswap_buf((uint32_t *) s->buffer,
> -                      (uint32_t *) s->buffer,
> -                      (avpkt->size - boffset) >> 2);
> +    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
> +                        (uint32_t *) s->buffer,
> +                        (avpkt->size - boffset) >> 2);
>      if ((ret = init_get_bits8(&gb, s->buffer, avpkt->size - boffset)) < 0)
>          return ret;
>  
> diff --git a/libavutil/Makefile b/libavutil/Makefile
> index 3d9c07aea8..bff5dbc7d9 100644
> --- a/libavutil/Makefile
> +++ b/libavutil/Makefile
> @@ -13,6 +13,7 @@ HEADERS = adler32.h                                                     \
>            blowfish.h                                                    \
>            bprint.h                                                      \
>            bswap.h                                                       \
> +          bswapdsp.h                                                    \
>            buffer.h                                                      \
>            cast5.h                                                       \
>            camellia.h                                                    \
> @@ -108,6 +109,7 @@ OBJS = adler32.o                                                        \
>         base64.o                                                         \
>         blowfish.o                                                       \
>         bprint.o                                                         \
> +       bswapdsp.o                                                       \
>         buffer.o                                                         \
>         cast5.o                                                          \
>         camellia.o                                                       \
> diff --git a/libavcodec/bswapdsp.c b/libavutil/bswapdsp.c
> similarity index 80%
> rename from libavcodec/bswapdsp.c
> rename to libavutil/bswapdsp.c
> index f0ea2b55c5..e85cdfe5d7 100644
> --- a/libavcodec/bswapdsp.c
> +++ b/libavutil/bswapdsp.c
> @@ -18,15 +18,18 @@
>  
>  #include <stdint.h>
>  
> -#include "libavutil/attributes.h"
> -#include "libavutil/bswap.h"
> +#include "attributes.h"
> +#include "bswap.h"
>  #include "bswapdsp.h"
>  
> -static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
> +void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c);
> +void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
> +
> +static void bswap32_buf(uint32_t *dst, const uint32_t *src, int len)
>  {
>      int i;
>  
> -    for (i = 0; i + 8 <= w; i += 8) {
> +    for (i = 0; i + 8 <= len; 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]);
> @@ -36,7 +39,7 @@ static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
>          dst[i + 6] = av_bswap32(src[i + 6]);
>          dst[i + 7] = av_bswap32(src[i + 7]);
>      }
> -    for (; i < w; i++)
> +    for (; i < len; i++)
>          dst[i + 0] = av_bswap32(src[i + 0]);
>  }
>  
> @@ -46,9 +49,9 @@ static void bswap16_buf(uint16_t *dst, const uint16_t *src, int len)
>          *dst++ = av_bswap16(*src++);
>  }
>  
> -av_cold void ff_bswapdsp_init(BswapDSPContext *c)
> +av_cold void av_bswapdsp_init(AVBSwapDSPContext *c)
>  {
> -    c->bswap_buf   = bswap_buf;
> +    c->bswap32_buf = bswap32_buf;
>      c->bswap16_buf = bswap16_buf;
>  
>  #if ARCH_RISCV
> diff --git a/libavcodec/bswapdsp.h b/libavutil/bswapdsp.h
> similarity index 71%
> rename from libavcodec/bswapdsp.h
> rename to libavutil/bswapdsp.h
> index 6f4db66115..b540560d6a 100644
> --- a/libavcodec/bswapdsp.h
> +++ b/libavutil/bswapdsp.h
> @@ -16,18 +16,16 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> -#ifndef AVCODEC_BSWAPDSP_H
> -#define AVCODEC_BSWAPDSP_H
> +#ifndef AVUTIL_BSWAPDSP_H
> +#define AVUTIL_BSWAPDSP_H
>  
>  #include <stdint.h>
>  
> -typedef struct BswapDSPContext {
> -    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
> +typedef struct AVBSwapDSPContext {
> +    void (*bswap32_buf)(uint32_t *dst, const uint32_t *src, int len);
>      void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
> -} BswapDSPContext;
> +} AVBSwapDSPContext;
>  
> -void ff_bswapdsp_init(BswapDSPContext *c);
> -void ff_bswapdsp_init_riscv(BswapDSPContext *c);
> -void ff_bswapdsp_init_x86(BswapDSPContext *c);
> +void av_bswapdsp_init(AVBSwapDSPContext *c);
>  
> -#endif /* AVCODEC_BSWAPDSP_H */
> +#endif /* AVUTIL_BSWAPDSP_H */
> diff --git a/libavutil/riscv/Makefile b/libavutil/riscv/Makefile
> index 1597154ba5..525538f6b6 100644
> --- a/libavutil/riscv/Makefile
> +++ b/libavutil/riscv/Makefile
> @@ -1,5 +1,8 @@
> -OBJS +=     riscv/float_dsp_init.o \
> +OBJS +=     riscv/bswapdsp_init.o \
> +            riscv/bswapdsp_rvb.o \
> +            riscv/float_dsp_init.o \
>              riscv/fixed_dsp_init.o \
>              riscv/cpu.o
> -RVV-OBJS += riscv/float_dsp_rvv.o \
> +RVV-OBJS += riscv/bswapdsp_rvv.o  \
> +            riscv/float_dsp_rvv.o \
>              riscv/fixed_dsp_rvv.o
> diff --git a/libavcodec/riscv/bswapdsp_init.c b/libavutil/riscv/bswapdsp_init.c
> similarity index 85%
> rename from libavcodec/riscv/bswapdsp_init.c
> rename to libavutil/riscv/bswapdsp_init.c
> index abe84ec1f7..362d574a27 100644
> --- a/libavcodec/riscv/bswapdsp_init.c
> +++ b/libavutil/riscv/bswapdsp_init.c
> @@ -22,24 +22,25 @@
>  
>  #include "config.h"
>  #include "libavutil/attributes.h"
> +#include "libavutil/bswapdsp.h"
>  #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_bswapdsp_init_riscv(AVBSwapDSPContext *c);
>  
> -av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
> +av_cold void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c)
>  {
>      int cpu_flags = av_get_cpu_flags();
>  
>  #if (__riscv_xlen >= 64)
>      if (cpu_flags & AV_CPU_FLAG_RVB_BASIC)
> -        c->bswap_buf = ff_bswap32_buf_rvb;
> +        c->bswap32_buf = ff_bswap32_buf_rvb;
>  #endif
>  #if HAVE_RVV
>      if (cpu_flags & AV_CPU_FLAG_RVV_I32) {
> -        c->bswap_buf = ff_bswap32_buf_rvv;
> +        c->bswap32_buf = ff_bswap32_buf_rvv;
>          c->bswap16_buf = ff_bswap16_buf_rvv;
>      }
>  #endif
> diff --git a/libavcodec/riscv/bswapdsp_rvb.S b/libavutil/riscv/bswapdsp_rvb.S
> similarity index 100%
> rename from libavcodec/riscv/bswapdsp_rvb.S
> rename to libavutil/riscv/bswapdsp_rvb.S
> diff --git a/libavcodec/riscv/bswapdsp_rvv.S b/libavutil/riscv/bswapdsp_rvv.S
> similarity index 100%
> rename from libavcodec/riscv/bswapdsp_rvv.S
> rename to libavutil/riscv/bswapdsp_rvv.S
> diff --git a/libavutil/version.h b/libavutil/version.h
> index 3b616ea489..60f96af5df 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -79,7 +79,7 @@
>   */
>  
>  #define LIBAVUTIL_VERSION_MAJOR  57
> -#define LIBAVUTIL_VERSION_MINOR  43
> +#define LIBAVUTIL_VERSION_MINOR  44
>  #define LIBAVUTIL_VERSION_MICRO 100
>  
>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> diff --git a/libavutil/x86/Makefile b/libavutil/x86/Makefile
> index d66839e35d..40bac784d1 100644
> --- a/libavutil/x86/Makefile
> +++ b/libavutil/x86/Makefile
> @@ -4,14 +4,16 @@ OBJS += x86/cpu.o                                                       \
>          x86/imgutils_init.o                                             \
>          x86/lls_init.o                                                  \
>  
> -OBJS-$(HAVE_X86ASM) += x86/tx_float_init.o                              \
> +OBJS-$(HAVE_X86ASM) += x86/bswapdsp_init.o                              \
> +                       x86/tx_float_init.o
>  
>  OBJS-$(CONFIG_PIXELUTILS) += x86/pixelutils_init.o                      \
>  
>  EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) = x86/emms.o
>  
> -X86ASM-OBJS += x86/cpuid.o                                              \
> -             $(EMMS_OBJS__yes_)                                      \
> +X86ASM-OBJS += x86/bswapdsp.o                                           \
> +             x86/cpuid.o                                                \
> +             $(EMMS_OBJS__yes_)                                         \
>               x86/fixed_dsp.o                                            \
>               x86/float_dsp.o                                            \
>               x86/imgutils.o                                             \
> diff --git a/libavcodec/x86/bswapdsp.asm b/libavutil/x86/bswapdsp.asm
> similarity index 97%
> rename from libavcodec/x86/bswapdsp.asm
> rename to libavutil/x86/bswapdsp.asm
> index 31c6c48a21..c3bb90c2be 100644
> --- a/libavcodec/x86/bswapdsp.asm
> +++ b/libavutil/x86/bswapdsp.asm
> @@ -26,8 +26,6 @@
>  SECTION_RODATA
>  pb_bswap32: db 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
>  
> -cextern pb_80
> -
>  SECTION .text
>  
>  ; %1 = aligned/unaligned
> @@ -99,7 +97,7 @@ SECTION .text
>      add      r0, 16
>  %endmacro
>  
> -; void ff_bswap_buf(uint32_t *dst, const uint32_t *src, int w);
> +; void ff_bswap32_buf(uint32_t *dst, const uint32_t *src, int len);
>  %macro BSWAP32_BUF 0
>  %if cpuflag(ssse3)||cpuflag(avx2)
>  cglobal bswap32_buf, 3,4,3
> diff --git a/libavcodec/x86/bswapdsp_init.c b/libavutil/x86/bswapdsp_init.c
> similarity index 80%
> rename from libavcodec/x86/bswapdsp_init.c
> rename to libavutil/x86/bswapdsp_init.c
> index 877bab1a2c..3694e9208c 100644
> --- a/libavcodec/x86/bswapdsp_init.c
> +++ b/libavutil/x86/bswapdsp_init.c
> @@ -19,22 +19,23 @@
>  #include <stdint.h>
>  
>  #include "libavutil/attributes.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/cpu.h"
>  #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 uint32_t *src, int len);
> +void ff_bswap32_buf_ssse3(uint32_t *dst, const uint32_t *src, int len);
> +void ff_bswap32_buf_avx2(uint32_t *dst, const uint32_t *src, int len);
> +void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
>  
> -av_cold void ff_bswapdsp_init_x86(BswapDSPContext *c)
> +av_cold void ff_bswapdsp_init_x86(AVBSwapDSPContext *c)
>  {
>      int cpu_flags = av_get_cpu_flags();
>  
>      if (EXTERNAL_SSE2(cpu_flags))
> -        c->bswap_buf = ff_bswap32_buf_sse2;
> +        c->bswap32_buf = ff_bswap32_buf_sse2;
>      if (EXTERNAL_SSSE3(cpu_flags))
> -        c->bswap_buf = ff_bswap32_buf_ssse3;
> +        c->bswap32_buf = ff_bswap32_buf_ssse3;
>      if (EXTERNAL_AVX2_FAST(cpu_flags))
> -        c->bswap_buf = ff_bswap32_buf_avx2;
> +        c->bswap32_buf = ff_bswap32_buf_avx2;
>  }
> diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
> index a6f06c7007..1bfaea0e9b 100644
> --- a/tests/checkasm/Makefile
> +++ b/tests/checkasm/Makefile
> @@ -2,7 +2,6 @@
>  # subsystems
>  AVCODECOBJS-$(CONFIG_AUDIODSP)          += audiodsp.o
>  AVCODECOBJS-$(CONFIG_BLOCKDSP)          += blockdsp.o
> -AVCODECOBJS-$(CONFIG_BSWAPDSP)          += bswapdsp.o
>  AVCODECOBJS-$(CONFIG_FMTCONVERT)        += fmtconvert.o
>  AVCODECOBJS-$(CONFIG_G722DSP)           += g722dsp.o
>  AVCODECOBJS-$(CONFIG_H264DSP)           += h264dsp.o
> @@ -59,6 +58,7 @@ CHECKASMOBJS-$(CONFIG_SWSCALE)  += $(SWSCALEOBJS)
>  AVUTILOBJS                              += av_tx.o
>  AVUTILOBJS                              += fixed_dsp.o
>  AVUTILOBJS                              += float_dsp.o
> +AVUTILOBJS                              += bswapdsp.o
>  
>  CHECKASMOBJS-$(CONFIG_AVUTIL)  += $(AVUTILOBJS)
>  
> diff --git a/tests/checkasm/bswapdsp.c b/tests/checkasm/bswapdsp.c
> index d789e90de3..f8dc50be33 100644
> --- a/tests/checkasm/bswapdsp.c
> +++ b/tests/checkasm/bswapdsp.c
> @@ -20,7 +20,7 @@
>  
>  #include <string.h>
>  #include "checkasm.h"
> -#include "libavcodec/bswapdsp.h"
> +#include "libavutil/bswapdsp.h"
>  #include "libavutil/common.h"
>  #include "libavutil/internal.h"
>  #include "libavutil/intreadwrite.h"
> @@ -63,11 +63,11 @@ void checkasm_check_bswapdsp(void)
>      LOCAL_ALIGNED_16(uint8_t, src1, [BUF_SIZE]);
>      LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]);
>      LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]);
> -    BswapDSPContext h;
> +    AVBSwapDSPContext h;
>  
> -    ff_bswapdsp_init(&h);
> +    av_bswapdsp_init(&h);
>  
> -    if (check_func(h.bswap_buf, "bswap_buf"))
> +    if (check_func(h.bswap32_buf, "bswap32_buf"))
>          check_bswap(uint32_t);
>  
>      if (check_func(h.bswap16_buf, "bswap16_buf"))
> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
> index e96d84a7da..32657b6c2d 100644
> --- a/tests/checkasm/checkasm.c
> +++ b/tests/checkasm/checkasm.c
> @@ -87,9 +87,6 @@ static const struct {
>      #if CONFIG_BLOCKDSP
>          { "blockdsp", checkasm_check_blockdsp },
>      #endif
> -    #if CONFIG_BSWAPDSP
> -        { "bswapdsp", checkasm_check_bswapdsp },
> -    #endif
>      #if CONFIG_DCA_DECODER
>          { "synth_filter", checkasm_check_synth_filter },
>      #endif
> @@ -207,6 +204,7 @@ static const struct {
>      { "sw_scale", checkasm_check_sw_scale },
>  #endif
>  #if CONFIG_AVUTIL
> +        { "bswapdsp", checkasm_check_bswapdsp },
>          { "fixed_dsp", checkasm_check_fixed_dsp },
>          { "float_dsp", checkasm_check_float_dsp },
>          { "av_tx",     checkasm_check_av_tx },

1. Renaming bswap_buf->bswap32_buf should be done in a separate
(preceding) commit. The same goes for removing the unnecessary cextern
declaration.
2. If this is supposed to be public, it needs better documentation (or
actually, documentation at all): E.g. either src and dst must coincide
or they must point to disjoint buffers of the appropriate length.
3. a) Making this public will impair our ability to change anything
about it (i.e. we could not add a 64bit variant or use size_t for the
amount of elements to process or switch the len parameter to bytes or
whatever).
b) To mitigate a), we could make sizeof(AVBSwapDSPContext) private and
change the init function to allocate it. Yet this would add error checks
when initializing, would necessitate freeing said context lateron and
would add an unnecessary indirection at runtime. This is only a
mitigation, as we would be force to keep the int functions around in
case we wanted to switch to size_t.
(c) An alternative way to mitigate this is to use a function like
void (*av_bswapdsp_init(enum AVBSwapType type))(void *dst, const void
*src, int len). This works because most users (except rawvideo and
swscale, it seems) actually want only one type of swap function. This
would avoid the allocs and frees.)
4. Because of 3. I am in favour of duplicating this into swscale instead
of making it public.
5. Btw: We use this API on data coming from packets and the data of
packets has no alignment requirements. It means that there is UB in case
the packets' data is not suitably aligned (the UB already happens in the
uint8_t*->uint(32|16)_t* conversion; in case the C version is used, it
also happens in bswap_buf() or bswap16_buf()). The former can be fixed
by making src const void*, the latter by reading via AV_RN(32|16) in the
C versions.
This would of course also necessitate documentation if this were done
and still made public.

- Andreas
Mark Reid Dec. 7, 2022, 5:50 a.m. UTC | #5
On Tue, Dec 6, 2022 at 8:11 PM Andreas Rheinhardt <
andreas.rheinhardt@outlook.com> wrote:

> mindmark@gmail.com:
> > From: Mark Reid <mindmark@gmail.com>
> >
> > Also renamed bswap_buf to bswap32_buf
> > ---
> >  configure                                     | 56 ++++++++-----------
> >  libavcodec/4xm.c                              | 14 ++---
> >  libavcodec/Makefile                           |  1 -
> >  libavcodec/ac3dec.c                           |  4 +-
> >  libavcodec/ac3dec.h                           |  4 +-
> >  libavcodec/alsdec.c                           | 12 ++--
> >  libavcodec/apedec.c                           | 10 ++--
> >  libavcodec/asv.c                              |  4 +-
> >  libavcodec/asv.h                              |  4 +-
> >  libavcodec/asvdec.c                           |  4 +-
> >  libavcodec/asvenc.c                           |  4 +-
> >  libavcodec/cllc.c                             |  6 +-
> >  libavcodec/eamad.c                            |  6 +-
> >  libavcodec/eatqi.c                            | 10 ++--
> >  libavcodec/exr.c                              |  6 +-
> >  libavcodec/flacenc.c                          |  6 +-
> >  libavcodec/fraps.c                            | 10 ++--
> >  libavcodec/hevcdec.c                          |  4 +-
> >  libavcodec/hevcdec.h                          |  4 +-
> >  libavcodec/huffyuvdec.c                       | 14 ++---
> >  libavcodec/huffyuvenc.c                       |  8 +--
> >  libavcodec/imc.c                              |  6 +-
> >  libavcodec/imm4.c                             | 12 ++--
> >  libavcodec/mdec.c                             |  6 +-
> >  libavcodec/mimic.c                            | 12 ++--
> >  libavcodec/mobiclip.c                         |  6 +-
> >  libavcodec/motionpixels.c                     | 10 ++--
> >  libavcodec/mpc.h                              |  4 +-
> >  libavcodec/mpc7.c                             |  8 +--
> >  libavcodec/rawdec.c                           |  8 +--
> >  libavcodec/riscv/Makefile                     |  3 -
> >  libavcodec/shorten.c                          |  7 ++-
> >  libavcodec/truemotion2.c                      | 11 ++--
> >  libavcodec/truespeech.c                       |  8 +--
> >  libavcodec/utvideo.h                          |  4 +-
> >  libavcodec/utvideodec.c                       | 16 +++---
> >  libavcodec/utvideoenc.c                       | 10 ++--
> >  libavcodec/x86/Makefile                       |  2 -
> >  libavcodec/ylc.c                              | 18 +++---
> >  libavutil/Makefile                            |  2 +
> >  {libavcodec => libavutil}/bswapdsp.c          | 17 +++---
> >  {libavcodec => libavutil}/bswapdsp.h          | 16 +++---
> >  libavutil/riscv/Makefile                      |  7 ++-
> >  .../riscv/bswapdsp_init.c                     |  9 +--
> >  .../riscv/bswapdsp_rvb.S                      |  0
> >  .../riscv/bswapdsp_rvv.S                      |  0
> >  libavutil/version.h                           |  2 +-
> >  libavutil/x86/Makefile                        |  8 ++-
> >  {libavcodec => libavutil}/x86/bswapdsp.asm    |  4 +-
> >  {libavcodec => libavutil}/x86/bswapdsp_init.c | 17 +++---
> >  tests/checkasm/Makefile                       |  2 +-
> >  tests/checkasm/bswapdsp.c                     |  8 +--
> >  tests/checkasm/checkasm.c                     |  4 +-
> >  53 files changed, 216 insertions(+), 222 deletions(-)
> >  rename {libavcodec => libavutil}/bswapdsp.c (80%)
> >  rename {libavcodec => libavutil}/bswapdsp.h (71%)
> >  rename {libavcodec => libavutil}/riscv/bswapdsp_init.c (85%)
> >  rename {libavcodec => libavutil}/riscv/bswapdsp_rvb.S (100%)
> >  rename {libavcodec => libavutil}/riscv/bswapdsp_rvv.S (100%)
> >  rename {libavcodec => libavutil}/x86/bswapdsp.asm (97%)
> >  rename {libavcodec => libavutil}/x86/bswapdsp_init.c (80%)
> >
> > diff --git a/configure b/configure
> > index f4eedfc207..03b502ea37 100755
> > --- a/configure
> > +++ b/configure
> > @@ -2421,7 +2421,6 @@ CONFIG_EXTRA="
> >      audio_frame_queue
> >      audiodsp
> >      blockdsp
> > -    bswapdsp
> >      cabac
> >      cbs
> >      cbs_av1
> > @@ -2749,8 +2748,8 @@ aac_decoder_select="adts_header mpeg4audio sinewin"
> >  aac_fixed_decoder_select="adts_header mpeg4audio"
> >  aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
> >  aac_latm_decoder_select="aac_decoder aac_latm_parser"
> > -ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert"
> > -ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp"
> > +ac3_decoder_select="ac3_parser ac3dsp fmtconvert"
> > +ac3_fixed_decoder_select="ac3_parser ac3dsp"
> >  ac3_encoder_select="ac3dsp audiodsp me_cmp"
> >  ac3_fixed_encoder_select="ac3dsp audiodsp me_cmp"
> >  acelp_kelvin_decoder_select="audiodsp"
> > @@ -2759,20 +2758,20 @@ adpcm_g722_encoder_select="g722dsp"
> >  agm_decoder_select="idctdsp"
> >  aic_decoder_select="golomb idctdsp"
> >  alac_encoder_select="lpc"
> > -als_decoder_select="bswapdsp mpeg4audio"
> > +als_decoder_select="mpeg4audio"
> >  amrnb_decoder_select="lsp"
> >  amrwb_decoder_select="lsp"
> >  amv_decoder_select="sp5x_decoder exif"
> >  amv_encoder_select="jpegtables mpegvideoenc"
> > -ape_decoder_select="bswapdsp llauddsp"
> > +ape_decoder_select="llauddsp"
> >  apng_decoder_select="inflate_wrapper"
> >  apng_encoder_select="deflate_wrapper llvidencdsp"
> >  aptx_encoder_select="audio_frame_queue"
> >  aptx_hd_encoder_select="audio_frame_queue"
> > -asv1_decoder_select="blockdsp bswapdsp idctdsp"
> > -asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
> > -asv2_decoder_select="blockdsp bswapdsp idctdsp"
> > -asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
> > +asv1_decoder_select="idctdsp"
> > +asv1_encoder_select="aandcttables fdctdsp pixblockdsp"
> > +asv2_decoder_select="idctdsp"
> > +asv2_encoder_select="aandcttables fdctdsp pixblockdsp"
> >  atrac1_decoder_select="sinewin"
> >  av1_decoder_select="av1_frame_split_bsf cbs_av1"
> >  bink_decoder_select="blockdsp hpeldsp"
> > @@ -2780,7 +2779,6 @@ binkaudio_dct_decoder_select="wma_freqs"
> >  binkaudio_rdft_decoder_select="wma_freqs"
> >  cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp
> videodsp"
> >  clearvideo_decoder_select="idctdsp"
> > -cllc_decoder_select="bswapdsp"
> >  comfortnoise_encoder_select="lpc"
> >  cook_decoder_select="audiodsp sinewin"
> >  cri_decoder_select="mjpeg_decoder"
> > @@ -2795,9 +2793,9 @@ dxa_decoder_deps="zlib"
> >  dxv_decoder_select="lzf texturedsp"
> >  eac3_decoder_select="ac3_decoder"
> >  eac3_encoder_select="ac3_encoder"
> > -eamad_decoder_select="aandcttables blockdsp bswapdsp"
> > +eamad_decoder_select="aandcttables blockdsp"
> >  eatgq_decoder_select="aandcttables"
> > -eatqi_decoder_select="aandcttables blockdsp bswapdsp"
> > +eatqi_decoder_select="aandcttables blockdsp"
> >  exr_decoder_deps="zlib"
> >  exr_encoder_deps="zlib"
> >  ffv1_decoder_select="rangecoder"
> > @@ -2805,15 +2803,15 @@ ffv1_encoder_select="rangecoder"
> >  ffvhuff_decoder_select="huffyuv_decoder"
> >  ffvhuff_encoder_select="huffyuv_encoder"
> >  fic_decoder_select="golomb"
> > -flac_encoder_select="bswapdsp lpc"
> > +flac_encoder_select="lpc"
> >  flashsv2_decoder_select="inflate_wrapper"
> >  flashsv2_encoder_select="deflate_wrapper"
> >  flashsv_decoder_select="inflate_wrapper"
> >  flashsv_encoder_deps="zlib"
> >  flv_decoder_select="h263_decoder"
> >  flv_encoder_select="h263_encoder"
> > -fourxm_decoder_select="blockdsp bswapdsp"
> > -fraps_decoder_select="bswapdsp huffman"
> > +fourxm_decoder_select="blockdsp"
> > +fraps_decoder_select="huffman"
> >  g2m_decoder_deps="zlib"
> >  g2m_decoder_select="blockdsp idctdsp jpegtables"
> >  g729_decoder_select="audiodsp"
> > @@ -2829,13 +2827,13 @@ h264_decoder_suggest="error_resilience"
> >  hap_decoder_select="snappy texturedsp"
> >  hap_encoder_deps="libsnappy"
> >  hap_encoder_select="texturedspenc"
> > -hevc_decoder_select="bswapdsp cabac dovi_rpu golomb hevcparse hevc_sei
> videodsp"
> > -huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
> > -huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
> > +hevc_decoder_select="cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
> > +huffyuv_decoder_select="huffyuvdsp llviddsp"
> > +huffyuv_encoder_select="huffman huffyuvencdsp llvidencdsp"
> >  hymt_decoder_select="huffyuv_decoder"
> >  iac_decoder_select="imc_decoder"
> > -imc_decoder_select="bswapdsp sinewin"
> > -imm4_decoder_select="bswapdsp idctdsp"
> > +imc_decoder_select="sinewin"
> > +imm4_decoder_select="idctdsp"
> >  imm5_decoder_select="h264_decoder hevc_decoder"
> >  indeo3_decoder_select="hpeldsp"
> >  indeo4_decoder_select="ividsp"
> > @@ -2849,16 +2847,15 @@ ljpeg_encoder_select="jpegtables"
> >  lscr_decoder_select="inflate_wrapper"
> >  magicyuv_decoder_select="llviddsp"
> >  magicyuv_encoder_select="llvidencdsp"
> > -mdec_decoder_select="blockdsp bswapdsp idctdsp"
> > +mdec_decoder_select="blockdsp idctdsp"
> >  metasound_decoder_select="lsp sinewin"
> > -mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
> > +mimic_decoder_select="blockdsp hpeldsp idctdsp"
> >  mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
> >  mjpeg_encoder_select="jpegtables mpegvideoenc"
> >  mjpegb_decoder_select="mjpeg_decoder"
> >  mlp_decoder_select="mlp_parser"
> >  mlp_encoder_select="lpc audio_frame_queue"
> > -mobiclip_decoder_select="bswapdsp golomb"
> > -motionpixels_decoder_select="bswapdsp"
> > +mobiclip_decoder_select="golomb"
> >  mp1_decoder_select="mpegaudio"
> >  mp1float_decoder_select="mpegaudio"
> >  mp2_decoder_select="mpegaudio"
> > @@ -2869,7 +2866,7 @@ mp3adufloat_decoder_select="mpegaudio"
> >  mp3float_decoder_select="mpegaudio"
> >  mp3on4_decoder_select="mpegaudio mpeg4audio"
> >  mp3on4float_decoder_select="mpegaudio mpeg4audio"
> > -mpc7_decoder_select="bswapdsp mpegaudiodsp"
> > +mpc7_decoder_select="mpegaudiodsp"
> >  mpc8_decoder_select="mpegaudiodsp"
> >  mpegvideo_decoder_select="mpegvideodec"
> >  mpeg1video_decoder_select="mpegvideodec"
> > @@ -2909,7 +2906,6 @@ ra_144_decoder_select="audiodsp"
> >  ra_144_encoder_select="audio_frame_queue lpc audiodsp"
> >  ralf_decoder_select="golomb"
> >  rasc_decoder_select="inflate_wrapper"
> > -rawvideo_decoder_select="bswapdsp"
> >  rscc_decoder_deps="zlib"
> >  rv10_decoder_select="h263_decoder"
> >  rv10_encoder_select="h263_encoder"
> > @@ -2918,7 +2914,6 @@ rv20_encoder_select="h263_encoder"
> >  rv30_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
> >  rv40_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
> >  screenpresso_decoder_deps="zlib"
> > -shorten_decoder_select="bswapdsp"
> >  sipr_decoder_select="lsp"
> >  smvjpeg_decoder_select="mjpeg_decoder"
> >  snow_decoder_select="dwt h264qpel hpeldsp rangecoder videodsp"
> > @@ -2944,13 +2939,11 @@ tiff_decoder_suggest="zlib lzma"
> >  tiff_encoder_suggest="zlib"
> >  truehd_decoder_select="mlp_parser"
> >  truehd_encoder_select="lpc audio_frame_queue"
> > -truemotion2_decoder_select="bswapdsp"
> > -truespeech_decoder_select="bswapdsp"
> >  tscc_decoder_select="inflate_wrapper"
> >  twinvq_decoder_select="lsp sinewin"
> >  txd_decoder_select="texturedsp"
> > -utvideo_decoder_select="bswapdsp llviddsp"
> > -utvideo_encoder_select="bswapdsp huffman llvidencdsp"
> > +utvideo_decoder_select="llviddsp"
> > +utvideo_encoder_select="huffman llvidencdsp"
> >  vble_decoder_select="llviddsp"
> >  vbn_decoder_select="texturedsp"
> >  vbn_encoder_select="texturedspenc"
> > @@ -2983,7 +2976,6 @@ wmv3_decoder_select="vc1_decoder"
> >  wmv3image_decoder_select="wmv3_decoder"
> >  xma1_decoder_select="wmapro_decoder"
> >  xma2_decoder_select="wmapro_decoder"
> > -ylc_decoder_select="bswapdsp"
> >  zerocodec_decoder_select="inflate_wrapper"
> >  zlib_decoder_select="inflate_wrapper"
> >  zlib_encoder_select="deflate_wrapper"
> > diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c
> > index 5636fdef2d..b99f8be172 100644
> > --- a/libavcodec/4xm.c
> > +++ b/libavcodec/4xm.c
> > @@ -27,6 +27,7 @@
> >  #include <inttypes.h>
> >
> >  #include "libavutil/avassert.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/frame.h"
> >  #include "libavutil/imgutils.h"
> >  #include "libavutil/intreadwrite.h"
> > @@ -34,7 +35,6 @@
> >  #include "libavutil/thread.h"
> >  #include "avcodec.h"
> >  #include "blockdsp.h"
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> > @@ -138,7 +138,7 @@ typedef struct CFrameBuffer {
> >  typedef struct FourXContext {
> >      AVCodecContext *avctx;
> >      BlockDSPContext bdsp;
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >      uint16_t *frame_buffer;
> >      uint16_t *last_frame_buffer;
> >      GetBitContext pre_gb;          ///< ac/dc prefix
> > @@ -469,8 +469,8 @@ static int decode_p_frame(FourXContext *f, const
> uint8_t *buf, int length)
> >                            bitstream_size);
> >      if (!f->bitstream_buffer)
> >          return AVERROR(ENOMEM);
> > -    f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) (buf +
> extra),
> > -                       bitstream_size / 4);
> > +    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *) (buf +
> extra),
> > +                         bitstream_size / 4);
> >      init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size);
> >
> >      wordstream_offset = extra + bitstream_size;
> > @@ -813,8 +813,8 @@ 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,
> > -                       prestream_size / 4);
> > +    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *)
> prestream,
> > +                         prestream_size / 4);
> >      init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);
> >
> >      f->last_dc = 0 * 128 * 8 * 8;
> > @@ -1013,7 +1013,7 @@ static av_cold int decode_init(AVCodecContext
> *avctx)
> >
> >      f->version = AV_RL32(avctx->extradata) >> 16;
> >      ff_blockdsp_init(&f->bdsp);
> > -    ff_bswapdsp_init(&f->bbdsp);
> > +    av_bswapdsp_init(&f->bbdsp);
> >      f->avctx = avctx;
> >
> >      if (f->version > 2)
> > diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> > index 98841ed07c..6b9b7a48dd 100644
> > --- a/libavcodec/Makefile
> > +++ b/libavcodec/Makefile
> > @@ -70,7 +70,6 @@ OBJS-$(CONFIG_AUDIO_FRAME_QUEUE)       +=
> audio_frame_queue.o
> >  OBJS-$(CONFIG_ATSC_A53)                += atsc_a53.o
> >  OBJS-$(CONFIG_AUDIODSP)                += audiodsp.o
> >  OBJS-$(CONFIG_BLOCKDSP)                += blockdsp.o
> > -OBJS-$(CONFIG_BSWAPDSP)                += bswapdsp.o
> >  OBJS-$(CONFIG_CABAC)                   += cabac.o
> >  OBJS-$(CONFIG_CBS)                     += cbs.o cbs_bsf.o
> >  OBJS-$(CONFIG_CBS_AV1)                 += cbs_av1.o
> > diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
> > index 1f2949dcfd..218f4e96d2 100644
> > --- a/libavcodec/ac3dec.c
> > +++ b/libavcodec/ac3dec.c
> > @@ -31,13 +31,13 @@
> >  #include <math.h>
> >  #include <string.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/channel_layout.h"
> >  #include "libavutil/crc.h"
> >  #include "libavutil/downmix_info.h"
> >  #include "libavutil/intmath.h"
> >  #include "libavutil/opt.h"
> >  #include "libavutil/thread.h"
> > -#include "bswapdsp.h"
> >  #include "aac_ac3_parser.h"
> >  #include "ac3_parser_internal.h"
> >  #include "ac3dec.h"
> > @@ -229,7 +229,7 @@ static av_cold int ac3_decode_init(AVCodecContext
> *avctx)
> >          return ret;
> >
> >      AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >
> >  #if (USE_FIXED)
> >      s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags &
> AV_CODEC_FLAG_BITEXACT);
> > diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
> > index 138b462abb..8cd6d83e9a 100644
> > --- a/libavcodec/ac3dec.h
> > +++ b/libavcodec/ac3dec.h
> > @@ -51,6 +51,7 @@
> >  #define AVCODEC_AC3DEC_H
> >
> >  #include "libavutil/tx.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/float_dsp.h"
> >  #include "libavutil/fixed_dsp.h"
> >  #include "libavutil/lfg.h"
> > @@ -59,7 +60,6 @@
> >  #include "ac3.h"
> >  #include "ac3dsp.h"
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "get_bits.h"
> >  #include "fmtconvert.h"
> >
> > @@ -228,7 +228,7 @@ typedef struct AC3DecodeContext {
> >  ///@}
> >
> >  ///@name Optimization
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >  #if USE_FIXED
> >      AVFixedDSPContext *fdsp;
> >  #else
> > diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
> > index 4605b2248f..af41eda49f 100644
> > --- a/libavcodec/alsdec.c
> > +++ b/libavcodec/alsdec.c
> > @@ -32,12 +32,12 @@
> >  #include "unary.h"
> >  #include "mpeg4audio.h"
> >  #include "bgmc.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "internal.h"
> >  #include "mlz.h"
> >  #include "libavutil/samplefmt.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/crc.h"
> >  #include "libavutil/softfloat_ieee754.h"
> >  #include "libavutil/intfloat.h"
> > @@ -197,7 +197,7 @@ typedef struct ALSDecContext {
> >      AVCodecContext *avctx;
> >      ALSSpecificConfig sconf;
> >      GetBitContext gb;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      const AVCRC *crc_table;
> >      uint32_t crc_org;               ///< CRC value of the original
> input data
> >      uint32_t crc;                   ///< CRC value calculated from
> decoded data
> > @@ -1899,9 +1899,9 @@ static int decode_frame(AVCodecContext *avctx,
> AVFrame *frame,
> >                           sample++)
> >                          *dest++ = av_bswap16(src[sample]);
> >                  } else {
> > -                    ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
> > -                                        (uint32_t *) frame->data[0],
> > -                                        ctx->cur_frame_length *
> channels);
> > +                    ctx->bdsp.bswap32_buf((uint32_t *) ctx->crc_buffer,
> > +                                          (uint32_t *) frame->data[0],
> > +                                          ctx->cur_frame_length *
> channels);
> >                  }
> >                  crc_source = ctx->crc_buffer;
> >              } else {
> > @@ -2164,7 +2164,7 @@ static av_cold int decode_init(AVCodecContext
> *avctx)
> >          }
> >      }
> >
> > -    ff_bswapdsp_init(&ctx->bdsp);
> > +    av_bswapdsp_init(&ctx->bdsp);
> >
> >      return 0;
> >  }
> > diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
> > index c08d13d6c2..7b9fa74416 100644
> > --- a/libavcodec/apedec.c
> > +++ b/libavcodec/apedec.c
> > @@ -23,12 +23,12 @@
> >  #include <inttypes.h>
> >
> >  #include "libavutil/avassert.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/channel_layout.h"
> >  #include "libavutil/crc.h"
> >  #include "libavutil/opt.h"
> >  #include "lossless_audiodsp.h"
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> > @@ -153,7 +153,7 @@ typedef struct APEPredictor64 {
> >  typedef struct APEContext {
> >      AVClass *class;                          ///< class for AVOptions
> >      AVCodecContext *avctx;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      LLAudDSPContext adsp;
> >      int channels;
> >      int samples;                             ///< samples left to
> decode in current frame
> > @@ -313,7 +313,7 @@ static av_cold int ape_decode_init(AVCodecContext
> *avctx)
> >          s->predictor_decode_stereo = predictor_decode_stereo_3950;
> >      }
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >      ff_llauddsp_init(&s->adsp);
> >      av_channel_layout_uninit(&avctx->ch_layout);
> >      avctx->ch_layout = (channels == 2) ?
> (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO
> > @@ -1499,8 +1499,8 @@ 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,
> > -                          buf_size >> 2);
> > +        s->bdsp.bswap32_buf((uint32_t *) s->data, (const uint32_t *)
> buf,
> > +                            buf_size >> 2);
> >          memset(s->data + (buf_size & ~3), 0, buf_size & 3);
> >          s->ptr = s->data;
> >          s->data_end = s->data + buf_size;
> > diff --git a/libavcodec/asv.c b/libavcodec/asv.c
> > index 3aa08c30c0..bfe669d25e 100644
> > --- a/libavcodec/asv.c
> > +++ b/libavcodec/asv.c
> > @@ -26,10 +26,10 @@
> >  #include <stdint.h>
> >
> >  #include "libavutil/attributes.h"
> > +#include "libavutil/bswapdsp.h"
> >
> >  #include "asv.h"
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >
> >  const uint8_t ff_asv_scantab[64] = {
> >      0x00, 0x08, 0x01, 0x09, 0x10, 0x18, 0x11, 0x19,
> > @@ -92,7 +92,7 @@ av_cold void ff_asv_common_init(AVCodecContext *avctx)
> >  {
> >      ASVCommonContext *const a = avctx->priv_data;
> >
> > -    ff_bswapdsp_init(&a->bbdsp);
> > +    av_bswapdsp_init(&a->bbdsp);
> >
> >      a->mb_width   = (avctx->width  + 15) / 16;
> >      a->mb_height  = (avctx->height + 15) / 16;
> > diff --git a/libavcodec/asv.h b/libavcodec/asv.h
> > index 7c0983a497..f7e00d8ef2 100644
> > --- a/libavcodec/asv.h
> > +++ b/libavcodec/asv.h
> > @@ -29,11 +29,11 @@
> >  #include <stdint.h>
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> > +#include "libavutil/bswapdsp.h"
> >
> >  typedef struct ASVCommonContext {
> >      AVCodecContext *avctx;
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >      int mb_width;
> >      int mb_height;
> >      int mb_width2;
> > diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c
> > index 699aab9f8f..25dab7473f 100644
> > --- a/libavcodec/asvdec.c
> > +++ b/libavcodec/asvdec.c
> > @@ -253,8 +253,8 @@ static int decode_frame(AVCodecContext *avctx,
> AVFrame *p,
> >          if (!a->bitstream_buffer)
> >              return AVERROR(ENOMEM);
> >
> > -        c->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer,
> > -                           (const uint32_t *) buf, buf_size / 4);
> > +        c->bbdsp.bswap32_buf((uint32_t *) a->bitstream_buffer,
> > +                             (const uint32_t *) 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..2bf67d686c 100644
> > --- a/libavcodec/asvenc.c
> > +++ b/libavcodec/asvenc.c
> > @@ -309,8 +309,8 @@ static int encode_frame(AVCodecContext *avctx,
> AVPacket *pkt,
> >      size = (put_bytes_output(&a->pb) + 3) / 4;
> >
> >      if (avctx->codec_id == AV_CODEC_ID_ASV1) {
> > -        c->bbdsp.bswap_buf((uint32_t *) pkt->data,
> > -                           (uint32_t *) pkt->data, size);
> > +        c->bbdsp.bswap32_buf((uint32_t *) pkt->data,
> > +                             (uint32_t *) pkt->data, size);
> >      }
> >
> >      pkt->size   = size * 4;
> > diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
> > index 911717b68d..dede8591c5 100644
> > --- a/libavcodec/cllc.c
> > +++ b/libavcodec/cllc.c
> > @@ -22,8 +22,8 @@
> >
> >  #include <inttypes.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/intreadwrite.h"
> > -#include "bswapdsp.h"
> >  #include "canopus.h"
> >  #include "get_bits.h"
> >  #include "avcodec.h"
> > @@ -36,7 +36,7 @@
> >
> >  typedef struct CLLCContext {
> >      AVCodecContext *avctx;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >
> >      uint8_t *swapped_buf;
> >      int      swapped_buf_size;
> > @@ -486,7 +486,7 @@ static av_cold int cllc_decode_init(AVCodecContext
> *avctx)
> >      ctx->swapped_buf      = NULL;
> >      ctx->swapped_buf_size = 0;
> >
> > -    ff_bswapdsp_init(&ctx->bdsp);
> > +    av_bswapdsp_init(&ctx->bdsp);
> >
> >      return 0;
> >  }
> > diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
> > index 45012c62b8..0ffcd14105 100644
> > --- a/libavcodec/eamad.c
> > +++ b/libavcodec/eamad.c
> > @@ -28,12 +28,12 @@
> >   * http://wiki.multimedia.cx/index.php?title=Electronic_Arts_MAD
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/mem_internal.h"
> >
> >  #include "avcodec.h"
> >  #include "blockdsp.h"
> >  #include "bytestream.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "get_bits.h"
> > @@ -50,7 +50,7 @@
> >  typedef struct MadContext {
> >      AVCodecContext *avctx;
> >      BlockDSPContext bdsp;
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >      AVFrame *last_frame;
> >      GetBitContext gb;
> >      void *bitstream_buf;
> > @@ -67,7 +67,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      s->avctx = avctx;
> >      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
> >      ff_blockdsp_init(&s->bdsp);
> > -    ff_bswapdsp_init(&s->bbdsp);
> > +    av_bswapdsp_init(&s->bbdsp);
> >      ff_mpeg12_init_vlcs();
> >
> >      s->last_frame = av_frame_alloc();
> > diff --git a/libavcodec/eatqi.c b/libavcodec/eatqi.c
> > index e4f12b3db2..b1475b16c4 100644
> > --- a/libavcodec/eatqi.c
> > +++ b/libavcodec/eatqi.c
> > @@ -26,11 +26,11 @@
> >   * @see http://wiki.multimedia.cx/index.php?title=Electronic_Arts_TQI
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/mem_internal.h"
> >
> >  #include "avcodec.h"
> >  #include "blockdsp.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "get_bits.h"
> > @@ -43,7 +43,7 @@ typedef struct TqiContext {
> >      AVCodecContext *avctx;
> >      GetBitContext gb;
> >      BlockDSPContext bdsp;
> > -    BswapDSPContext bsdsp;
> > +    AVBSwapDSPContext bsdsp;
> >
> >      void *bitstream_buf;
> >      unsigned int bitstream_buf_size;
> > @@ -60,7 +60,7 @@ static av_cold int tqi_decode_init(AVCodecContext
> *avctx)
> >      TqiContext *t = avctx->priv_data;
> >
> >      ff_blockdsp_init(&t->bdsp);
> > -    ff_bswapdsp_init(&t->bsdsp);
> > +    av_bswapdsp_init(&t->bsdsp);
> >
> >      avctx->framerate = (AVRational){ 15, 1 };
> >      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
> > @@ -148,8 +148,8 @@ 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.bswap32_buf(t->bitstream_buf, (const uint32_t *) 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/exr.c b/libavcodec/exr.c
> > index 6a0af96ce4..e22045a1a9 100644
> > --- a/libavcodec/exr.c
> > +++ b/libavcodec/exr.c
> > @@ -47,7 +47,7 @@
> >  #include "bytestream.h"
> >
> >  #if HAVE_BIGENDIAN
> > -#include "bswapdsp.h"
> > +#include "libavutil/bswapdsp.h"
> >  #endif
> >
> >  #include "codec_internal.h"
> > @@ -150,7 +150,7 @@ typedef struct EXRContext {
> >      ExrDSPContext dsp;
> >
> >  #if HAVE_BIGENDIAN
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >  #endif
> >
> >      enum ExrCompr compression;
> > @@ -2224,7 +2224,7 @@ static av_cold int decode_init(AVCodecContext
> *avctx)
> >      ff_exrdsp_init(&s->dsp);
> >
> >  #if HAVE_BIGENDIAN
> > -    ff_bswapdsp_init(&s->bbdsp);
> > +    av_bswapdsp_init(&s->bbdsp);
> >  #endif
> >
> >      trc_func = avpriv_get_trc_function_from_trc(s->apply_trc_type);
> > diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
> > index bca71b3780..1082910974 100644
> > --- a/libavcodec/flacenc.c
> > +++ b/libavcodec/flacenc.c
> > @@ -20,6 +20,7 @@
> >   */
> >
> >  #include "libavutil/avassert.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/channel_layout.h"
> >  #include "libavutil/crc.h"
> >  #include "libavutil/intmath.h"
> > @@ -27,7 +28,6 @@
> >  #include "libavutil/opt.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "encode.h"
> >  #include "put_bits.h"
> > @@ -123,7 +123,7 @@ typedef struct FlacEncodeContext {
> >      struct AVMD5 *md5ctx;
> >      uint8_t *md5_buffer;
> >      unsigned int md5_buffer_size;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      FLACEncDSPContext flac_dsp;
> >
> >      int flushed;
> > @@ -454,7 +454,7 @@ static av_cold int flac_encode_init(AVCodecContext
> *avctx)
> >      ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
> >                        s->options.max_prediction_order,
> FF_LPC_TYPE_LEVINSON);
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >      ff_flacencdsp_init(&s->flac_dsp);
> >
> >      dprint_compression_options(s);
> > diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
> > index 4c4c46b602..33e24a5bfb 100644
> > --- a/libavcodec/fraps.c
> > +++ b/libavcodec/fraps.c
> > @@ -35,11 +35,11 @@
> >
> >  #define CACHED_BITSTREAM_READER HAVE_FAST_64BIT
> >  #define UNCHECKED_BITSTREAM_READER 1
> > +#include "libavutil/bswapdsp.h"
> >  #include "avcodec.h"
> >  #include "get_bits.h"
> >  #include "huffman.h"
> >  #include "bytestream.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "thread.h"
> >
> > @@ -51,7 +51,7 @@
> >   */
> >  typedef struct FrapsContext {
> >      AVCodecContext *avctx;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      uint8_t *tmpbuf;
> >      int tmpbuf_size;
> >  } FrapsContext;
> > @@ -69,7 +69,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      s->avctx  = avctx;
> >      s->tmpbuf = NULL;
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >
> >      return 0;
> >  }
> > @@ -106,8 +106,8 @@ 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.bswap32_buf((uint32_t *) s->tmpbuf,
> > +                        (const uint32_t *) 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..e9cef539b2 100644
> > --- a/libavcodec/hevcdec.c
> > +++ b/libavcodec/hevcdec.c
> > @@ -27,6 +27,7 @@
> >
> >  #include "libavutil/attributes.h"
> >  #include "libavutil/avstring.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/common.h"
> >  #include "libavutil/display.h"
> >  #include "libavutil/film_grain_params.h"
> > @@ -37,7 +38,6 @@
> >  #include "libavutil/pixdesc.h"
> >  #include "libavutil/timecode.h"
> >
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "cabac_functions.h"
> >  #include "codec_internal.h"
> > @@ -3527,7 +3527,7 @@ static av_cold int
> hevc_init_context(AVCodecContext *avctx)
> >      if (!s->md5_ctx)
> >          return AVERROR(ENOMEM);
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >
> >      s->dovi_ctx.logctx = avctx;
> >      s->eos = 0;
> > diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
> > index 9d3f4adbb3..f73ff352d1 100644
> > --- a/libavcodec/hevcdec.h
> > +++ b/libavcodec/hevcdec.h
> > @@ -25,11 +25,11 @@
> >
> >  #include <stdatomic.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/buffer.h"
> >  #include "libavutil/mem_internal.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "cabac.h"
> >  #include "dovi_rpu.h"
> >  #include "get_bits.h"
> > @@ -541,7 +541,7 @@ typedef struct HEVCContext {
> >      HEVCPredContext hpc;
> >      HEVCDSPContext hevcdsp;
> >      VideoDSPContext vdsp;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      H274FilmGrainDatabase h274db;
> >      int8_t *qp_y_tab;
> >      uint8_t *horizontal_bs;
> > diff --git a/libavcodec/huffyuvdec.c b/libavcodec/huffyuvdec.c
> > index 7d3515cc88..5d3c7a3828 100644
> > --- a/libavcodec/huffyuvdec.c
> > +++ b/libavcodec/huffyuvdec.c
> > @@ -35,13 +35,13 @@
> >  #include "config_components.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "get_bits.h"
> >  #include "huffyuv.h"
> >  #include "huffyuvdsp.h"
> >  #include "lossless_videodsp.h"
> >  #include "thread.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/imgutils.h"
> >  #include "libavutil/pixdesc.h"
> >
> > @@ -76,7 +76,7 @@ typedef struct HYuvDecContext {
> >      VLC vlc[8];                             //Y,U,V,A,YY,YU,YV,AA
> >      uint8_t *bitstream_buffer;
> >      unsigned int bitstream_buffer_size;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      HuffYUVDSPContext hdsp;
> >      LLVidDSPContext llviddsp;
> >  } HYuvDecContext;
> > @@ -340,7 +340,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >
> >      s->flags = avctx->flags;
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >      ff_huffyuvdsp_init(&s->hdsp, avctx->pix_fmt);
> >      ff_llviddsp_init(&s->llviddsp);
> >      memset(s->vlc, 0, 4 * sizeof(VLC));
> > @@ -1239,8 +1239,8 @@ static int decode_frame(AVCodecContext *avctx,
> AVFrame *p,
> >      if (!s->bitstream_buffer)
> >          return AVERROR(ENOMEM);
> >
> > -    s->bdsp.bswap_buf((uint32_t *) s->bitstream_buffer,
> > -                      (const uint32_t *) buf, buf_size / 4);
> > +    s->bdsp.bswap32_buf((uint32_t *) s->bitstream_buffer,
> > +                        (const uint32_t *) buf, buf_size / 4);
> >
> >      if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0)
> >          return ret;
> > @@ -1282,8 +1282,8 @@ static int decode_frame(AVCodecContext *avctx,
> AVFrame *p,
> >                  return AVERROR_INVALIDDATA;
> >
> >              y_offset = height - (slice + 1) * slice_height;
> > -            s->bdsp.bswap_buf((uint32_t *)s->bitstream_buffer,
> > -                              (const uint32_t *)(buf + slice_offset),
> slice_size / 4);
> > +            s->bdsp.bswap32_buf((uint32_t *)s->bitstream_buffer,
> > +                                (const uint32_t *)(buf + slice_offset),
> slice_size / 4);
> >          } else {
> >              y_offset = 0;
> >              slice_offset = 0;
> > diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c
> > index db274e37ad..6230e107a3 100644
> > --- a/libavcodec/huffyuvenc.c
> > +++ b/libavcodec/huffyuvenc.c
> > @@ -31,7 +31,6 @@
> >  #include "config_components.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "encode.h"
> >  #include "huffyuv.h"
> > @@ -39,6 +38,7 @@
> >  #include "huffyuvencdsp.h"
> >  #include "lossless_videoencdsp.h"
> >  #include "put_bits.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/opt.h"
> >  #include "libavutil/pixdesc.h"
> >
> > @@ -68,7 +68,7 @@ typedef struct HYuvEncContext {
> >      uint64_t stats[4][MAX_VLC_N];
> >      uint8_t len[4][MAX_VLC_N];
> >      uint32_t bits[4][MAX_VLC_N];
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      HuffYUVEncDSPContext hencdsp;
> >      LLVidEncDSPContext llvidencdsp;
> >      int non_determ; // non-deterministic, multi-threaded encoder allowed
> > @@ -247,7 +247,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
> >      s->avctx = avctx;
> >      s->flags = avctx->flags;
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >      ff_huffyuvencdsp_init(&s->hencdsp, avctx->pix_fmt);
> >      ff_llvidencdsp_init(&s->llvidencdsp);
> >
> > @@ -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.bswap32_buf((uint32_t *) pkt->data, (uint32_t *)
> pkt->data, size);
> >      }
> >
> >      s->picture_number++;
> > diff --git a/libavcodec/imc.c b/libavcodec/imc.c
> > index 174332de4d..185da01323 100644
> > --- a/libavcodec/imc.c
> > +++ b/libavcodec/imc.c
> > @@ -34,6 +34,7 @@
> >  #include <math.h>
> >  #include <stddef.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/channel_layout.h"
> >  #include "libavutil/ffmath.h"
> >  #include "libavutil/float_dsp.h"
> > @@ -43,7 +44,6 @@
> >  #include "libavutil/tx.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "get_bits.h"
> > @@ -92,7 +92,7 @@ typedef struct IMCContext {
> >      GetBitContext gb;
> >
> >      AVFloatDSPContext *fdsp;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      AVTXContext *mdct;
> >      av_tx_fn mdct_fn;
> >      float *out_samples;
> > @@ -243,7 +243,7 @@ static av_cold int imc_decode_init(AVCodecContext
> *avctx)
> >      if (ret < 0)
> >          return ret;
> >
> > -    ff_bswapdsp_init(&q->bdsp);
> > +    av_bswapdsp_init(&q->bdsp);
> >
> >      avctx->sample_fmt     = AV_SAMPLE_FMT_FLTP;
> >
> > diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c
> > index ccec5dff43..ae391b343b 100644
> > --- a/libavcodec/imm4.c
> > +++ b/libavcodec/imm4.c
> > @@ -23,11 +23,11 @@
> >  #include <stddef.h>
> >  #include <string.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/mem_internal.h"
> >  #include "libavutil/thread.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "copy_block.h"
> > @@ -40,7 +40,7 @@
> >  #define BLOCK_VLC_BITS  12
> >
> >  typedef struct IMM4Context {
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      GetBitContext  gb;
> >
> >      AVFrame *prev_frame;
> > @@ -368,9 +368,9 @@ static int decode_frame(AVCodecContext *avctx,
> AVFrame *frame,
> >      if (!s->bitstream)
> >          return AVERROR(ENOMEM);
> >
> > -    s->bdsp.bswap_buf((uint32_t *)s->bitstream,
> > -                      (uint32_t *)avpkt->data,
> > -                      (avpkt->size + 3) >> 2);
> > +    s->bdsp.bswap32_buf((uint32_t *)s->bitstream,
> > +                        (uint32_t *)avpkt->data,
> > +                        (avpkt->size + 3) >> 2);
> >
> >      if ((ret = init_get_bits8(gb, s->bitstream, FFALIGN(avpkt->size,
> 4))) < 0)
> >          return ret;
> > @@ -495,7 +495,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      static AVOnce init_static_once = AV_ONCE_INIT;
> >      IMM4Context *s = avctx->priv_data;
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >      ff_idctdsp_init(&s->idsp, avctx);
> >
> >      s->prev_frame = av_frame_alloc();
> > diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
> > index 640b671a0f..269a3afdfe 100644
> > --- a/libavcodec/mdec.c
> > +++ b/libavcodec/mdec.c
> > @@ -27,11 +27,11 @@
> >   * This is very similar to intra-only MPEG-1.
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/mem_internal.h"
> >
> >  #include "avcodec.h"
> >  #include "blockdsp.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "idctdsp.h"
> >  #include "mpeg12data.h"
> > @@ -41,7 +41,7 @@
> >  typedef struct MDECContext {
> >      AVCodecContext *avctx;
> >      BlockDSPContext bdsp;
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >      IDCTDSPContext idsp;
> >      GetBitContext gb;
> >      uint8_t permutated_scantable[64];
> > @@ -219,7 +219,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      a->avctx           = avctx;
> >
> >      ff_blockdsp_init(&a->bdsp);
> > -    ff_bswapdsp_init(&a->bbdsp);
> > +    av_bswapdsp_init(&a->bbdsp);
> >      ff_idctdsp_init(&a->idsp, avctx);
> >      ff_mpeg12_init_vlcs();
> >      ff_permute_scantable(a->permutated_scantable, ff_zigzag_direct,
> > diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
> > index 891471b30e..333085f8f3 100644
> > --- a/libavcodec/mimic.c
> > +++ b/libavcodec/mimic.c
> > @@ -21,6 +21,7 @@
> >
> >  #include <stdint.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/mem_internal.h"
> >  #include "libavutil/thread.h"
> >
> > @@ -30,7 +31,6 @@
> >  #include "decode.h"
> >  #include "get_bits.h"
> >  #include "bytestream.h"
> > -#include "bswapdsp.h"
> >  #include "hpeldsp.h"
> >  #include "idctdsp.h"
> >  #include "thread.h"
> > @@ -58,7 +58,7 @@ typedef struct MimicContext {
> >      GetBitContext   gb;
> >      uint8_t         permutated_scantable[64];
> >      BlockDSPContext bdsp;
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >      HpelDSPContext  hdsp;
> >      IDCTDSPContext  idsp;
> >
> > @@ -134,7 +134,7 @@ static av_cold int mimic_decode_init(AVCodecContext
> *avctx)
> >      ctx->cur_index  = 15;
> >
> >      ff_blockdsp_init(&ctx->bdsp);
> > -    ff_bswapdsp_init(&ctx->bbdsp);
> > +    av_bswapdsp_init(&ctx->bbdsp);
> >      ff_hpeldsp_init(&ctx->hdsp, avctx->flags);
> >      ff_idctdsp_init(&ctx->idsp, avctx);
> >      ff_permute_scantable(ctx->permutated_scantable, col_zag,
> ctx->idsp.idct_permutation);
> > @@ -411,9 +411,9 @@ static int mimic_decode_frame(AVCodecContext *avctx,
> AVFrame *rframe,
> >      if (!ctx->swap_buf)
> >          return AVERROR(ENOMEM);
> >
> > -    ctx->bbdsp.bswap_buf(ctx->swap_buf,
> > -                         (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
> > -                         swap_buf_size >> 2);
> > +    ctx->bbdsp.bswap32_buf(ctx->swap_buf,
> > +                           (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
> > +                           swap_buf_size >> 2);
> >      init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3);
> >
> >      res = decode(ctx, quality, num_coeffs, !is_pframe);
> > diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c
> > index c3b2383dbc..79c6953ee4 100644
> > --- a/libavcodec/mobiclip.c
> > +++ b/libavcodec/mobiclip.c
> > @@ -24,10 +24,10 @@
> >  #include <inttypes.h>
> >
> >  #include "libavutil/avassert.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/thread.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "get_bits.h"
> > @@ -271,7 +271,7 @@ typedef struct MobiClipContext {
> >      MotionXY *motion;
> >      int     motion_size;
> >
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >  } MobiClipContext;
> >
> >  static VLC rl_vlc[2];
> > @@ -310,7 +310,7 @@ static av_cold int mobiclip_init(AVCodecContext
> *avctx)
> >          return AVERROR_INVALIDDATA;
> >      }
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >
> >      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
> >
> > diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c
> > index 4141c5a495..04a56a379c 100644
> > --- a/libavcodec/motionpixels.c
> > +++ b/libavcodec/motionpixels.c
> > @@ -19,13 +19,13 @@
> >   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/thread.h"
> >
> >  #include "config.h"
> >
> >  #include "avcodec.h"
> >  #include "get_bits.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >
> > @@ -41,7 +41,7 @@ typedef struct HuffCode {
> >  typedef struct MotionPixelsContext {
> >      AVCodecContext *avctx;
> >      AVFrame *frame;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      uint8_t *changes_map;
> >      int offset_bits_len;
> >      int codes_count, current_codes_count;
> > @@ -80,7 +80,7 @@ static av_cold int mp_decode_init(AVCodecContext
> *avctx)
> >      }
> >
> >      mp->avctx = avctx;
> > -    ff_bswapdsp_init(&mp->bdsp);
> > +    av_bswapdsp_init(&mp->bdsp);
> >      mp->changes_map = av_calloc(avctx->width, h4);
> >      mp->offset_bits_len = av_log2(avctx->width * avctx->height) + 1;
> >      mp->vpt = av_calloc(avctx->height, sizeof(*mp->vpt));
> > @@ -294,8 +294,8 @@ 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.bswap32_buf((uint32_t *) mp->bswapbuf, (const uint32_t *)
> 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/mpc.h b/libavcodec/mpc.h
> > index cef8db4899..c736a84088 100644
> > --- a/libavcodec/mpc.h
> > +++ b/libavcodec/mpc.h
> > @@ -31,10 +31,10 @@
> >
> >  #include <stdint.h>
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/lfg.h"
> >  #include "libavutil/mem_internal.h"
> >
> > -#include "bswapdsp.h"
> >  #include "mpegaudio.h"
> >  #include "mpegaudiodsp.h"
> >
> > @@ -52,7 +52,7 @@ typedef struct Band {
> >  }Band;
> >
> >  typedef struct MPCContext {
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      MPADSPContext mpadsp;
> >      int IS, MSS, gapless;
> >      int lastframelen;
> > diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
> > index d2745366c2..9b7af9a01f 100644
> > --- a/libavcodec/mpc7.c
> > +++ b/libavcodec/mpc7.c
> > @@ -91,9 +91,9 @@ static av_cold int mpc7_decode_init(AVCodecContext *
> avctx)
> >      }
> >      memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
> >      av_lfg_init(&c->rnd, 0xDEADBEEF);
> > -    ff_bswapdsp_init(&c->bdsp);
> > +    av_bswapdsp_init(&c->bdsp);
> >      ff_mpadsp_init(&c->mpadsp);
> > -    c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *)
> avctx->extradata, 4);
> > +    c->bdsp.bswap32_buf((uint32_t *) buf, (const uint32_t *)
> avctx->extradata, 4);
> >      init_get_bits(&gb, buf, 128);
> >
> >      c->IS = get_bits1(&gb);
> > @@ -211,8 +211,8 @@ static int mpc7_decode_frame(AVCodecContext *avctx,
> AVFrame *frame,
> >      av_fast_padded_malloc(&c->bits, &c->buf_size, buf_size);
> >      if (!c->bits)
> >          return AVERROR(ENOMEM);
> > -    c->bdsp.bswap_buf((uint32_t *) c->bits, (const uint32_t *) buf,
> > -                      buf_size >> 2);
> > +    c->bdsp.bswap32_buf((uint32_t *) c->bits, (const uint32_t *) buf,
> > +                        buf_size >> 2);
> >      if ((ret = init_get_bits8(&gb, c->bits, buf_size)) < 0)
> >          return ret;
> >      skip_bits_long(&gb, skip);
> > diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
> > index 72cdd13916..0fc25cac04 100644
> > --- a/libavcodec/rawdec.c
> > +++ b/libavcodec/rawdec.c
> > @@ -25,13 +25,13 @@
> >   */
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "get_bits.h"
> >  #include "internal.h"
> >  #include "raw.h"
> >  #include "libavutil/avassert.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/buffer.h"
> >  #include "libavutil/common.h"
> >  #include "libavutil/intreadwrite.h"
> > @@ -52,7 +52,7 @@ typedef struct RawVideoContext {
> >      int is_lt_16bpp; // 16bpp pixfmt and bits_per_coded_sample < 16
> >      int tff;
> >
> > -    BswapDSPContext bbdsp;
> > +    AVBSwapDSPContext bbdsp;
> >      void *bitstream_buf;
> >      unsigned int bitstream_buf_size;
> >  } RawVideoContext;
> > @@ -73,7 +73,7 @@ static av_cold int raw_init_decoder(AVCodecContext
> *avctx)
> >      RawVideoContext *context = avctx->priv_data;
> >      const AVPixFmtDescriptor *desc;
> >
> > -    ff_bswapdsp_init(&context->bbdsp);
> > +    av_bswapdsp_init(&context->bbdsp);
> >
> >      if (   avctx->codec_tag == MKTAG('r','a','w',' ')
> >          || avctx->codec_tag == MKTAG('N','O','1','6'))
> > @@ -324,7 +324,7 @@ static int raw_decode(AVCodecContext *avctx, AVFrame
> *frame,
> >              if (swap == 16)
> >                  context->bbdsp.bswap16_buf(context->bitstream_buf,
> (const uint16_t*)buf, buf_size / 2);
> >              else if (swap == 32)
> > -                context->bbdsp.bswap_buf(context->bitstream_buf, (const
> uint32_t*)buf, buf_size / 4);
> > +                context->bbdsp.bswap32_buf(context->bitstream_buf,
> (const uint32_t*)buf, buf_size / 4);
> >              else
> >                  return AVERROR_INVALIDDATA;
> >              buf = context->bitstream_buf;
> > diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
> > index 965942f4df..212ab3dc13 100644
> > --- a/libavcodec/riscv/Makefile
> > +++ b/libavcodec/riscv/Makefile
> > @@ -5,9 +5,6 @@ RVV-OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_rvv.o
> >  OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_init.o \
> >                             riscv/audiodsp_rvf.o
> >  RVV-OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_rvv.o
> > -OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_init.o \
> > -                           riscv/bswapdsp_rvb.o
> > -RVV-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_rvv.o
> >  OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_init.o
> >  RVV-OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_rvv.o
> >  OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_init.o
> > diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
> > index 1b2abd76b1..6385821ca1 100644
> > --- a/libavcodec/shorten.c
> > +++ b/libavcodec/shorten.c
> > @@ -25,9 +25,10 @@
> >   * @author Jeff Muizelaar
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> > +
> >  #include <limits.h>
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> > @@ -112,7 +113,7 @@ typedef struct ShortenContext {
> >      int got_header;
> >      int got_quit_command;
> >      int swap;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >  } ShortenContext;
> >
> >  static av_cold int shorten_decode_init(AVCodecContext *avctx)
> > @@ -120,7 +121,7 @@ static av_cold int
> shorten_decode_init(AVCodecContext *avctx)
> >      ShortenContext *s = avctx->priv_data;
> >      s->avctx          = avctx;
> >
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >
> >      return 0;
> >  }
> > diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c
> > index b168b9cda1..7b6db4d9d5 100644
> > --- a/libavcodec/truemotion2.c
> > +++ b/libavcodec/truemotion2.c
> > @@ -26,8 +26,9 @@
> >
> >  #include <inttypes.h>
> >
> > +#include "libavutil/bswapdsp.h"
> > +
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> > @@ -65,7 +66,7 @@ typedef struct TM2Context {
> >
> >      GetBitContext gb;
> >      int error;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >
> >      uint8_t *buffer;
> >      int buffer_size;
> > @@ -907,8 +908,8 @@ 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.bswap32_buf((uint32_t *) l->buffer, (const uint32_t *) buf,
> > +                        buf_size >> 2);
> >
> >      if ((ret = tm2_read_header(l, l->buffer)) < 0) {
> >          return ret;
> > @@ -960,7 +961,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      if (!l->pic)
> >          return AVERROR(ENOMEM);
> >
> > -    ff_bswapdsp_init(&l->bdsp);
> > +    av_bswapdsp_init(&l->bdsp);
> >
> >      l->last  = av_malloc_array(w, 2 * sizeof(*l->last));
> >      if (!l->last)
> > diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c
> > index 454121cc75..06a76fe0db 100644
> > --- a/libavcodec/truespeech.c
> > +++ b/libavcodec/truespeech.c
> > @@ -19,11 +19,11 @@
> >   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/channel_layout.h"
> >  #include "libavutil/mem_internal.h"
> >
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "decode.h"
> >  #include "get_bits.h"
> > @@ -38,7 +38,7 @@
> >   * TrueSpeech decoder context
> >   */
> >  typedef struct TSContext {
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      /* input data */
> >      DECLARE_ALIGNED(16, uint8_t, buffer)[32];
> >      int16_t vector[8];  ///< input vector: 5/5/4/4/4/3/3/3
> > @@ -73,7 +73,7 @@ static av_cold int
> truespeech_decode_init(AVCodecContext * avctx)
> >      avctx->ch_layout      = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO;
> >      avctx->sample_fmt     = AV_SAMPLE_FMT_S16;
> >
> > -    ff_bswapdsp_init(&c->bdsp);
> > +    av_bswapdsp_init(&c->bdsp);
> >
> >      return 0;
> >  }
> > @@ -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.bswap32_buf((uint32_t *) dec->buffer, (const uint32_t *)
> input, 8);
> >      init_get_bits(&gb, dec->buffer, 32 * 8);
> >
> >      dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)];
> > diff --git a/libavcodec/utvideo.h b/libavcodec/utvideo.h
> > index 9da9329ff3..2ccd088c47 100644
> > --- a/libavcodec/utvideo.h
> > +++ b/libavcodec/utvideo.h
> > @@ -27,9 +27,9 @@
> >   * Common Ut Video header
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/common.h"
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "utvideodsp.h"
> >  #include "lossless_videodsp.h"
> >  #include "lossless_videoencdsp.h"
> > @@ -65,7 +65,7 @@ typedef struct UtvideoContext {
> >      const AVClass *class;
> >      AVCodecContext *avctx;
> >      UTVideoDSPContext utdsp;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >      LLVidDSPContext llviddsp;
> >      LLVidEncDSPContext llvidencdsp;
> >
> > diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
> > index 83120d1b22..dcf09b56c6 100644
> > --- a/libavcodec/utvideodec.c
> > +++ b/libavcodec/utvideodec.c
> > @@ -30,10 +30,10 @@
> >  #define CACHED_BITSTREAM_READER !ARCH_X86_32
> >  #define UNCHECKED_BITSTREAM_READER 1
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/intreadwrite.h"
> >  #include "libavutil/pixdesc.h"
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "codec_internal.h"
> >  #include "get_bits.h"
> > @@ -150,9 +150,9 @@ 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),
> > -                          (slice_data_end - slice_data_start + 3) >> 2);
> > +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
> > +                            (uint32_t *)(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);
> >
> >          prev = 0x200;
> > @@ -311,9 +311,9 @@ static int decode_plane(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),
> > -                          (slice_data_end - slice_data_start + 3) >> 2);
> > +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
> > +                            (uint32_t *)(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);
> >
> >          prev = 0x80;
> > @@ -887,7 +887,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      c->avctx = avctx;
> >
> >      ff_utvideodsp_init(&c->utdsp);
> > -    ff_bswapdsp_init(&c->bdsp);
> > +    av_bswapdsp_init(&c->bdsp);
> >      ff_llviddsp_init(&c->llviddsp);
> >
> >      c->slice_bits_size = 0;
> > diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c
> > index d4388da8ba..de9ea8c135 100644
> > --- a/libavcodec/utvideoenc.c
> > +++ b/libavcodec/utvideoenc.c
> > @@ -24,6 +24,7 @@
> >   * Ut Video encoder
> >   */
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/imgutils.h"
> >  #include "libavutil/intreadwrite.h"
> >  #include "libavutil/opt.h"
> > @@ -31,7 +32,6 @@
> >  #include "avcodec.h"
> >  #include "codec_internal.h"
> >  #include "encode.h"
> > -#include "bswapdsp.h"
> >  #include "bytestream.h"
> >  #include "put_bits.h"
> >  #include "mathops.h"
> > @@ -132,7 +132,7 @@ static av_cold int
> utvideo_encode_init(AVCodecContext *avctx)
> >          return AVERROR_INVALIDDATA;
> >      }
> >
> > -    ff_bswapdsp_init(&c->bdsp);
> > +    av_bswapdsp_init(&c->bdsp);
> >      ff_llvidencdsp_init(&c->llvidencdsp);
> >
> >      if (c->frame_pred == PRED_GRADIENT) {
> > @@ -490,9 +490,9 @@ static int encode_plane(AVCodecContext *avctx, const
> uint8_t *src,
> >          slice_len = offset - slice_len;
> >
> >          /* Byteswap the written huffman codes */
> > -        c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
> > -                          (uint32_t *) c->slice_bits,
> > -                          slice_len >> 2);
> > +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
> > +                            (uint32_t *) c->slice_bits,
> > +                            slice_len >> 2);
> >
> >          /* Write the offset to the stream */
> >          bytestream2_put_le32(pb, offset);
> > diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
> > index 6f62878081..ad0f54be3c 100644
> > --- a/libavcodec/x86/Makefile
> > +++ b/libavcodec/x86/Makefile
> > @@ -4,7 +4,6 @@ OBJS                                   +=
> x86/constants.o               \
> >  OBJS-$(CONFIG_AC3DSP)                  += x86/ac3dsp_init.o
> >  OBJS-$(CONFIG_AUDIODSP)                += x86/audiodsp_init.o
> >  OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp_init.o
> > -OBJS-$(CONFIG_BSWAPDSP)                += x86/bswapdsp_init.o
> >  OBJS-$(CONFIG_DCT)                     += x86/dct_init.o
> >  OBJS-$(CONFIG_DIRAC_DECODER)           += x86/diracdsp_init.o
>  \
> >                                            x86/dirac_dwt_init.o
> > @@ -98,7 +97,6 @@ X86ASM-OBJS-$(CONFIG_AC3DSP)           +=
> x86/ac3dsp.o                  \
> >                                            x86/ac3dsp_downmix.o
> >  X86ASM-OBJS-$(CONFIG_AUDIODSP)         += x86/audiodsp.o
> >  X86ASM-OBJS-$(CONFIG_BLOCKDSP)         += x86/blockdsp.o
> > -X86ASM-OBJS-$(CONFIG_BSWAPDSP)         += x86/bswapdsp.o
> >  X86ASM-OBJS-$(CONFIG_DCT)              += x86/dct32.o
> >  X86ASM-OBJS-$(CONFIG_FFT)              += x86/fft.o
> >  X86ASM-OBJS-$(CONFIG_FMTCONVERT)       += x86/fmtconvert.o
> > diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c
> > index 29c10f05da..7a90e2e5f1 100644
> > --- a/libavcodec/ylc.c
> > +++ b/libavcodec/ylc.c
> > @@ -22,11 +22,11 @@
> >
> >  #define YLC_VLC_BITS 10
> >
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/intreadwrite.h"
> >  #include "libavutil/mem.h"
> >  #include "libavutil/pixfmt.h"
> >  #include "avcodec.h"
> > -#include "bswapdsp.h"
> >  #include "codec_internal.h"
> >  #include "get_bits.h"
> >  #include "thread.h"
> > @@ -37,7 +37,7 @@ typedef struct YLCContext {
> >      uint32_t table[256];
> >      uint8_t *buffer;
> >      int buffer_size;
> > -    BswapDSPContext bdsp;
> > +    AVBSwapDSPContext bdsp;
> >  } YLCContext;
> >
> >  static av_cold int decode_init(AVCodecContext *avctx)
> > @@ -45,7 +45,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >      YLCContext *s = avctx->priv_data;
> >
> >      avctx->pix_fmt = AV_PIX_FMT_YUYV422;
> > -    ff_bswapdsp_init(&s->bdsp);
> > +    av_bswapdsp_init(&s->bdsp);
> >
> >      return 0;
> >  }
> > @@ -311,9 +311,9 @@ 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,
> > -                      (boffset - toffset + 3) >> 2);
> > +    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
> > +                        (uint32_t *) s->buffer,
> > +                        (boffset - toffset + 3) >> 2);
> >      if ((ret = init_get_bits8(&gb, s->buffer, boffset - toffset)) < 0)
> >          return ret;
> >
> > @@ -332,9 +332,9 @@ static int decode_frame(AVCodecContext *avctx,
> AVFrame *p,
> >
> >      memcpy(s->buffer, avpkt->data + boffset, avpkt->size - boffset);
> >      memset(s->buffer + avpkt->size - boffset, 0,
> AV_INPUT_BUFFER_PADDING_SIZE);
> > -    s->bdsp.bswap_buf((uint32_t *) s->buffer,
> > -                      (uint32_t *) s->buffer,
> > -                      (avpkt->size - boffset) >> 2);
> > +    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
> > +                        (uint32_t *) s->buffer,
> > +                        (avpkt->size - boffset) >> 2);
> >      if ((ret = init_get_bits8(&gb, s->buffer, avpkt->size - boffset)) <
> 0)
> >          return ret;
> >
> > diff --git a/libavutil/Makefile b/libavutil/Makefile
> > index 3d9c07aea8..bff5dbc7d9 100644
> > --- a/libavutil/Makefile
> > +++ b/libavutil/Makefile
> > @@ -13,6 +13,7 @@ HEADERS = adler32.h
>                  \
> >            blowfish.h
> \
> >            bprint.h
> \
> >            bswap.h
>  \
> > +          bswapdsp.h
> \
> >            buffer.h
> \
> >            cast5.h
>  \
> >            camellia.h
> \
> > @@ -108,6 +109,7 @@ OBJS = adler32.o
>                     \
> >         base64.o
>  \
> >         blowfish.o
>  \
> >         bprint.o
>  \
> > +       bswapdsp.o
>  \
> >         buffer.o
>  \
> >         cast5.o
> \
> >         camellia.o
>  \
> > diff --git a/libavcodec/bswapdsp.c b/libavutil/bswapdsp.c
> > similarity index 80%
> > rename from libavcodec/bswapdsp.c
> > rename to libavutil/bswapdsp.c
> > index f0ea2b55c5..e85cdfe5d7 100644
> > --- a/libavcodec/bswapdsp.c
> > +++ b/libavutil/bswapdsp.c
> > @@ -18,15 +18,18 @@
> >
> >  #include <stdint.h>
> >
> > -#include "libavutil/attributes.h"
> > -#include "libavutil/bswap.h"
> > +#include "attributes.h"
> > +#include "bswap.h"
> >  #include "bswapdsp.h"
> >
> > -static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
> > +void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c);
> > +void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
> > +
> > +static void bswap32_buf(uint32_t *dst, const uint32_t *src, int len)
> >  {
> >      int i;
> >
> > -    for (i = 0; i + 8 <= w; i += 8) {
> > +    for (i = 0; i + 8 <= len; 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]);
> > @@ -36,7 +39,7 @@ static void bswap_buf(uint32_t *dst, const uint32_t
> *src, int w)
> >          dst[i + 6] = av_bswap32(src[i + 6]);
> >          dst[i + 7] = av_bswap32(src[i + 7]);
> >      }
> > -    for (; i < w; i++)
> > +    for (; i < len; i++)
> >          dst[i + 0] = av_bswap32(src[i + 0]);
> >  }
> >
> > @@ -46,9 +49,9 @@ static void bswap16_buf(uint16_t *dst, const uint16_t
> *src, int len)
> >          *dst++ = av_bswap16(*src++);
> >  }
> >
> > -av_cold void ff_bswapdsp_init(BswapDSPContext *c)
> > +av_cold void av_bswapdsp_init(AVBSwapDSPContext *c)
> >  {
> > -    c->bswap_buf   = bswap_buf;
> > +    c->bswap32_buf = bswap32_buf;
> >      c->bswap16_buf = bswap16_buf;
> >
> >  #if ARCH_RISCV
> > diff --git a/libavcodec/bswapdsp.h b/libavutil/bswapdsp.h
> > similarity index 71%
> > rename from libavcodec/bswapdsp.h
> > rename to libavutil/bswapdsp.h
> > index 6f4db66115..b540560d6a 100644
> > --- a/libavcodec/bswapdsp.h
> > +++ b/libavutil/bswapdsp.h
> > @@ -16,18 +16,16 @@
> >   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> >   */
> >
> > -#ifndef AVCODEC_BSWAPDSP_H
> > -#define AVCODEC_BSWAPDSP_H
> > +#ifndef AVUTIL_BSWAPDSP_H
> > +#define AVUTIL_BSWAPDSP_H
> >
> >  #include <stdint.h>
> >
> > -typedef struct BswapDSPContext {
> > -    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
> > +typedef struct AVBSwapDSPContext {
> > +    void (*bswap32_buf)(uint32_t *dst, const uint32_t *src, int len);
> >      void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
> > -} BswapDSPContext;
> > +} AVBSwapDSPContext;
> >
> > -void ff_bswapdsp_init(BswapDSPContext *c);
> > -void ff_bswapdsp_init_riscv(BswapDSPContext *c);
> > -void ff_bswapdsp_init_x86(BswapDSPContext *c);
> > +void av_bswapdsp_init(AVBSwapDSPContext *c);
> >
> > -#endif /* AVCODEC_BSWAPDSP_H */
> > +#endif /* AVUTIL_BSWAPDSP_H */
> > diff --git a/libavutil/riscv/Makefile b/libavutil/riscv/Makefile
> > index 1597154ba5..525538f6b6 100644
> > --- a/libavutil/riscv/Makefile
> > +++ b/libavutil/riscv/Makefile
> > @@ -1,5 +1,8 @@
> > -OBJS +=     riscv/float_dsp_init.o \
> > +OBJS +=     riscv/bswapdsp_init.o \
> > +            riscv/bswapdsp_rvb.o \
> > +            riscv/float_dsp_init.o \
> >              riscv/fixed_dsp_init.o \
> >              riscv/cpu.o
> > -RVV-OBJS += riscv/float_dsp_rvv.o \
> > +RVV-OBJS += riscv/bswapdsp_rvv.o  \
> > +            riscv/float_dsp_rvv.o \
> >              riscv/fixed_dsp_rvv.o
> > diff --git a/libavcodec/riscv/bswapdsp_init.c
> b/libavutil/riscv/bswapdsp_init.c
> > similarity index 85%
> > rename from libavcodec/riscv/bswapdsp_init.c
> > rename to libavutil/riscv/bswapdsp_init.c
> > index abe84ec1f7..362d574a27 100644
> > --- a/libavcodec/riscv/bswapdsp_init.c
> > +++ b/libavutil/riscv/bswapdsp_init.c
> > @@ -22,24 +22,25 @@
> >
> >  #include "config.h"
> >  #include "libavutil/attributes.h"
> > +#include "libavutil/bswapdsp.h"
> >  #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_bswapdsp_init_riscv(AVBSwapDSPContext *c);
> >
> > -av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
> > +av_cold void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c)
> >  {
> >      int cpu_flags = av_get_cpu_flags();
> >
> >  #if (__riscv_xlen >= 64)
> >      if (cpu_flags & AV_CPU_FLAG_RVB_BASIC)
> > -        c->bswap_buf = ff_bswap32_buf_rvb;
> > +        c->bswap32_buf = ff_bswap32_buf_rvb;
> >  #endif
> >  #if HAVE_RVV
> >      if (cpu_flags & AV_CPU_FLAG_RVV_I32) {
> > -        c->bswap_buf = ff_bswap32_buf_rvv;
> > +        c->bswap32_buf = ff_bswap32_buf_rvv;
> >          c->bswap16_buf = ff_bswap16_buf_rvv;
> >      }
> >  #endif
> > diff --git a/libavcodec/riscv/bswapdsp_rvb.S
> b/libavutil/riscv/bswapdsp_rvb.S
> > similarity index 100%
> > rename from libavcodec/riscv/bswapdsp_rvb.S
> > rename to libavutil/riscv/bswapdsp_rvb.S
> > diff --git a/libavcodec/riscv/bswapdsp_rvv.S
> b/libavutil/riscv/bswapdsp_rvv.S
> > similarity index 100%
> > rename from libavcodec/riscv/bswapdsp_rvv.S
> > rename to libavutil/riscv/bswapdsp_rvv.S
> > diff --git a/libavutil/version.h b/libavutil/version.h
> > index 3b616ea489..60f96af5df 100644
> > --- a/libavutil/version.h
> > +++ b/libavutil/version.h
> > @@ -79,7 +79,7 @@
> >   */
> >
> >  #define LIBAVUTIL_VERSION_MAJOR  57
> > -#define LIBAVUTIL_VERSION_MINOR  43
> > +#define LIBAVUTIL_VERSION_MINOR  44
> >  #define LIBAVUTIL_VERSION_MICRO 100
> >
> >  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR,
> \
> > diff --git a/libavutil/x86/Makefile b/libavutil/x86/Makefile
> > index d66839e35d..40bac784d1 100644
> > --- a/libavutil/x86/Makefile
> > +++ b/libavutil/x86/Makefile
> > @@ -4,14 +4,16 @@ OBJS += x86/cpu.o
>                  \
> >          x86/imgutils_init.o
>  \
> >          x86/lls_init.o
> \
> >
> > -OBJS-$(HAVE_X86ASM) += x86/tx_float_init.o
> \
> > +OBJS-$(HAVE_X86ASM) += x86/bswapdsp_init.o
> \
> > +                       x86/tx_float_init.o
> >
> >  OBJS-$(CONFIG_PIXELUTILS) += x86/pixelutils_init.o
> \
> >
> >  EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) =
> x86/emms.o
> >
> > -X86ASM-OBJS += x86/cpuid.o
> \
> > -             $(EMMS_OBJS__yes_)                                      \
> > +X86ASM-OBJS += x86/bswapdsp.o
>  \
> > +             x86/cpuid.o
> \
> > +             $(EMMS_OBJS__yes_)
>  \
> >               x86/fixed_dsp.o
> \
> >               x86/float_dsp.o
> \
> >               x86/imgutils.o
>  \
> > diff --git a/libavcodec/x86/bswapdsp.asm b/libavutil/x86/bswapdsp.asm
> > similarity index 97%
> > rename from libavcodec/x86/bswapdsp.asm
> > rename to libavutil/x86/bswapdsp.asm
> > index 31c6c48a21..c3bb90c2be 100644
> > --- a/libavcodec/x86/bswapdsp.asm
> > +++ b/libavutil/x86/bswapdsp.asm
> > @@ -26,8 +26,6 @@
> >  SECTION_RODATA
> >  pb_bswap32: db 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
> >
> > -cextern pb_80
> > -
> >  SECTION .text
> >
> >  ; %1 = aligned/unaligned
> > @@ -99,7 +97,7 @@ SECTION .text
> >      add      r0, 16
> >  %endmacro
> >
> > -; void ff_bswap_buf(uint32_t *dst, const uint32_t *src, int w);
> > +; void ff_bswap32_buf(uint32_t *dst, const uint32_t *src, int len);
> >  %macro BSWAP32_BUF 0
> >  %if cpuflag(ssse3)||cpuflag(avx2)
> >  cglobal bswap32_buf, 3,4,3
> > diff --git a/libavcodec/x86/bswapdsp_init.c
> b/libavutil/x86/bswapdsp_init.c
> > similarity index 80%
> > rename from libavcodec/x86/bswapdsp_init.c
> > rename to libavutil/x86/bswapdsp_init.c
> > index 877bab1a2c..3694e9208c 100644
> > --- a/libavcodec/x86/bswapdsp_init.c
> > +++ b/libavutil/x86/bswapdsp_init.c
> > @@ -19,22 +19,23 @@
> >  #include <stdint.h>
> >
> >  #include "libavutil/attributes.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/cpu.h"
> >  #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 uint32_t *src, int len);
> > +void ff_bswap32_buf_ssse3(uint32_t *dst, const uint32_t *src, int len);
> > +void ff_bswap32_buf_avx2(uint32_t *dst, const uint32_t *src, int len);
> > +void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
> >
> > -av_cold void ff_bswapdsp_init_x86(BswapDSPContext *c)
> > +av_cold void ff_bswapdsp_init_x86(AVBSwapDSPContext *c)
> >  {
> >      int cpu_flags = av_get_cpu_flags();
> >
> >      if (EXTERNAL_SSE2(cpu_flags))
> > -        c->bswap_buf = ff_bswap32_buf_sse2;
> > +        c->bswap32_buf = ff_bswap32_buf_sse2;
> >      if (EXTERNAL_SSSE3(cpu_flags))
> > -        c->bswap_buf = ff_bswap32_buf_ssse3;
> > +        c->bswap32_buf = ff_bswap32_buf_ssse3;
> >      if (EXTERNAL_AVX2_FAST(cpu_flags))
> > -        c->bswap_buf = ff_bswap32_buf_avx2;
> > +        c->bswap32_buf = ff_bswap32_buf_avx2;
> >  }
> > diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
> > index a6f06c7007..1bfaea0e9b 100644
> > --- a/tests/checkasm/Makefile
> > +++ b/tests/checkasm/Makefile
> > @@ -2,7 +2,6 @@
> >  # subsystems
> >  AVCODECOBJS-$(CONFIG_AUDIODSP)          += audiodsp.o
> >  AVCODECOBJS-$(CONFIG_BLOCKDSP)          += blockdsp.o
> > -AVCODECOBJS-$(CONFIG_BSWAPDSP)          += bswapdsp.o
> >  AVCODECOBJS-$(CONFIG_FMTCONVERT)        += fmtconvert.o
> >  AVCODECOBJS-$(CONFIG_G722DSP)           += g722dsp.o
> >  AVCODECOBJS-$(CONFIG_H264DSP)           += h264dsp.o
> > @@ -59,6 +58,7 @@ CHECKASMOBJS-$(CONFIG_SWSCALE)  += $(SWSCALEOBJS)
> >  AVUTILOBJS                              += av_tx.o
> >  AVUTILOBJS                              += fixed_dsp.o
> >  AVUTILOBJS                              += float_dsp.o
> > +AVUTILOBJS                              += bswapdsp.o
> >
> >  CHECKASMOBJS-$(CONFIG_AVUTIL)  += $(AVUTILOBJS)
> >
> > diff --git a/tests/checkasm/bswapdsp.c b/tests/checkasm/bswapdsp.c
> > index d789e90de3..f8dc50be33 100644
> > --- a/tests/checkasm/bswapdsp.c
> > +++ b/tests/checkasm/bswapdsp.c
> > @@ -20,7 +20,7 @@
> >
> >  #include <string.h>
> >  #include "checkasm.h"
> > -#include "libavcodec/bswapdsp.h"
> > +#include "libavutil/bswapdsp.h"
> >  #include "libavutil/common.h"
> >  #include "libavutil/internal.h"
> >  #include "libavutil/intreadwrite.h"
> > @@ -63,11 +63,11 @@ void checkasm_check_bswapdsp(void)
> >      LOCAL_ALIGNED_16(uint8_t, src1, [BUF_SIZE]);
> >      LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]);
> >      LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]);
> > -    BswapDSPContext h;
> > +    AVBSwapDSPContext h;
> >
> > -    ff_bswapdsp_init(&h);
> > +    av_bswapdsp_init(&h);
> >
> > -    if (check_func(h.bswap_buf, "bswap_buf"))
> > +    if (check_func(h.bswap32_buf, "bswap32_buf"))
> >          check_bswap(uint32_t);
> >
> >      if (check_func(h.bswap16_buf, "bswap16_buf"))
> > diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
> > index e96d84a7da..32657b6c2d 100644
> > --- a/tests/checkasm/checkasm.c
> > +++ b/tests/checkasm/checkasm.c
> > @@ -87,9 +87,6 @@ static const struct {
> >      #if CONFIG_BLOCKDSP
> >          { "blockdsp", checkasm_check_blockdsp },
> >      #endif
> > -    #if CONFIG_BSWAPDSP
> > -        { "bswapdsp", checkasm_check_bswapdsp },
> > -    #endif
> >      #if CONFIG_DCA_DECODER
> >          { "synth_filter", checkasm_check_synth_filter },
> >      #endif
> > @@ -207,6 +204,7 @@ static const struct {
> >      { "sw_scale", checkasm_check_sw_scale },
> >  #endif
> >  #if CONFIG_AVUTIL
> > +        { "bswapdsp", checkasm_check_bswapdsp },
> >          { "fixed_dsp", checkasm_check_fixed_dsp },
> >          { "float_dsp", checkasm_check_float_dsp },
> >          { "av_tx",     checkasm_check_av_tx },
>
> 1. Renaming bswap_buf->bswap32_buf should be done in a separate
> (preceding) commit. The same goes for removing the unnecessary cextern
> declaration.
>

good idea, will do that.


> 2. If this is supposed to be public, it needs better documentation (or
> actually, documentation at all): E.g. either src and dst must coincide
> or they must point to disjoint buffers of the appropriate length.
> 3. a) Making this public will impair our ability to change anything
> about it (i.e. we could not add a 64bit variant or use size_t for the
> amount of elements to process or switch the len parameter to bytes or
> whatever).
> b) To mitigate a), we could make sizeof(AVBSwapDSPContext) private and
> change the init function to allocate it. Yet this would add error checks
> when initializing, would necessitate freeing said context lateron and
> would add an unnecessary indirection at runtime. This is only a
> mitigation, as we would be force to keep the int functions around in
> case we wanted to switch to size_t.
> (c) An alternative way to mitigate this is to use a function like
> void (*av_bswapdsp_init(enum AVBSwapType type))(void *dst, const void
> *src, int len). This works because most users (except rawvideo and
> swscale, it seems) actually want only one type of swap function. This
> would avoid the allocs and frees.)
> 4. Because of 3. I am in favour of duplicating this into swscale instead
> of making it public.
>

I was going to move it to avutil but keep it private (not install the
header) and add the avpriv prefix, is that okay?


> 5. Btw: We use this API on data coming from packets and the data of
> packets has no alignment requirements. It means that there is UB in case
> the packets' data is not suitably aligned (the UB already happens in the
> uint8_t*->uint(32|16)_t* conversion; in case the C version is used, it
> also happens in bswap_buf() or bswap16_buf()). The former can be fixed
> by making src const void*, the latter by reading via AV_RN(32|16) in the
> C versions.
> This would of course also necessitate documentation if this were done
> and still made public.
>

yikes, guess it's always been like that. I'll try fixing that too.  Looks
like the x86 asm is handling the unaligned case.
I have been testing riscv via qemu, but I am not familiar with riscv asm,
so I'm not sure if it is handling alignment correctly.


>
> - Andreas
>
> _______________________________________________
> 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".
>
Andreas Rheinhardt Dec. 7, 2022, 6:59 a.m. UTC | #6
Mark Reid:
> On Tue, Dec 6, 2022 at 8:11 PM Andreas Rheinhardt <
> andreas.rheinhardt@outlook.com> wrote:
> 
>> mindmark@gmail.com:
>>> From: Mark Reid <mindmark@gmail.com>
>>>
>>> Also renamed bswap_buf to bswap32_buf
>>> ---
>>>  configure                                     | 56 ++++++++-----------
>>>  libavcodec/4xm.c                              | 14 ++---
>>>  libavcodec/Makefile                           |  1 -
>>>  libavcodec/ac3dec.c                           |  4 +-
>>>  libavcodec/ac3dec.h                           |  4 +-
>>>  libavcodec/alsdec.c                           | 12 ++--
>>>  libavcodec/apedec.c                           | 10 ++--
>>>  libavcodec/asv.c                              |  4 +-
>>>  libavcodec/asv.h                              |  4 +-
>>>  libavcodec/asvdec.c                           |  4 +-
>>>  libavcodec/asvenc.c                           |  4 +-
>>>  libavcodec/cllc.c                             |  6 +-
>>>  libavcodec/eamad.c                            |  6 +-
>>>  libavcodec/eatqi.c                            | 10 ++--
>>>  libavcodec/exr.c                              |  6 +-
>>>  libavcodec/flacenc.c                          |  6 +-
>>>  libavcodec/fraps.c                            | 10 ++--
>>>  libavcodec/hevcdec.c                          |  4 +-
>>>  libavcodec/hevcdec.h                          |  4 +-
>>>  libavcodec/huffyuvdec.c                       | 14 ++---
>>>  libavcodec/huffyuvenc.c                       |  8 +--
>>>  libavcodec/imc.c                              |  6 +-
>>>  libavcodec/imm4.c                             | 12 ++--
>>>  libavcodec/mdec.c                             |  6 +-
>>>  libavcodec/mimic.c                            | 12 ++--
>>>  libavcodec/mobiclip.c                         |  6 +-
>>>  libavcodec/motionpixels.c                     | 10 ++--
>>>  libavcodec/mpc.h                              |  4 +-
>>>  libavcodec/mpc7.c                             |  8 +--
>>>  libavcodec/rawdec.c                           |  8 +--
>>>  libavcodec/riscv/Makefile                     |  3 -
>>>  libavcodec/shorten.c                          |  7 ++-
>>>  libavcodec/truemotion2.c                      | 11 ++--
>>>  libavcodec/truespeech.c                       |  8 +--
>>>  libavcodec/utvideo.h                          |  4 +-
>>>  libavcodec/utvideodec.c                       | 16 +++---
>>>  libavcodec/utvideoenc.c                       | 10 ++--
>>>  libavcodec/x86/Makefile                       |  2 -
>>>  libavcodec/ylc.c                              | 18 +++---
>>>  libavutil/Makefile                            |  2 +
>>>  {libavcodec => libavutil}/bswapdsp.c          | 17 +++---
>>>  {libavcodec => libavutil}/bswapdsp.h          | 16 +++---
>>>  libavutil/riscv/Makefile                      |  7 ++-
>>>  .../riscv/bswapdsp_init.c                     |  9 +--
>>>  .../riscv/bswapdsp_rvb.S                      |  0
>>>  .../riscv/bswapdsp_rvv.S                      |  0
>>>  libavutil/version.h                           |  2 +-
>>>  libavutil/x86/Makefile                        |  8 ++-
>>>  {libavcodec => libavutil}/x86/bswapdsp.asm    |  4 +-
>>>  {libavcodec => libavutil}/x86/bswapdsp_init.c | 17 +++---
>>>  tests/checkasm/Makefile                       |  2 +-
>>>  tests/checkasm/bswapdsp.c                     |  8 +--
>>>  tests/checkasm/checkasm.c                     |  4 +-
>>>  53 files changed, 216 insertions(+), 222 deletions(-)
>>>  rename {libavcodec => libavutil}/bswapdsp.c (80%)
>>>  rename {libavcodec => libavutil}/bswapdsp.h (71%)
>>>  rename {libavcodec => libavutil}/riscv/bswapdsp_init.c (85%)
>>>  rename {libavcodec => libavutil}/riscv/bswapdsp_rvb.S (100%)
>>>  rename {libavcodec => libavutil}/riscv/bswapdsp_rvv.S (100%)
>>>  rename {libavcodec => libavutil}/x86/bswapdsp.asm (97%)
>>>  rename {libavcodec => libavutil}/x86/bswapdsp_init.c (80%)
>>>
>>> diff --git a/configure b/configure
>>> index f4eedfc207..03b502ea37 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -2421,7 +2421,6 @@ CONFIG_EXTRA="
>>>      audio_frame_queue
>>>      audiodsp
>>>      blockdsp
>>> -    bswapdsp
>>>      cabac
>>>      cbs
>>>      cbs_av1
>>> @@ -2749,8 +2748,8 @@ aac_decoder_select="adts_header mpeg4audio sinewin"
>>>  aac_fixed_decoder_select="adts_header mpeg4audio"
>>>  aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
>>>  aac_latm_decoder_select="aac_decoder aac_latm_parser"
>>> -ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert"
>>> -ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp"
>>> +ac3_decoder_select="ac3_parser ac3dsp fmtconvert"
>>> +ac3_fixed_decoder_select="ac3_parser ac3dsp"
>>>  ac3_encoder_select="ac3dsp audiodsp me_cmp"
>>>  ac3_fixed_encoder_select="ac3dsp audiodsp me_cmp"
>>>  acelp_kelvin_decoder_select="audiodsp"
>>> @@ -2759,20 +2758,20 @@ adpcm_g722_encoder_select="g722dsp"
>>>  agm_decoder_select="idctdsp"
>>>  aic_decoder_select="golomb idctdsp"
>>>  alac_encoder_select="lpc"
>>> -als_decoder_select="bswapdsp mpeg4audio"
>>> +als_decoder_select="mpeg4audio"
>>>  amrnb_decoder_select="lsp"
>>>  amrwb_decoder_select="lsp"
>>>  amv_decoder_select="sp5x_decoder exif"
>>>  amv_encoder_select="jpegtables mpegvideoenc"
>>> -ape_decoder_select="bswapdsp llauddsp"
>>> +ape_decoder_select="llauddsp"
>>>  apng_decoder_select="inflate_wrapper"
>>>  apng_encoder_select="deflate_wrapper llvidencdsp"
>>>  aptx_encoder_select="audio_frame_queue"
>>>  aptx_hd_encoder_select="audio_frame_queue"
>>> -asv1_decoder_select="blockdsp bswapdsp idctdsp"
>>> -asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
>>> -asv2_decoder_select="blockdsp bswapdsp idctdsp"
>>> -asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
>>> +asv1_decoder_select="idctdsp"
>>> +asv1_encoder_select="aandcttables fdctdsp pixblockdsp"
>>> +asv2_decoder_select="idctdsp"
>>> +asv2_encoder_select="aandcttables fdctdsp pixblockdsp"
>>>  atrac1_decoder_select="sinewin"
>>>  av1_decoder_select="av1_frame_split_bsf cbs_av1"
>>>  bink_decoder_select="blockdsp hpeldsp"
>>> @@ -2780,7 +2779,6 @@ binkaudio_dct_decoder_select="wma_freqs"
>>>  binkaudio_rdft_decoder_select="wma_freqs"
>>>  cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp
>> videodsp"
>>>  clearvideo_decoder_select="idctdsp"
>>> -cllc_decoder_select="bswapdsp"
>>>  comfortnoise_encoder_select="lpc"
>>>  cook_decoder_select="audiodsp sinewin"
>>>  cri_decoder_select="mjpeg_decoder"
>>> @@ -2795,9 +2793,9 @@ dxa_decoder_deps="zlib"
>>>  dxv_decoder_select="lzf texturedsp"
>>>  eac3_decoder_select="ac3_decoder"
>>>  eac3_encoder_select="ac3_encoder"
>>> -eamad_decoder_select="aandcttables blockdsp bswapdsp"
>>> +eamad_decoder_select="aandcttables blockdsp"
>>>  eatgq_decoder_select="aandcttables"
>>> -eatqi_decoder_select="aandcttables blockdsp bswapdsp"
>>> +eatqi_decoder_select="aandcttables blockdsp"
>>>  exr_decoder_deps="zlib"
>>>  exr_encoder_deps="zlib"
>>>  ffv1_decoder_select="rangecoder"
>>> @@ -2805,15 +2803,15 @@ ffv1_encoder_select="rangecoder"
>>>  ffvhuff_decoder_select="huffyuv_decoder"
>>>  ffvhuff_encoder_select="huffyuv_encoder"
>>>  fic_decoder_select="golomb"
>>> -flac_encoder_select="bswapdsp lpc"
>>> +flac_encoder_select="lpc"
>>>  flashsv2_decoder_select="inflate_wrapper"
>>>  flashsv2_encoder_select="deflate_wrapper"
>>>  flashsv_decoder_select="inflate_wrapper"
>>>  flashsv_encoder_deps="zlib"
>>>  flv_decoder_select="h263_decoder"
>>>  flv_encoder_select="h263_encoder"
>>> -fourxm_decoder_select="blockdsp bswapdsp"
>>> -fraps_decoder_select="bswapdsp huffman"
>>> +fourxm_decoder_select="blockdsp"
>>> +fraps_decoder_select="huffman"
>>>  g2m_decoder_deps="zlib"
>>>  g2m_decoder_select="blockdsp idctdsp jpegtables"
>>>  g729_decoder_select="audiodsp"
>>> @@ -2829,13 +2827,13 @@ h264_decoder_suggest="error_resilience"
>>>  hap_decoder_select="snappy texturedsp"
>>>  hap_encoder_deps="libsnappy"
>>>  hap_encoder_select="texturedspenc"
>>> -hevc_decoder_select="bswapdsp cabac dovi_rpu golomb hevcparse hevc_sei
>> videodsp"
>>> -huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
>>> -huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
>>> +hevc_decoder_select="cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
>>> +huffyuv_decoder_select="huffyuvdsp llviddsp"
>>> +huffyuv_encoder_select="huffman huffyuvencdsp llvidencdsp"
>>>  hymt_decoder_select="huffyuv_decoder"
>>>  iac_decoder_select="imc_decoder"
>>> -imc_decoder_select="bswapdsp sinewin"
>>> -imm4_decoder_select="bswapdsp idctdsp"
>>> +imc_decoder_select="sinewin"
>>> +imm4_decoder_select="idctdsp"
>>>  imm5_decoder_select="h264_decoder hevc_decoder"
>>>  indeo3_decoder_select="hpeldsp"
>>>  indeo4_decoder_select="ividsp"
>>> @@ -2849,16 +2847,15 @@ ljpeg_encoder_select="jpegtables"
>>>  lscr_decoder_select="inflate_wrapper"
>>>  magicyuv_decoder_select="llviddsp"
>>>  magicyuv_encoder_select="llvidencdsp"
>>> -mdec_decoder_select="blockdsp bswapdsp idctdsp"
>>> +mdec_decoder_select="blockdsp idctdsp"
>>>  metasound_decoder_select="lsp sinewin"
>>> -mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
>>> +mimic_decoder_select="blockdsp hpeldsp idctdsp"
>>>  mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
>>>  mjpeg_encoder_select="jpegtables mpegvideoenc"
>>>  mjpegb_decoder_select="mjpeg_decoder"
>>>  mlp_decoder_select="mlp_parser"
>>>  mlp_encoder_select="lpc audio_frame_queue"
>>> -mobiclip_decoder_select="bswapdsp golomb"
>>> -motionpixels_decoder_select="bswapdsp"
>>> +mobiclip_decoder_select="golomb"
>>>  mp1_decoder_select="mpegaudio"
>>>  mp1float_decoder_select="mpegaudio"
>>>  mp2_decoder_select="mpegaudio"
>>> @@ -2869,7 +2866,7 @@ mp3adufloat_decoder_select="mpegaudio"
>>>  mp3float_decoder_select="mpegaudio"
>>>  mp3on4_decoder_select="mpegaudio mpeg4audio"
>>>  mp3on4float_decoder_select="mpegaudio mpeg4audio"
>>> -mpc7_decoder_select="bswapdsp mpegaudiodsp"
>>> +mpc7_decoder_select="mpegaudiodsp"
>>>  mpc8_decoder_select="mpegaudiodsp"
>>>  mpegvideo_decoder_select="mpegvideodec"
>>>  mpeg1video_decoder_select="mpegvideodec"
>>> @@ -2909,7 +2906,6 @@ ra_144_decoder_select="audiodsp"
>>>  ra_144_encoder_select="audio_frame_queue lpc audiodsp"
>>>  ralf_decoder_select="golomb"
>>>  rasc_decoder_select="inflate_wrapper"
>>> -rawvideo_decoder_select="bswapdsp"
>>>  rscc_decoder_deps="zlib"
>>>  rv10_decoder_select="h263_decoder"
>>>  rv10_encoder_select="h263_encoder"
>>> @@ -2918,7 +2914,6 @@ rv20_encoder_select="h263_encoder"
>>>  rv30_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
>>>  rv40_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
>>>  screenpresso_decoder_deps="zlib"
>>> -shorten_decoder_select="bswapdsp"
>>>  sipr_decoder_select="lsp"
>>>  smvjpeg_decoder_select="mjpeg_decoder"
>>>  snow_decoder_select="dwt h264qpel hpeldsp rangecoder videodsp"
>>> @@ -2944,13 +2939,11 @@ tiff_decoder_suggest="zlib lzma"
>>>  tiff_encoder_suggest="zlib"
>>>  truehd_decoder_select="mlp_parser"
>>>  truehd_encoder_select="lpc audio_frame_queue"
>>> -truemotion2_decoder_select="bswapdsp"
>>> -truespeech_decoder_select="bswapdsp"
>>>  tscc_decoder_select="inflate_wrapper"
>>>  twinvq_decoder_select="lsp sinewin"
>>>  txd_decoder_select="texturedsp"
>>> -utvideo_decoder_select="bswapdsp llviddsp"
>>> -utvideo_encoder_select="bswapdsp huffman llvidencdsp"
>>> +utvideo_decoder_select="llviddsp"
>>> +utvideo_encoder_select="huffman llvidencdsp"
>>>  vble_decoder_select="llviddsp"
>>>  vbn_decoder_select="texturedsp"
>>>  vbn_encoder_select="texturedspenc"
>>> @@ -2983,7 +2976,6 @@ wmv3_decoder_select="vc1_decoder"
>>>  wmv3image_decoder_select="wmv3_decoder"
>>>  xma1_decoder_select="wmapro_decoder"
>>>  xma2_decoder_select="wmapro_decoder"
>>> -ylc_decoder_select="bswapdsp"
>>>  zerocodec_decoder_select="inflate_wrapper"
>>>  zlib_decoder_select="inflate_wrapper"
>>>  zlib_encoder_select="deflate_wrapper"
>>> diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c
>>> index 5636fdef2d..b99f8be172 100644
>>> --- a/libavcodec/4xm.c
>>> +++ b/libavcodec/4xm.c
>>> @@ -27,6 +27,7 @@
>>>  #include <inttypes.h>
>>>
>>>  #include "libavutil/avassert.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/frame.h"
>>>  #include "libavutil/imgutils.h"
>>>  #include "libavutil/intreadwrite.h"
>>> @@ -34,7 +35,6 @@
>>>  #include "libavutil/thread.h"
>>>  #include "avcodec.h"
>>>  #include "blockdsp.h"
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>> @@ -138,7 +138,7 @@ typedef struct CFrameBuffer {
>>>  typedef struct FourXContext {
>>>      AVCodecContext *avctx;
>>>      BlockDSPContext bdsp;
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>      uint16_t *frame_buffer;
>>>      uint16_t *last_frame_buffer;
>>>      GetBitContext pre_gb;          ///< ac/dc prefix
>>> @@ -469,8 +469,8 @@ static int decode_p_frame(FourXContext *f, const
>> uint8_t *buf, int length)
>>>                            bitstream_size);
>>>      if (!f->bitstream_buffer)
>>>          return AVERROR(ENOMEM);
>>> -    f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) (buf +
>> extra),
>>> -                       bitstream_size / 4);
>>> +    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *) (buf +
>> extra),
>>> +                         bitstream_size / 4);
>>>      init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size);
>>>
>>>      wordstream_offset = extra + bitstream_size;
>>> @@ -813,8 +813,8 @@ 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,
>>> -                       prestream_size / 4);
>>> +    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *)
>> prestream,
>>> +                         prestream_size / 4);
>>>      init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);
>>>
>>>      f->last_dc = 0 * 128 * 8 * 8;
>>> @@ -1013,7 +1013,7 @@ static av_cold int decode_init(AVCodecContext
>> *avctx)
>>>
>>>      f->version = AV_RL32(avctx->extradata) >> 16;
>>>      ff_blockdsp_init(&f->bdsp);
>>> -    ff_bswapdsp_init(&f->bbdsp);
>>> +    av_bswapdsp_init(&f->bbdsp);
>>>      f->avctx = avctx;
>>>
>>>      if (f->version > 2)
>>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>>> index 98841ed07c..6b9b7a48dd 100644
>>> --- a/libavcodec/Makefile
>>> +++ b/libavcodec/Makefile
>>> @@ -70,7 +70,6 @@ OBJS-$(CONFIG_AUDIO_FRAME_QUEUE)       +=
>> audio_frame_queue.o
>>>  OBJS-$(CONFIG_ATSC_A53)                += atsc_a53.o
>>>  OBJS-$(CONFIG_AUDIODSP)                += audiodsp.o
>>>  OBJS-$(CONFIG_BLOCKDSP)                += blockdsp.o
>>> -OBJS-$(CONFIG_BSWAPDSP)                += bswapdsp.o
>>>  OBJS-$(CONFIG_CABAC)                   += cabac.o
>>>  OBJS-$(CONFIG_CBS)                     += cbs.o cbs_bsf.o
>>>  OBJS-$(CONFIG_CBS_AV1)                 += cbs_av1.o
>>> diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
>>> index 1f2949dcfd..218f4e96d2 100644
>>> --- a/libavcodec/ac3dec.c
>>> +++ b/libavcodec/ac3dec.c
>>> @@ -31,13 +31,13 @@
>>>  #include <math.h>
>>>  #include <string.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/channel_layout.h"
>>>  #include "libavutil/crc.h"
>>>  #include "libavutil/downmix_info.h"
>>>  #include "libavutil/intmath.h"
>>>  #include "libavutil/opt.h"
>>>  #include "libavutil/thread.h"
>>> -#include "bswapdsp.h"
>>>  #include "aac_ac3_parser.h"
>>>  #include "ac3_parser_internal.h"
>>>  #include "ac3dec.h"
>>> @@ -229,7 +229,7 @@ static av_cold int ac3_decode_init(AVCodecContext
>> *avctx)
>>>          return ret;
>>>
>>>      AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>
>>>  #if (USE_FIXED)
>>>      s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags &
>> AV_CODEC_FLAG_BITEXACT);
>>> diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
>>> index 138b462abb..8cd6d83e9a 100644
>>> --- a/libavcodec/ac3dec.h
>>> +++ b/libavcodec/ac3dec.h
>>> @@ -51,6 +51,7 @@
>>>  #define AVCODEC_AC3DEC_H
>>>
>>>  #include "libavutil/tx.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/float_dsp.h"
>>>  #include "libavutil/fixed_dsp.h"
>>>  #include "libavutil/lfg.h"
>>> @@ -59,7 +60,6 @@
>>>  #include "ac3.h"
>>>  #include "ac3dsp.h"
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "get_bits.h"
>>>  #include "fmtconvert.h"
>>>
>>> @@ -228,7 +228,7 @@ typedef struct AC3DecodeContext {
>>>  ///@}
>>>
>>>  ///@name Optimization
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>  #if USE_FIXED
>>>      AVFixedDSPContext *fdsp;
>>>  #else
>>> diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
>>> index 4605b2248f..af41eda49f 100644
>>> --- a/libavcodec/alsdec.c
>>> +++ b/libavcodec/alsdec.c
>>> @@ -32,12 +32,12 @@
>>>  #include "unary.h"
>>>  #include "mpeg4audio.h"
>>>  #include "bgmc.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "internal.h"
>>>  #include "mlz.h"
>>>  #include "libavutil/samplefmt.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/crc.h"
>>>  #include "libavutil/softfloat_ieee754.h"
>>>  #include "libavutil/intfloat.h"
>>> @@ -197,7 +197,7 @@ typedef struct ALSDecContext {
>>>      AVCodecContext *avctx;
>>>      ALSSpecificConfig sconf;
>>>      GetBitContext gb;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      const AVCRC *crc_table;
>>>      uint32_t crc_org;               ///< CRC value of the original
>> input data
>>>      uint32_t crc;                   ///< CRC value calculated from
>> decoded data
>>> @@ -1899,9 +1899,9 @@ static int decode_frame(AVCodecContext *avctx,
>> AVFrame *frame,
>>>                           sample++)
>>>                          *dest++ = av_bswap16(src[sample]);
>>>                  } else {
>>> -                    ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
>>> -                                        (uint32_t *) frame->data[0],
>>> -                                        ctx->cur_frame_length *
>> channels);
>>> +                    ctx->bdsp.bswap32_buf((uint32_t *) ctx->crc_buffer,
>>> +                                          (uint32_t *) frame->data[0],
>>> +                                          ctx->cur_frame_length *
>> channels);
>>>                  }
>>>                  crc_source = ctx->crc_buffer;
>>>              } else {
>>> @@ -2164,7 +2164,7 @@ static av_cold int decode_init(AVCodecContext
>> *avctx)
>>>          }
>>>      }
>>>
>>> -    ff_bswapdsp_init(&ctx->bdsp);
>>> +    av_bswapdsp_init(&ctx->bdsp);
>>>
>>>      return 0;
>>>  }
>>> diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
>>> index c08d13d6c2..7b9fa74416 100644
>>> --- a/libavcodec/apedec.c
>>> +++ b/libavcodec/apedec.c
>>> @@ -23,12 +23,12 @@
>>>  #include <inttypes.h>
>>>
>>>  #include "libavutil/avassert.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/channel_layout.h"
>>>  #include "libavutil/crc.h"
>>>  #include "libavutil/opt.h"
>>>  #include "lossless_audiodsp.h"
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>> @@ -153,7 +153,7 @@ typedef struct APEPredictor64 {
>>>  typedef struct APEContext {
>>>      AVClass *class;                          ///< class for AVOptions
>>>      AVCodecContext *avctx;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      LLAudDSPContext adsp;
>>>      int channels;
>>>      int samples;                             ///< samples left to
>> decode in current frame
>>> @@ -313,7 +313,7 @@ static av_cold int ape_decode_init(AVCodecContext
>> *avctx)
>>>          s->predictor_decode_stereo = predictor_decode_stereo_3950;
>>>      }
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>      ff_llauddsp_init(&s->adsp);
>>>      av_channel_layout_uninit(&avctx->ch_layout);
>>>      avctx->ch_layout = (channels == 2) ?
>> (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO
>>> @@ -1499,8 +1499,8 @@ 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,
>>> -                          buf_size >> 2);
>>> +        s->bdsp.bswap32_buf((uint32_t *) s->data, (const uint32_t *)
>> buf,
>>> +                            buf_size >> 2);
>>>          memset(s->data + (buf_size & ~3), 0, buf_size & 3);
>>>          s->ptr = s->data;
>>>          s->data_end = s->data + buf_size;
>>> diff --git a/libavcodec/asv.c b/libavcodec/asv.c
>>> index 3aa08c30c0..bfe669d25e 100644
>>> --- a/libavcodec/asv.c
>>> +++ b/libavcodec/asv.c
>>> @@ -26,10 +26,10 @@
>>>  #include <stdint.h>
>>>
>>>  #include "libavutil/attributes.h"
>>> +#include "libavutil/bswapdsp.h"
>>>
>>>  #include "asv.h"
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>
>>>  const uint8_t ff_asv_scantab[64] = {
>>>      0x00, 0x08, 0x01, 0x09, 0x10, 0x18, 0x11, 0x19,
>>> @@ -92,7 +92,7 @@ av_cold void ff_asv_common_init(AVCodecContext *avctx)
>>>  {
>>>      ASVCommonContext *const a = avctx->priv_data;
>>>
>>> -    ff_bswapdsp_init(&a->bbdsp);
>>> +    av_bswapdsp_init(&a->bbdsp);
>>>
>>>      a->mb_width   = (avctx->width  + 15) / 16;
>>>      a->mb_height  = (avctx->height + 15) / 16;
>>> diff --git a/libavcodec/asv.h b/libavcodec/asv.h
>>> index 7c0983a497..f7e00d8ef2 100644
>>> --- a/libavcodec/asv.h
>>> +++ b/libavcodec/asv.h
>>> @@ -29,11 +29,11 @@
>>>  #include <stdint.h>
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>> +#include "libavutil/bswapdsp.h"
>>>
>>>  typedef struct ASVCommonContext {
>>>      AVCodecContext *avctx;
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>      int mb_width;
>>>      int mb_height;
>>>      int mb_width2;
>>> diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c
>>> index 699aab9f8f..25dab7473f 100644
>>> --- a/libavcodec/asvdec.c
>>> +++ b/libavcodec/asvdec.c
>>> @@ -253,8 +253,8 @@ static int decode_frame(AVCodecContext *avctx,
>> AVFrame *p,
>>>          if (!a->bitstream_buffer)
>>>              return AVERROR(ENOMEM);
>>>
>>> -        c->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer,
>>> -                           (const uint32_t *) buf, buf_size / 4);
>>> +        c->bbdsp.bswap32_buf((uint32_t *) a->bitstream_buffer,
>>> +                             (const uint32_t *) 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..2bf67d686c 100644
>>> --- a/libavcodec/asvenc.c
>>> +++ b/libavcodec/asvenc.c
>>> @@ -309,8 +309,8 @@ static int encode_frame(AVCodecContext *avctx,
>> AVPacket *pkt,
>>>      size = (put_bytes_output(&a->pb) + 3) / 4;
>>>
>>>      if (avctx->codec_id == AV_CODEC_ID_ASV1) {
>>> -        c->bbdsp.bswap_buf((uint32_t *) pkt->data,
>>> -                           (uint32_t *) pkt->data, size);
>>> +        c->bbdsp.bswap32_buf((uint32_t *) pkt->data,
>>> +                             (uint32_t *) pkt->data, size);
>>>      }
>>>
>>>      pkt->size   = size * 4;
>>> diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
>>> index 911717b68d..dede8591c5 100644
>>> --- a/libavcodec/cllc.c
>>> +++ b/libavcodec/cllc.c
>>> @@ -22,8 +22,8 @@
>>>
>>>  #include <inttypes.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/intreadwrite.h"
>>> -#include "bswapdsp.h"
>>>  #include "canopus.h"
>>>  #include "get_bits.h"
>>>  #include "avcodec.h"
>>> @@ -36,7 +36,7 @@
>>>
>>>  typedef struct CLLCContext {
>>>      AVCodecContext *avctx;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>
>>>      uint8_t *swapped_buf;
>>>      int      swapped_buf_size;
>>> @@ -486,7 +486,7 @@ static av_cold int cllc_decode_init(AVCodecContext
>> *avctx)
>>>      ctx->swapped_buf      = NULL;
>>>      ctx->swapped_buf_size = 0;
>>>
>>> -    ff_bswapdsp_init(&ctx->bdsp);
>>> +    av_bswapdsp_init(&ctx->bdsp);
>>>
>>>      return 0;
>>>  }
>>> diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
>>> index 45012c62b8..0ffcd14105 100644
>>> --- a/libavcodec/eamad.c
>>> +++ b/libavcodec/eamad.c
>>> @@ -28,12 +28,12 @@
>>>   * http://wiki.multimedia.cx/index.php?title=Electronic_Arts_MAD
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/mem_internal.h"
>>>
>>>  #include "avcodec.h"
>>>  #include "blockdsp.h"
>>>  #include "bytestream.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>> @@ -50,7 +50,7 @@
>>>  typedef struct MadContext {
>>>      AVCodecContext *avctx;
>>>      BlockDSPContext bdsp;
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>      AVFrame *last_frame;
>>>      GetBitContext gb;
>>>      void *bitstream_buf;
>>> @@ -67,7 +67,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      s->avctx = avctx;
>>>      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>>>      ff_blockdsp_init(&s->bdsp);
>>> -    ff_bswapdsp_init(&s->bbdsp);
>>> +    av_bswapdsp_init(&s->bbdsp);
>>>      ff_mpeg12_init_vlcs();
>>>
>>>      s->last_frame = av_frame_alloc();
>>> diff --git a/libavcodec/eatqi.c b/libavcodec/eatqi.c
>>> index e4f12b3db2..b1475b16c4 100644
>>> --- a/libavcodec/eatqi.c
>>> +++ b/libavcodec/eatqi.c
>>> @@ -26,11 +26,11 @@
>>>   * @see http://wiki.multimedia.cx/index.php?title=Electronic_Arts_TQI
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/mem_internal.h"
>>>
>>>  #include "avcodec.h"
>>>  #include "blockdsp.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>> @@ -43,7 +43,7 @@ typedef struct TqiContext {
>>>      AVCodecContext *avctx;
>>>      GetBitContext gb;
>>>      BlockDSPContext bdsp;
>>> -    BswapDSPContext bsdsp;
>>> +    AVBSwapDSPContext bsdsp;
>>>
>>>      void *bitstream_buf;
>>>      unsigned int bitstream_buf_size;
>>> @@ -60,7 +60,7 @@ static av_cold int tqi_decode_init(AVCodecContext
>> *avctx)
>>>      TqiContext *t = avctx->priv_data;
>>>
>>>      ff_blockdsp_init(&t->bdsp);
>>> -    ff_bswapdsp_init(&t->bsdsp);
>>> +    av_bswapdsp_init(&t->bsdsp);
>>>
>>>      avctx->framerate = (AVRational){ 15, 1 };
>>>      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>>> @@ -148,8 +148,8 @@ 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.bswap32_buf(t->bitstream_buf, (const uint32_t *) 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/exr.c b/libavcodec/exr.c
>>> index 6a0af96ce4..e22045a1a9 100644
>>> --- a/libavcodec/exr.c
>>> +++ b/libavcodec/exr.c
>>> @@ -47,7 +47,7 @@
>>>  #include "bytestream.h"
>>>
>>>  #if HAVE_BIGENDIAN
>>> -#include "bswapdsp.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #endif
>>>
>>>  #include "codec_internal.h"
>>> @@ -150,7 +150,7 @@ typedef struct EXRContext {
>>>      ExrDSPContext dsp;
>>>
>>>  #if HAVE_BIGENDIAN
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>  #endif
>>>
>>>      enum ExrCompr compression;
>>> @@ -2224,7 +2224,7 @@ static av_cold int decode_init(AVCodecContext
>> *avctx)
>>>      ff_exrdsp_init(&s->dsp);
>>>
>>>  #if HAVE_BIGENDIAN
>>> -    ff_bswapdsp_init(&s->bbdsp);
>>> +    av_bswapdsp_init(&s->bbdsp);
>>>  #endif
>>>
>>>      trc_func = avpriv_get_trc_function_from_trc(s->apply_trc_type);
>>> diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
>>> index bca71b3780..1082910974 100644
>>> --- a/libavcodec/flacenc.c
>>> +++ b/libavcodec/flacenc.c
>>> @@ -20,6 +20,7 @@
>>>   */
>>>
>>>  #include "libavutil/avassert.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/channel_layout.h"
>>>  #include "libavutil/crc.h"
>>>  #include "libavutil/intmath.h"
>>> @@ -27,7 +28,6 @@
>>>  #include "libavutil/opt.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "encode.h"
>>>  #include "put_bits.h"
>>> @@ -123,7 +123,7 @@ typedef struct FlacEncodeContext {
>>>      struct AVMD5 *md5ctx;
>>>      uint8_t *md5_buffer;
>>>      unsigned int md5_buffer_size;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      FLACEncDSPContext flac_dsp;
>>>
>>>      int flushed;
>>> @@ -454,7 +454,7 @@ static av_cold int flac_encode_init(AVCodecContext
>> *avctx)
>>>      ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
>>>                        s->options.max_prediction_order,
>> FF_LPC_TYPE_LEVINSON);
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>      ff_flacencdsp_init(&s->flac_dsp);
>>>
>>>      dprint_compression_options(s);
>>> diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
>>> index 4c4c46b602..33e24a5bfb 100644
>>> --- a/libavcodec/fraps.c
>>> +++ b/libavcodec/fraps.c
>>> @@ -35,11 +35,11 @@
>>>
>>>  #define CACHED_BITSTREAM_READER HAVE_FAST_64BIT
>>>  #define UNCHECKED_BITSTREAM_READER 1
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "avcodec.h"
>>>  #include "get_bits.h"
>>>  #include "huffman.h"
>>>  #include "bytestream.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "thread.h"
>>>
>>> @@ -51,7 +51,7 @@
>>>   */
>>>  typedef struct FrapsContext {
>>>      AVCodecContext *avctx;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      uint8_t *tmpbuf;
>>>      int tmpbuf_size;
>>>  } FrapsContext;
>>> @@ -69,7 +69,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      s->avctx  = avctx;
>>>      s->tmpbuf = NULL;
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>
>>>      return 0;
>>>  }
>>> @@ -106,8 +106,8 @@ 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.bswap32_buf((uint32_t *) s->tmpbuf,
>>> +                        (const uint32_t *) 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..e9cef539b2 100644
>>> --- a/libavcodec/hevcdec.c
>>> +++ b/libavcodec/hevcdec.c
>>> @@ -27,6 +27,7 @@
>>>
>>>  #include "libavutil/attributes.h"
>>>  #include "libavutil/avstring.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/common.h"
>>>  #include "libavutil/display.h"
>>>  #include "libavutil/film_grain_params.h"
>>> @@ -37,7 +38,6 @@
>>>  #include "libavutil/pixdesc.h"
>>>  #include "libavutil/timecode.h"
>>>
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "cabac_functions.h"
>>>  #include "codec_internal.h"
>>> @@ -3527,7 +3527,7 @@ static av_cold int
>> hevc_init_context(AVCodecContext *avctx)
>>>      if (!s->md5_ctx)
>>>          return AVERROR(ENOMEM);
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>
>>>      s->dovi_ctx.logctx = avctx;
>>>      s->eos = 0;
>>> diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
>>> index 9d3f4adbb3..f73ff352d1 100644
>>> --- a/libavcodec/hevcdec.h
>>> +++ b/libavcodec/hevcdec.h
>>> @@ -25,11 +25,11 @@
>>>
>>>  #include <stdatomic.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/buffer.h"
>>>  #include "libavutil/mem_internal.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "cabac.h"
>>>  #include "dovi_rpu.h"
>>>  #include "get_bits.h"
>>> @@ -541,7 +541,7 @@ typedef struct HEVCContext {
>>>      HEVCPredContext hpc;
>>>      HEVCDSPContext hevcdsp;
>>>      VideoDSPContext vdsp;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      H274FilmGrainDatabase h274db;
>>>      int8_t *qp_y_tab;
>>>      uint8_t *horizontal_bs;
>>> diff --git a/libavcodec/huffyuvdec.c b/libavcodec/huffyuvdec.c
>>> index 7d3515cc88..5d3c7a3828 100644
>>> --- a/libavcodec/huffyuvdec.c
>>> +++ b/libavcodec/huffyuvdec.c
>>> @@ -35,13 +35,13 @@
>>>  #include "config_components.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "get_bits.h"
>>>  #include "huffyuv.h"
>>>  #include "huffyuvdsp.h"
>>>  #include "lossless_videodsp.h"
>>>  #include "thread.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/imgutils.h"
>>>  #include "libavutil/pixdesc.h"
>>>
>>> @@ -76,7 +76,7 @@ typedef struct HYuvDecContext {
>>>      VLC vlc[8];                             //Y,U,V,A,YY,YU,YV,AA
>>>      uint8_t *bitstream_buffer;
>>>      unsigned int bitstream_buffer_size;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      HuffYUVDSPContext hdsp;
>>>      LLVidDSPContext llviddsp;
>>>  } HYuvDecContext;
>>> @@ -340,7 +340,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>
>>>      s->flags = avctx->flags;
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>      ff_huffyuvdsp_init(&s->hdsp, avctx->pix_fmt);
>>>      ff_llviddsp_init(&s->llviddsp);
>>>      memset(s->vlc, 0, 4 * sizeof(VLC));
>>> @@ -1239,8 +1239,8 @@ static int decode_frame(AVCodecContext *avctx,
>> AVFrame *p,
>>>      if (!s->bitstream_buffer)
>>>          return AVERROR(ENOMEM);
>>>
>>> -    s->bdsp.bswap_buf((uint32_t *) s->bitstream_buffer,
>>> -                      (const uint32_t *) buf, buf_size / 4);
>>> +    s->bdsp.bswap32_buf((uint32_t *) s->bitstream_buffer,
>>> +                        (const uint32_t *) buf, buf_size / 4);
>>>
>>>      if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0)
>>>          return ret;
>>> @@ -1282,8 +1282,8 @@ static int decode_frame(AVCodecContext *avctx,
>> AVFrame *p,
>>>                  return AVERROR_INVALIDDATA;
>>>
>>>              y_offset = height - (slice + 1) * slice_height;
>>> -            s->bdsp.bswap_buf((uint32_t *)s->bitstream_buffer,
>>> -                              (const uint32_t *)(buf + slice_offset),
>> slice_size / 4);
>>> +            s->bdsp.bswap32_buf((uint32_t *)s->bitstream_buffer,
>>> +                                (const uint32_t *)(buf + slice_offset),
>> slice_size / 4);
>>>          } else {
>>>              y_offset = 0;
>>>              slice_offset = 0;
>>> diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c
>>> index db274e37ad..6230e107a3 100644
>>> --- a/libavcodec/huffyuvenc.c
>>> +++ b/libavcodec/huffyuvenc.c
>>> @@ -31,7 +31,6 @@
>>>  #include "config_components.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "encode.h"
>>>  #include "huffyuv.h"
>>> @@ -39,6 +38,7 @@
>>>  #include "huffyuvencdsp.h"
>>>  #include "lossless_videoencdsp.h"
>>>  #include "put_bits.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/opt.h"
>>>  #include "libavutil/pixdesc.h"
>>>
>>> @@ -68,7 +68,7 @@ typedef struct HYuvEncContext {
>>>      uint64_t stats[4][MAX_VLC_N];
>>>      uint8_t len[4][MAX_VLC_N];
>>>      uint32_t bits[4][MAX_VLC_N];
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      HuffYUVEncDSPContext hencdsp;
>>>      LLVidEncDSPContext llvidencdsp;
>>>      int non_determ; // non-deterministic, multi-threaded encoder allowed
>>> @@ -247,7 +247,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
>>>      s->avctx = avctx;
>>>      s->flags = avctx->flags;
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>      ff_huffyuvencdsp_init(&s->hencdsp, avctx->pix_fmt);
>>>      ff_llvidencdsp_init(&s->llvidencdsp);
>>>
>>> @@ -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.bswap32_buf((uint32_t *) pkt->data, (uint32_t *)
>> pkt->data, size);
>>>      }
>>>
>>>      s->picture_number++;
>>> diff --git a/libavcodec/imc.c b/libavcodec/imc.c
>>> index 174332de4d..185da01323 100644
>>> --- a/libavcodec/imc.c
>>> +++ b/libavcodec/imc.c
>>> @@ -34,6 +34,7 @@
>>>  #include <math.h>
>>>  #include <stddef.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/channel_layout.h"
>>>  #include "libavutil/ffmath.h"
>>>  #include "libavutil/float_dsp.h"
>>> @@ -43,7 +44,6 @@
>>>  #include "libavutil/tx.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>> @@ -92,7 +92,7 @@ typedef struct IMCContext {
>>>      GetBitContext gb;
>>>
>>>      AVFloatDSPContext *fdsp;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      AVTXContext *mdct;
>>>      av_tx_fn mdct_fn;
>>>      float *out_samples;
>>> @@ -243,7 +243,7 @@ static av_cold int imc_decode_init(AVCodecContext
>> *avctx)
>>>      if (ret < 0)
>>>          return ret;
>>>
>>> -    ff_bswapdsp_init(&q->bdsp);
>>> +    av_bswapdsp_init(&q->bdsp);
>>>
>>>      avctx->sample_fmt     = AV_SAMPLE_FMT_FLTP;
>>>
>>> diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c
>>> index ccec5dff43..ae391b343b 100644
>>> --- a/libavcodec/imm4.c
>>> +++ b/libavcodec/imm4.c
>>> @@ -23,11 +23,11 @@
>>>  #include <stddef.h>
>>>  #include <string.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/mem_internal.h"
>>>  #include "libavutil/thread.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "copy_block.h"
>>> @@ -40,7 +40,7 @@
>>>  #define BLOCK_VLC_BITS  12
>>>
>>>  typedef struct IMM4Context {
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      GetBitContext  gb;
>>>
>>>      AVFrame *prev_frame;
>>> @@ -368,9 +368,9 @@ static int decode_frame(AVCodecContext *avctx,
>> AVFrame *frame,
>>>      if (!s->bitstream)
>>>          return AVERROR(ENOMEM);
>>>
>>> -    s->bdsp.bswap_buf((uint32_t *)s->bitstream,
>>> -                      (uint32_t *)avpkt->data,
>>> -                      (avpkt->size + 3) >> 2);
>>> +    s->bdsp.bswap32_buf((uint32_t *)s->bitstream,
>>> +                        (uint32_t *)avpkt->data,
>>> +                        (avpkt->size + 3) >> 2);
>>>
>>>      if ((ret = init_get_bits8(gb, s->bitstream, FFALIGN(avpkt->size,
>> 4))) < 0)
>>>          return ret;
>>> @@ -495,7 +495,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      static AVOnce init_static_once = AV_ONCE_INIT;
>>>      IMM4Context *s = avctx->priv_data;
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>      ff_idctdsp_init(&s->idsp, avctx);
>>>
>>>      s->prev_frame = av_frame_alloc();
>>> diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
>>> index 640b671a0f..269a3afdfe 100644
>>> --- a/libavcodec/mdec.c
>>> +++ b/libavcodec/mdec.c
>>> @@ -27,11 +27,11 @@
>>>   * This is very similar to intra-only MPEG-1.
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/mem_internal.h"
>>>
>>>  #include "avcodec.h"
>>>  #include "blockdsp.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "idctdsp.h"
>>>  #include "mpeg12data.h"
>>> @@ -41,7 +41,7 @@
>>>  typedef struct MDECContext {
>>>      AVCodecContext *avctx;
>>>      BlockDSPContext bdsp;
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>      IDCTDSPContext idsp;
>>>      GetBitContext gb;
>>>      uint8_t permutated_scantable[64];
>>> @@ -219,7 +219,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      a->avctx           = avctx;
>>>
>>>      ff_blockdsp_init(&a->bdsp);
>>> -    ff_bswapdsp_init(&a->bbdsp);
>>> +    av_bswapdsp_init(&a->bbdsp);
>>>      ff_idctdsp_init(&a->idsp, avctx);
>>>      ff_mpeg12_init_vlcs();
>>>      ff_permute_scantable(a->permutated_scantable, ff_zigzag_direct,
>>> diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
>>> index 891471b30e..333085f8f3 100644
>>> --- a/libavcodec/mimic.c
>>> +++ b/libavcodec/mimic.c
>>> @@ -21,6 +21,7 @@
>>>
>>>  #include <stdint.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/mem_internal.h"
>>>  #include "libavutil/thread.h"
>>>
>>> @@ -30,7 +31,6 @@
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>>  #include "bytestream.h"
>>> -#include "bswapdsp.h"
>>>  #include "hpeldsp.h"
>>>  #include "idctdsp.h"
>>>  #include "thread.h"
>>> @@ -58,7 +58,7 @@ typedef struct MimicContext {
>>>      GetBitContext   gb;
>>>      uint8_t         permutated_scantable[64];
>>>      BlockDSPContext bdsp;
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>      HpelDSPContext  hdsp;
>>>      IDCTDSPContext  idsp;
>>>
>>> @@ -134,7 +134,7 @@ static av_cold int mimic_decode_init(AVCodecContext
>> *avctx)
>>>      ctx->cur_index  = 15;
>>>
>>>      ff_blockdsp_init(&ctx->bdsp);
>>> -    ff_bswapdsp_init(&ctx->bbdsp);
>>> +    av_bswapdsp_init(&ctx->bbdsp);
>>>      ff_hpeldsp_init(&ctx->hdsp, avctx->flags);
>>>      ff_idctdsp_init(&ctx->idsp, avctx);
>>>      ff_permute_scantable(ctx->permutated_scantable, col_zag,
>> ctx->idsp.idct_permutation);
>>> @@ -411,9 +411,9 @@ static int mimic_decode_frame(AVCodecContext *avctx,
>> AVFrame *rframe,
>>>      if (!ctx->swap_buf)
>>>          return AVERROR(ENOMEM);
>>>
>>> -    ctx->bbdsp.bswap_buf(ctx->swap_buf,
>>> -                         (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
>>> -                         swap_buf_size >> 2);
>>> +    ctx->bbdsp.bswap32_buf(ctx->swap_buf,
>>> +                           (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
>>> +                           swap_buf_size >> 2);
>>>      init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3);
>>>
>>>      res = decode(ctx, quality, num_coeffs, !is_pframe);
>>> diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c
>>> index c3b2383dbc..79c6953ee4 100644
>>> --- a/libavcodec/mobiclip.c
>>> +++ b/libavcodec/mobiclip.c
>>> @@ -24,10 +24,10 @@
>>>  #include <inttypes.h>
>>>
>>>  #include "libavutil/avassert.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/thread.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>> @@ -271,7 +271,7 @@ typedef struct MobiClipContext {
>>>      MotionXY *motion;
>>>      int     motion_size;
>>>
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>  } MobiClipContext;
>>>
>>>  static VLC rl_vlc[2];
>>> @@ -310,7 +310,7 @@ static av_cold int mobiclip_init(AVCodecContext
>> *avctx)
>>>          return AVERROR_INVALIDDATA;
>>>      }
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>
>>>      avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>>>
>>> diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c
>>> index 4141c5a495..04a56a379c 100644
>>> --- a/libavcodec/motionpixels.c
>>> +++ b/libavcodec/motionpixels.c
>>> @@ -19,13 +19,13 @@
>>>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>> 02110-1301 USA
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/thread.h"
>>>
>>>  #include "config.h"
>>>
>>>  #include "avcodec.h"
>>>  #include "get_bits.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>
>>> @@ -41,7 +41,7 @@ typedef struct HuffCode {
>>>  typedef struct MotionPixelsContext {
>>>      AVCodecContext *avctx;
>>>      AVFrame *frame;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      uint8_t *changes_map;
>>>      int offset_bits_len;
>>>      int codes_count, current_codes_count;
>>> @@ -80,7 +80,7 @@ static av_cold int mp_decode_init(AVCodecContext
>> *avctx)
>>>      }
>>>
>>>      mp->avctx = avctx;
>>> -    ff_bswapdsp_init(&mp->bdsp);
>>> +    av_bswapdsp_init(&mp->bdsp);
>>>      mp->changes_map = av_calloc(avctx->width, h4);
>>>      mp->offset_bits_len = av_log2(avctx->width * avctx->height) + 1;
>>>      mp->vpt = av_calloc(avctx->height, sizeof(*mp->vpt));
>>> @@ -294,8 +294,8 @@ 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.bswap32_buf((uint32_t *) mp->bswapbuf, (const uint32_t *)
>> 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/mpc.h b/libavcodec/mpc.h
>>> index cef8db4899..c736a84088 100644
>>> --- a/libavcodec/mpc.h
>>> +++ b/libavcodec/mpc.h
>>> @@ -31,10 +31,10 @@
>>>
>>>  #include <stdint.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/lfg.h"
>>>  #include "libavutil/mem_internal.h"
>>>
>>> -#include "bswapdsp.h"
>>>  #include "mpegaudio.h"
>>>  #include "mpegaudiodsp.h"
>>>
>>> @@ -52,7 +52,7 @@ typedef struct Band {
>>>  }Band;
>>>
>>>  typedef struct MPCContext {
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      MPADSPContext mpadsp;
>>>      int IS, MSS, gapless;
>>>      int lastframelen;
>>> diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
>>> index d2745366c2..9b7af9a01f 100644
>>> --- a/libavcodec/mpc7.c
>>> +++ b/libavcodec/mpc7.c
>>> @@ -91,9 +91,9 @@ static av_cold int mpc7_decode_init(AVCodecContext *
>> avctx)
>>>      }
>>>      memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
>>>      av_lfg_init(&c->rnd, 0xDEADBEEF);
>>> -    ff_bswapdsp_init(&c->bdsp);
>>> +    av_bswapdsp_init(&c->bdsp);
>>>      ff_mpadsp_init(&c->mpadsp);
>>> -    c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *)
>> avctx->extradata, 4);
>>> +    c->bdsp.bswap32_buf((uint32_t *) buf, (const uint32_t *)
>> avctx->extradata, 4);
>>>      init_get_bits(&gb, buf, 128);
>>>
>>>      c->IS = get_bits1(&gb);
>>> @@ -211,8 +211,8 @@ static int mpc7_decode_frame(AVCodecContext *avctx,
>> AVFrame *frame,
>>>      av_fast_padded_malloc(&c->bits, &c->buf_size, buf_size);
>>>      if (!c->bits)
>>>          return AVERROR(ENOMEM);
>>> -    c->bdsp.bswap_buf((uint32_t *) c->bits, (const uint32_t *) buf,
>>> -                      buf_size >> 2);
>>> +    c->bdsp.bswap32_buf((uint32_t *) c->bits, (const uint32_t *) buf,
>>> +                        buf_size >> 2);
>>>      if ((ret = init_get_bits8(&gb, c->bits, buf_size)) < 0)
>>>          return ret;
>>>      skip_bits_long(&gb, skip);
>>> diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
>>> index 72cdd13916..0fc25cac04 100644
>>> --- a/libavcodec/rawdec.c
>>> +++ b/libavcodec/rawdec.c
>>> @@ -25,13 +25,13 @@
>>>   */
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>>  #include "internal.h"
>>>  #include "raw.h"
>>>  #include "libavutil/avassert.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/buffer.h"
>>>  #include "libavutil/common.h"
>>>  #include "libavutil/intreadwrite.h"
>>> @@ -52,7 +52,7 @@ typedef struct RawVideoContext {
>>>      int is_lt_16bpp; // 16bpp pixfmt and bits_per_coded_sample < 16
>>>      int tff;
>>>
>>> -    BswapDSPContext bbdsp;
>>> +    AVBSwapDSPContext bbdsp;
>>>      void *bitstream_buf;
>>>      unsigned int bitstream_buf_size;
>>>  } RawVideoContext;
>>> @@ -73,7 +73,7 @@ static av_cold int raw_init_decoder(AVCodecContext
>> *avctx)
>>>      RawVideoContext *context = avctx->priv_data;
>>>      const AVPixFmtDescriptor *desc;
>>>
>>> -    ff_bswapdsp_init(&context->bbdsp);
>>> +    av_bswapdsp_init(&context->bbdsp);
>>>
>>>      if (   avctx->codec_tag == MKTAG('r','a','w',' ')
>>>          || avctx->codec_tag == MKTAG('N','O','1','6'))
>>> @@ -324,7 +324,7 @@ static int raw_decode(AVCodecContext *avctx, AVFrame
>> *frame,
>>>              if (swap == 16)
>>>                  context->bbdsp.bswap16_buf(context->bitstream_buf,
>> (const uint16_t*)buf, buf_size / 2);
>>>              else if (swap == 32)
>>> -                context->bbdsp.bswap_buf(context->bitstream_buf, (const
>> uint32_t*)buf, buf_size / 4);
>>> +                context->bbdsp.bswap32_buf(context->bitstream_buf,
>> (const uint32_t*)buf, buf_size / 4);
>>>              else
>>>                  return AVERROR_INVALIDDATA;
>>>              buf = context->bitstream_buf;
>>> diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
>>> index 965942f4df..212ab3dc13 100644
>>> --- a/libavcodec/riscv/Makefile
>>> +++ b/libavcodec/riscv/Makefile
>>> @@ -5,9 +5,6 @@ RVV-OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_rvv.o
>>>  OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_init.o \
>>>                             riscv/audiodsp_rvf.o
>>>  RVV-OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_rvv.o
>>> -OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_init.o \
>>> -                           riscv/bswapdsp_rvb.o
>>> -RVV-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_rvv.o
>>>  OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_init.o
>>>  RVV-OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_rvv.o
>>>  OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_init.o
>>> diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
>>> index 1b2abd76b1..6385821ca1 100644
>>> --- a/libavcodec/shorten.c
>>> +++ b/libavcodec/shorten.c
>>> @@ -25,9 +25,10 @@
>>>   * @author Jeff Muizelaar
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>> +
>>>  #include <limits.h>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>> @@ -112,7 +113,7 @@ typedef struct ShortenContext {
>>>      int got_header;
>>>      int got_quit_command;
>>>      int swap;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>  } ShortenContext;
>>>
>>>  static av_cold int shorten_decode_init(AVCodecContext *avctx)
>>> @@ -120,7 +121,7 @@ static av_cold int
>> shorten_decode_init(AVCodecContext *avctx)
>>>      ShortenContext *s = avctx->priv_data;
>>>      s->avctx          = avctx;
>>>
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>
>>>      return 0;
>>>  }
>>> diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c
>>> index b168b9cda1..7b6db4d9d5 100644
>>> --- a/libavcodec/truemotion2.c
>>> +++ b/libavcodec/truemotion2.c
>>> @@ -26,8 +26,9 @@
>>>
>>>  #include <inttypes.h>
>>>
>>> +#include "libavutil/bswapdsp.h"
>>> +
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>> @@ -65,7 +66,7 @@ typedef struct TM2Context {
>>>
>>>      GetBitContext gb;
>>>      int error;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>
>>>      uint8_t *buffer;
>>>      int buffer_size;
>>> @@ -907,8 +908,8 @@ 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.bswap32_buf((uint32_t *) l->buffer, (const uint32_t *) buf,
>>> +                        buf_size >> 2);
>>>
>>>      if ((ret = tm2_read_header(l, l->buffer)) < 0) {
>>>          return ret;
>>> @@ -960,7 +961,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      if (!l->pic)
>>>          return AVERROR(ENOMEM);
>>>
>>> -    ff_bswapdsp_init(&l->bdsp);
>>> +    av_bswapdsp_init(&l->bdsp);
>>>
>>>      l->last  = av_malloc_array(w, 2 * sizeof(*l->last));
>>>      if (!l->last)
>>> diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c
>>> index 454121cc75..06a76fe0db 100644
>>> --- a/libavcodec/truespeech.c
>>> +++ b/libavcodec/truespeech.c
>>> @@ -19,11 +19,11 @@
>>>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>> 02110-1301 USA
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/channel_layout.h"
>>>  #include "libavutil/mem_internal.h"
>>>
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "decode.h"
>>>  #include "get_bits.h"
>>> @@ -38,7 +38,7 @@
>>>   * TrueSpeech decoder context
>>>   */
>>>  typedef struct TSContext {
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      /* input data */
>>>      DECLARE_ALIGNED(16, uint8_t, buffer)[32];
>>>      int16_t vector[8];  ///< input vector: 5/5/4/4/4/3/3/3
>>> @@ -73,7 +73,7 @@ static av_cold int
>> truespeech_decode_init(AVCodecContext * avctx)
>>>      avctx->ch_layout      = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO;
>>>      avctx->sample_fmt     = AV_SAMPLE_FMT_S16;
>>>
>>> -    ff_bswapdsp_init(&c->bdsp);
>>> +    av_bswapdsp_init(&c->bdsp);
>>>
>>>      return 0;
>>>  }
>>> @@ -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.bswap32_buf((uint32_t *) dec->buffer, (const uint32_t *)
>> input, 8);
>>>      init_get_bits(&gb, dec->buffer, 32 * 8);
>>>
>>>      dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)];
>>> diff --git a/libavcodec/utvideo.h b/libavcodec/utvideo.h
>>> index 9da9329ff3..2ccd088c47 100644
>>> --- a/libavcodec/utvideo.h
>>> +++ b/libavcodec/utvideo.h
>>> @@ -27,9 +27,9 @@
>>>   * Common Ut Video header
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/common.h"
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "utvideodsp.h"
>>>  #include "lossless_videodsp.h"
>>>  #include "lossless_videoencdsp.h"
>>> @@ -65,7 +65,7 @@ typedef struct UtvideoContext {
>>>      const AVClass *class;
>>>      AVCodecContext *avctx;
>>>      UTVideoDSPContext utdsp;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>      LLVidDSPContext llviddsp;
>>>      LLVidEncDSPContext llvidencdsp;
>>>
>>> diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
>>> index 83120d1b22..dcf09b56c6 100644
>>> --- a/libavcodec/utvideodec.c
>>> +++ b/libavcodec/utvideodec.c
>>> @@ -30,10 +30,10 @@
>>>  #define CACHED_BITSTREAM_READER !ARCH_X86_32
>>>  #define UNCHECKED_BITSTREAM_READER 1
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/intreadwrite.h"
>>>  #include "libavutil/pixdesc.h"
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "codec_internal.h"
>>>  #include "get_bits.h"
>>> @@ -150,9 +150,9 @@ 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),
>>> -                          (slice_data_end - slice_data_start + 3) >> 2);
>>> +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
>>> +                            (uint32_t *)(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);
>>>
>>>          prev = 0x200;
>>> @@ -311,9 +311,9 @@ static int decode_plane(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),
>>> -                          (slice_data_end - slice_data_start + 3) >> 2);
>>> +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
>>> +                            (uint32_t *)(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);
>>>
>>>          prev = 0x80;
>>> @@ -887,7 +887,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      c->avctx = avctx;
>>>
>>>      ff_utvideodsp_init(&c->utdsp);
>>> -    ff_bswapdsp_init(&c->bdsp);
>>> +    av_bswapdsp_init(&c->bdsp);
>>>      ff_llviddsp_init(&c->llviddsp);
>>>
>>>      c->slice_bits_size = 0;
>>> diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c
>>> index d4388da8ba..de9ea8c135 100644
>>> --- a/libavcodec/utvideoenc.c
>>> +++ b/libavcodec/utvideoenc.c
>>> @@ -24,6 +24,7 @@
>>>   * Ut Video encoder
>>>   */
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/imgutils.h"
>>>  #include "libavutil/intreadwrite.h"
>>>  #include "libavutil/opt.h"
>>> @@ -31,7 +32,6 @@
>>>  #include "avcodec.h"
>>>  #include "codec_internal.h"
>>>  #include "encode.h"
>>> -#include "bswapdsp.h"
>>>  #include "bytestream.h"
>>>  #include "put_bits.h"
>>>  #include "mathops.h"
>>> @@ -132,7 +132,7 @@ static av_cold int
>> utvideo_encode_init(AVCodecContext *avctx)
>>>          return AVERROR_INVALIDDATA;
>>>      }
>>>
>>> -    ff_bswapdsp_init(&c->bdsp);
>>> +    av_bswapdsp_init(&c->bdsp);
>>>      ff_llvidencdsp_init(&c->llvidencdsp);
>>>
>>>      if (c->frame_pred == PRED_GRADIENT) {
>>> @@ -490,9 +490,9 @@ static int encode_plane(AVCodecContext *avctx, const
>> uint8_t *src,
>>>          slice_len = offset - slice_len;
>>>
>>>          /* Byteswap the written huffman codes */
>>> -        c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
>>> -                          (uint32_t *) c->slice_bits,
>>> -                          slice_len >> 2);
>>> +        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
>>> +                            (uint32_t *) c->slice_bits,
>>> +                            slice_len >> 2);
>>>
>>>          /* Write the offset to the stream */
>>>          bytestream2_put_le32(pb, offset);
>>> diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
>>> index 6f62878081..ad0f54be3c 100644
>>> --- a/libavcodec/x86/Makefile
>>> +++ b/libavcodec/x86/Makefile
>>> @@ -4,7 +4,6 @@ OBJS                                   +=
>> x86/constants.o               \
>>>  OBJS-$(CONFIG_AC3DSP)                  += x86/ac3dsp_init.o
>>>  OBJS-$(CONFIG_AUDIODSP)                += x86/audiodsp_init.o
>>>  OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp_init.o
>>> -OBJS-$(CONFIG_BSWAPDSP)                += x86/bswapdsp_init.o
>>>  OBJS-$(CONFIG_DCT)                     += x86/dct_init.o
>>>  OBJS-$(CONFIG_DIRAC_DECODER)           += x86/diracdsp_init.o
>>  \
>>>                                            x86/dirac_dwt_init.o
>>> @@ -98,7 +97,6 @@ X86ASM-OBJS-$(CONFIG_AC3DSP)           +=
>> x86/ac3dsp.o                  \
>>>                                            x86/ac3dsp_downmix.o
>>>  X86ASM-OBJS-$(CONFIG_AUDIODSP)         += x86/audiodsp.o
>>>  X86ASM-OBJS-$(CONFIG_BLOCKDSP)         += x86/blockdsp.o
>>> -X86ASM-OBJS-$(CONFIG_BSWAPDSP)         += x86/bswapdsp.o
>>>  X86ASM-OBJS-$(CONFIG_DCT)              += x86/dct32.o
>>>  X86ASM-OBJS-$(CONFIG_FFT)              += x86/fft.o
>>>  X86ASM-OBJS-$(CONFIG_FMTCONVERT)       += x86/fmtconvert.o
>>> diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c
>>> index 29c10f05da..7a90e2e5f1 100644
>>> --- a/libavcodec/ylc.c
>>> +++ b/libavcodec/ylc.c
>>> @@ -22,11 +22,11 @@
>>>
>>>  #define YLC_VLC_BITS 10
>>>
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/intreadwrite.h"
>>>  #include "libavutil/mem.h"
>>>  #include "libavutil/pixfmt.h"
>>>  #include "avcodec.h"
>>> -#include "bswapdsp.h"
>>>  #include "codec_internal.h"
>>>  #include "get_bits.h"
>>>  #include "thread.h"
>>> @@ -37,7 +37,7 @@ typedef struct YLCContext {
>>>      uint32_t table[256];
>>>      uint8_t *buffer;
>>>      int buffer_size;
>>> -    BswapDSPContext bdsp;
>>> +    AVBSwapDSPContext bdsp;
>>>  } YLCContext;
>>>
>>>  static av_cold int decode_init(AVCodecContext *avctx)
>>> @@ -45,7 +45,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>      YLCContext *s = avctx->priv_data;
>>>
>>>      avctx->pix_fmt = AV_PIX_FMT_YUYV422;
>>> -    ff_bswapdsp_init(&s->bdsp);
>>> +    av_bswapdsp_init(&s->bdsp);
>>>
>>>      return 0;
>>>  }
>>> @@ -311,9 +311,9 @@ 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,
>>> -                      (boffset - toffset + 3) >> 2);
>>> +    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
>>> +                        (uint32_t *) s->buffer,
>>> +                        (boffset - toffset + 3) >> 2);
>>>      if ((ret = init_get_bits8(&gb, s->buffer, boffset - toffset)) < 0)
>>>          return ret;
>>>
>>> @@ -332,9 +332,9 @@ static int decode_frame(AVCodecContext *avctx,
>> AVFrame *p,
>>>
>>>      memcpy(s->buffer, avpkt->data + boffset, avpkt->size - boffset);
>>>      memset(s->buffer + avpkt->size - boffset, 0,
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>> -    s->bdsp.bswap_buf((uint32_t *) s->buffer,
>>> -                      (uint32_t *) s->buffer,
>>> -                      (avpkt->size - boffset) >> 2);
>>> +    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
>>> +                        (uint32_t *) s->buffer,
>>> +                        (avpkt->size - boffset) >> 2);
>>>      if ((ret = init_get_bits8(&gb, s->buffer, avpkt->size - boffset)) <
>> 0)
>>>          return ret;
>>>
>>> diff --git a/libavutil/Makefile b/libavutil/Makefile
>>> index 3d9c07aea8..bff5dbc7d9 100644
>>> --- a/libavutil/Makefile
>>> +++ b/libavutil/Makefile
>>> @@ -13,6 +13,7 @@ HEADERS = adler32.h
>>                  \
>>>            blowfish.h
>> \
>>>            bprint.h
>> \
>>>            bswap.h
>>  \
>>> +          bswapdsp.h
>> \
>>>            buffer.h
>> \
>>>            cast5.h
>>  \
>>>            camellia.h
>> \
>>> @@ -108,6 +109,7 @@ OBJS = adler32.o
>>                     \
>>>         base64.o
>>  \
>>>         blowfish.o
>>  \
>>>         bprint.o
>>  \
>>> +       bswapdsp.o
>>  \
>>>         buffer.o
>>  \
>>>         cast5.o
>> \
>>>         camellia.o
>>  \
>>> diff --git a/libavcodec/bswapdsp.c b/libavutil/bswapdsp.c
>>> similarity index 80%
>>> rename from libavcodec/bswapdsp.c
>>> rename to libavutil/bswapdsp.c
>>> index f0ea2b55c5..e85cdfe5d7 100644
>>> --- a/libavcodec/bswapdsp.c
>>> +++ b/libavutil/bswapdsp.c
>>> @@ -18,15 +18,18 @@
>>>
>>>  #include <stdint.h>
>>>
>>> -#include "libavutil/attributes.h"
>>> -#include "libavutil/bswap.h"
>>> +#include "attributes.h"
>>> +#include "bswap.h"
>>>  #include "bswapdsp.h"
>>>
>>> -static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
>>> +void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c);
>>> +void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
>>> +
>>> +static void bswap32_buf(uint32_t *dst, const uint32_t *src, int len)
>>>  {
>>>      int i;
>>>
>>> -    for (i = 0; i + 8 <= w; i += 8) {
>>> +    for (i = 0; i + 8 <= len; 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]);
>>> @@ -36,7 +39,7 @@ static void bswap_buf(uint32_t *dst, const uint32_t
>> *src, int w)
>>>          dst[i + 6] = av_bswap32(src[i + 6]);
>>>          dst[i + 7] = av_bswap32(src[i + 7]);
>>>      }
>>> -    for (; i < w; i++)
>>> +    for (; i < len; i++)
>>>          dst[i + 0] = av_bswap32(src[i + 0]);
>>>  }
>>>
>>> @@ -46,9 +49,9 @@ static void bswap16_buf(uint16_t *dst, const uint16_t
>> *src, int len)
>>>          *dst++ = av_bswap16(*src++);
>>>  }
>>>
>>> -av_cold void ff_bswapdsp_init(BswapDSPContext *c)
>>> +av_cold void av_bswapdsp_init(AVBSwapDSPContext *c)
>>>  {
>>> -    c->bswap_buf   = bswap_buf;
>>> +    c->bswap32_buf = bswap32_buf;
>>>      c->bswap16_buf = bswap16_buf;
>>>
>>>  #if ARCH_RISCV
>>> diff --git a/libavcodec/bswapdsp.h b/libavutil/bswapdsp.h
>>> similarity index 71%
>>> rename from libavcodec/bswapdsp.h
>>> rename to libavutil/bswapdsp.h
>>> index 6f4db66115..b540560d6a 100644
>>> --- a/libavcodec/bswapdsp.h
>>> +++ b/libavutil/bswapdsp.h
>>> @@ -16,18 +16,16 @@
>>>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>> 02110-1301 USA
>>>   */
>>>
>>> -#ifndef AVCODEC_BSWAPDSP_H
>>> -#define AVCODEC_BSWAPDSP_H
>>> +#ifndef AVUTIL_BSWAPDSP_H
>>> +#define AVUTIL_BSWAPDSP_H
>>>
>>>  #include <stdint.h>
>>>
>>> -typedef struct BswapDSPContext {
>>> -    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
>>> +typedef struct AVBSwapDSPContext {
>>> +    void (*bswap32_buf)(uint32_t *dst, const uint32_t *src, int len);
>>>      void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
>>> -} BswapDSPContext;
>>> +} AVBSwapDSPContext;
>>>
>>> -void ff_bswapdsp_init(BswapDSPContext *c);
>>> -void ff_bswapdsp_init_riscv(BswapDSPContext *c);
>>> -void ff_bswapdsp_init_x86(BswapDSPContext *c);
>>> +void av_bswapdsp_init(AVBSwapDSPContext *c);
>>>
>>> -#endif /* AVCODEC_BSWAPDSP_H */
>>> +#endif /* AVUTIL_BSWAPDSP_H */
>>> diff --git a/libavutil/riscv/Makefile b/libavutil/riscv/Makefile
>>> index 1597154ba5..525538f6b6 100644
>>> --- a/libavutil/riscv/Makefile
>>> +++ b/libavutil/riscv/Makefile
>>> @@ -1,5 +1,8 @@
>>> -OBJS +=     riscv/float_dsp_init.o \
>>> +OBJS +=     riscv/bswapdsp_init.o \
>>> +            riscv/bswapdsp_rvb.o \
>>> +            riscv/float_dsp_init.o \
>>>              riscv/fixed_dsp_init.o \
>>>              riscv/cpu.o
>>> -RVV-OBJS += riscv/float_dsp_rvv.o \
>>> +RVV-OBJS += riscv/bswapdsp_rvv.o  \
>>> +            riscv/float_dsp_rvv.o \
>>>              riscv/fixed_dsp_rvv.o
>>> diff --git a/libavcodec/riscv/bswapdsp_init.c
>> b/libavutil/riscv/bswapdsp_init.c
>>> similarity index 85%
>>> rename from libavcodec/riscv/bswapdsp_init.c
>>> rename to libavutil/riscv/bswapdsp_init.c
>>> index abe84ec1f7..362d574a27 100644
>>> --- a/libavcodec/riscv/bswapdsp_init.c
>>> +++ b/libavutil/riscv/bswapdsp_init.c
>>> @@ -22,24 +22,25 @@
>>>
>>>  #include "config.h"
>>>  #include "libavutil/attributes.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #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_bswapdsp_init_riscv(AVBSwapDSPContext *c);
>>>
>>> -av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
>>> +av_cold void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c)
>>>  {
>>>      int cpu_flags = av_get_cpu_flags();
>>>
>>>  #if (__riscv_xlen >= 64)
>>>      if (cpu_flags & AV_CPU_FLAG_RVB_BASIC)
>>> -        c->bswap_buf = ff_bswap32_buf_rvb;
>>> +        c->bswap32_buf = ff_bswap32_buf_rvb;
>>>  #endif
>>>  #if HAVE_RVV
>>>      if (cpu_flags & AV_CPU_FLAG_RVV_I32) {
>>> -        c->bswap_buf = ff_bswap32_buf_rvv;
>>> +        c->bswap32_buf = ff_bswap32_buf_rvv;
>>>          c->bswap16_buf = ff_bswap16_buf_rvv;
>>>      }
>>>  #endif
>>> diff --git a/libavcodec/riscv/bswapdsp_rvb.S
>> b/libavutil/riscv/bswapdsp_rvb.S
>>> similarity index 100%
>>> rename from libavcodec/riscv/bswapdsp_rvb.S
>>> rename to libavutil/riscv/bswapdsp_rvb.S
>>> diff --git a/libavcodec/riscv/bswapdsp_rvv.S
>> b/libavutil/riscv/bswapdsp_rvv.S
>>> similarity index 100%
>>> rename from libavcodec/riscv/bswapdsp_rvv.S
>>> rename to libavutil/riscv/bswapdsp_rvv.S
>>> diff --git a/libavutil/version.h b/libavutil/version.h
>>> index 3b616ea489..60f96af5df 100644
>>> --- a/libavutil/version.h
>>> +++ b/libavutil/version.h
>>> @@ -79,7 +79,7 @@
>>>   */
>>>
>>>  #define LIBAVUTIL_VERSION_MAJOR  57
>>> -#define LIBAVUTIL_VERSION_MINOR  43
>>> +#define LIBAVUTIL_VERSION_MINOR  44
>>>  #define LIBAVUTIL_VERSION_MICRO 100
>>>
>>>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR,
>> \
>>> diff --git a/libavutil/x86/Makefile b/libavutil/x86/Makefile
>>> index d66839e35d..40bac784d1 100644
>>> --- a/libavutil/x86/Makefile
>>> +++ b/libavutil/x86/Makefile
>>> @@ -4,14 +4,16 @@ OBJS += x86/cpu.o
>>                  \
>>>          x86/imgutils_init.o
>>  \
>>>          x86/lls_init.o
>> \
>>>
>>> -OBJS-$(HAVE_X86ASM) += x86/tx_float_init.o
>> \
>>> +OBJS-$(HAVE_X86ASM) += x86/bswapdsp_init.o
>> \
>>> +                       x86/tx_float_init.o
>>>
>>>  OBJS-$(CONFIG_PIXELUTILS) += x86/pixelutils_init.o
>> \
>>>
>>>  EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) =
>> x86/emms.o
>>>
>>> -X86ASM-OBJS += x86/cpuid.o
>> \
>>> -             $(EMMS_OBJS__yes_)                                      \
>>> +X86ASM-OBJS += x86/bswapdsp.o
>>  \
>>> +             x86/cpuid.o
>> \
>>> +             $(EMMS_OBJS__yes_)
>>  \
>>>               x86/fixed_dsp.o
>> \
>>>               x86/float_dsp.o
>> \
>>>               x86/imgutils.o
>>  \
>>> diff --git a/libavcodec/x86/bswapdsp.asm b/libavutil/x86/bswapdsp.asm
>>> similarity index 97%
>>> rename from libavcodec/x86/bswapdsp.asm
>>> rename to libavutil/x86/bswapdsp.asm
>>> index 31c6c48a21..c3bb90c2be 100644
>>> --- a/libavcodec/x86/bswapdsp.asm
>>> +++ b/libavutil/x86/bswapdsp.asm
>>> @@ -26,8 +26,6 @@
>>>  SECTION_RODATA
>>>  pb_bswap32: db 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
>>>
>>> -cextern pb_80
>>> -
>>>  SECTION .text
>>>
>>>  ; %1 = aligned/unaligned
>>> @@ -99,7 +97,7 @@ SECTION .text
>>>      add      r0, 16
>>>  %endmacro
>>>
>>> -; void ff_bswap_buf(uint32_t *dst, const uint32_t *src, int w);
>>> +; void ff_bswap32_buf(uint32_t *dst, const uint32_t *src, int len);
>>>  %macro BSWAP32_BUF 0
>>>  %if cpuflag(ssse3)||cpuflag(avx2)
>>>  cglobal bswap32_buf, 3,4,3
>>> diff --git a/libavcodec/x86/bswapdsp_init.c
>> b/libavutil/x86/bswapdsp_init.c
>>> similarity index 80%
>>> rename from libavcodec/x86/bswapdsp_init.c
>>> rename to libavutil/x86/bswapdsp_init.c
>>> index 877bab1a2c..3694e9208c 100644
>>> --- a/libavcodec/x86/bswapdsp_init.c
>>> +++ b/libavutil/x86/bswapdsp_init.c
>>> @@ -19,22 +19,23 @@
>>>  #include <stdint.h>
>>>
>>>  #include "libavutil/attributes.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/cpu.h"
>>>  #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 uint32_t *src, int len);
>>> +void ff_bswap32_buf_ssse3(uint32_t *dst, const uint32_t *src, int len);
>>> +void ff_bswap32_buf_avx2(uint32_t *dst, const uint32_t *src, int len);
>>> +void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
>>>
>>> -av_cold void ff_bswapdsp_init_x86(BswapDSPContext *c)
>>> +av_cold void ff_bswapdsp_init_x86(AVBSwapDSPContext *c)
>>>  {
>>>      int cpu_flags = av_get_cpu_flags();
>>>
>>>      if (EXTERNAL_SSE2(cpu_flags))
>>> -        c->bswap_buf = ff_bswap32_buf_sse2;
>>> +        c->bswap32_buf = ff_bswap32_buf_sse2;
>>>      if (EXTERNAL_SSSE3(cpu_flags))
>>> -        c->bswap_buf = ff_bswap32_buf_ssse3;
>>> +        c->bswap32_buf = ff_bswap32_buf_ssse3;
>>>      if (EXTERNAL_AVX2_FAST(cpu_flags))
>>> -        c->bswap_buf = ff_bswap32_buf_avx2;
>>> +        c->bswap32_buf = ff_bswap32_buf_avx2;
>>>  }
>>> diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
>>> index a6f06c7007..1bfaea0e9b 100644
>>> --- a/tests/checkasm/Makefile
>>> +++ b/tests/checkasm/Makefile
>>> @@ -2,7 +2,6 @@
>>>  # subsystems
>>>  AVCODECOBJS-$(CONFIG_AUDIODSP)          += audiodsp.o
>>>  AVCODECOBJS-$(CONFIG_BLOCKDSP)          += blockdsp.o
>>> -AVCODECOBJS-$(CONFIG_BSWAPDSP)          += bswapdsp.o
>>>  AVCODECOBJS-$(CONFIG_FMTCONVERT)        += fmtconvert.o
>>>  AVCODECOBJS-$(CONFIG_G722DSP)           += g722dsp.o
>>>  AVCODECOBJS-$(CONFIG_H264DSP)           += h264dsp.o
>>> @@ -59,6 +58,7 @@ CHECKASMOBJS-$(CONFIG_SWSCALE)  += $(SWSCALEOBJS)
>>>  AVUTILOBJS                              += av_tx.o
>>>  AVUTILOBJS                              += fixed_dsp.o
>>>  AVUTILOBJS                              += float_dsp.o
>>> +AVUTILOBJS                              += bswapdsp.o
>>>
>>>  CHECKASMOBJS-$(CONFIG_AVUTIL)  += $(AVUTILOBJS)
>>>
>>> diff --git a/tests/checkasm/bswapdsp.c b/tests/checkasm/bswapdsp.c
>>> index d789e90de3..f8dc50be33 100644
>>> --- a/tests/checkasm/bswapdsp.c
>>> +++ b/tests/checkasm/bswapdsp.c
>>> @@ -20,7 +20,7 @@
>>>
>>>  #include <string.h>
>>>  #include "checkasm.h"
>>> -#include "libavcodec/bswapdsp.h"
>>> +#include "libavutil/bswapdsp.h"
>>>  #include "libavutil/common.h"
>>>  #include "libavutil/internal.h"
>>>  #include "libavutil/intreadwrite.h"
>>> @@ -63,11 +63,11 @@ void checkasm_check_bswapdsp(void)
>>>      LOCAL_ALIGNED_16(uint8_t, src1, [BUF_SIZE]);
>>>      LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]);
>>>      LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]);
>>> -    BswapDSPContext h;
>>> +    AVBSwapDSPContext h;
>>>
>>> -    ff_bswapdsp_init(&h);
>>> +    av_bswapdsp_init(&h);
>>>
>>> -    if (check_func(h.bswap_buf, "bswap_buf"))
>>> +    if (check_func(h.bswap32_buf, "bswap32_buf"))
>>>          check_bswap(uint32_t);
>>>
>>>      if (check_func(h.bswap16_buf, "bswap16_buf"))
>>> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
>>> index e96d84a7da..32657b6c2d 100644
>>> --- a/tests/checkasm/checkasm.c
>>> +++ b/tests/checkasm/checkasm.c
>>> @@ -87,9 +87,6 @@ static const struct {
>>>      #if CONFIG_BLOCKDSP
>>>          { "blockdsp", checkasm_check_blockdsp },
>>>      #endif
>>> -    #if CONFIG_BSWAPDSP
>>> -        { "bswapdsp", checkasm_check_bswapdsp },
>>> -    #endif
>>>      #if CONFIG_DCA_DECODER
>>>          { "synth_filter", checkasm_check_synth_filter },
>>>      #endif
>>> @@ -207,6 +204,7 @@ static const struct {
>>>      { "sw_scale", checkasm_check_sw_scale },
>>>  #endif
>>>  #if CONFIG_AVUTIL
>>> +        { "bswapdsp", checkasm_check_bswapdsp },
>>>          { "fixed_dsp", checkasm_check_fixed_dsp },
>>>          { "float_dsp", checkasm_check_float_dsp },
>>>          { "av_tx",     checkasm_check_av_tx },
>>
>> 1. Renaming bswap_buf->bswap32_buf should be done in a separate
>> (preceding) commit. The same goes for removing the unnecessary cextern
>> declaration.
>>
> 
> good idea, will do that.
> 
> 
>> 2. If this is supposed to be public, it needs better documentation (or
>> actually, documentation at all): E.g. either src and dst must coincide
>> or they must point to disjoint buffers of the appropriate length.
>> 3. a) Making this public will impair our ability to change anything
>> about it (i.e. we could not add a 64bit variant or use size_t for the
>> amount of elements to process or switch the len parameter to bytes or
>> whatever).
>> b) To mitigate a), we could make sizeof(AVBSwapDSPContext) private and
>> change the init function to allocate it. Yet this would add error checks
>> when initializing, would necessitate freeing said context lateron and
>> would add an unnecessary indirection at runtime. This is only a
>> mitigation, as we would be force to keep the int functions around in
>> case we wanted to switch to size_t.
>> (c) An alternative way to mitigate this is to use a function like
>> void (*av_bswapdsp_init(enum AVBSwapType type))(void *dst, const void
>> *src, int len). This works because most users (except rawvideo and
>> swscale, it seems) actually want only one type of swap function. This
>> would avoid the allocs and frees.)
>> 4. Because of 3. I am in favour of duplicating this into swscale instead
>> of making it public.
>>
> 
> I was going to move it to avutil but keep it private (not install the
> header) and add the avpriv prefix, is that okay?
> 

avpriv basically has the same restrictions as being public, namely that
breaking changes can only be done with a major bump and that in order to
allow any change, sizeof(AVBSwapDSPContext) must not be used outside of
lavu (i.e. one is in scenario 3b) with its downsides).
The only benefit of it is that one does not need to care about
deprecation periods, i.e. one may change absolutely everything at a
major bump (which is not true for stuff that is truely public).

> 
>> 5. Btw: We use this API on data coming from packets and the data of
>> packets has no alignment requirements. It means that there is UB in case
>> the packets' data is not suitably aligned (the UB already happens in the
>> uint8_t*->uint(32|16)_t* conversion; in case the C version is used, it
>> also happens in bswap_buf() or bswap16_buf()). The former can be fixed
>> by making src const void*, the latter by reading via AV_RN(32|16) in the
>> C versions.
>> This would of course also necessitate documentation if this were done
>> and still made public.
>>
> 
> yikes, guess it's always been like that. I'll try fixing that too.  Looks
> like the x86 asm is handling the unaligned case.

Not necessary, I'll send a patch for it.

> I have been testing riscv via qemu, but I am not familiar with riscv asm,
> so I'm not sure if it is handling alignment correctly.
>
diff mbox series

Patch

diff --git a/configure b/configure
index f4eedfc207..03b502ea37 100755
--- a/configure
+++ b/configure
@@ -2421,7 +2421,6 @@  CONFIG_EXTRA="
     audio_frame_queue
     audiodsp
     blockdsp
-    bswapdsp
     cabac
     cbs
     cbs_av1
@@ -2749,8 +2748,8 @@  aac_decoder_select="adts_header mpeg4audio sinewin"
 aac_fixed_decoder_select="adts_header mpeg4audio"
 aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
 aac_latm_decoder_select="aac_decoder aac_latm_parser"
-ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert"
-ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp"
+ac3_decoder_select="ac3_parser ac3dsp fmtconvert"
+ac3_fixed_decoder_select="ac3_parser ac3dsp"
 ac3_encoder_select="ac3dsp audiodsp me_cmp"
 ac3_fixed_encoder_select="ac3dsp audiodsp me_cmp"
 acelp_kelvin_decoder_select="audiodsp"
@@ -2759,20 +2758,20 @@  adpcm_g722_encoder_select="g722dsp"
 agm_decoder_select="idctdsp"
 aic_decoder_select="golomb idctdsp"
 alac_encoder_select="lpc"
-als_decoder_select="bswapdsp mpeg4audio"
+als_decoder_select="mpeg4audio"
 amrnb_decoder_select="lsp"
 amrwb_decoder_select="lsp"
 amv_decoder_select="sp5x_decoder exif"
 amv_encoder_select="jpegtables mpegvideoenc"
-ape_decoder_select="bswapdsp llauddsp"
+ape_decoder_select="llauddsp"
 apng_decoder_select="inflate_wrapper"
 apng_encoder_select="deflate_wrapper llvidencdsp"
 aptx_encoder_select="audio_frame_queue"
 aptx_hd_encoder_select="audio_frame_queue"
-asv1_decoder_select="blockdsp bswapdsp idctdsp"
-asv1_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
-asv2_decoder_select="blockdsp bswapdsp idctdsp"
-asv2_encoder_select="aandcttables bswapdsp fdctdsp pixblockdsp"
+asv1_decoder_select="idctdsp"
+asv1_encoder_select="aandcttables fdctdsp pixblockdsp"
+asv2_decoder_select="idctdsp"
+asv2_encoder_select="aandcttables fdctdsp pixblockdsp"
 atrac1_decoder_select="sinewin"
 av1_decoder_select="av1_frame_split_bsf cbs_av1"
 bink_decoder_select="blockdsp hpeldsp"
@@ -2780,7 +2779,6 @@  binkaudio_dct_decoder_select="wma_freqs"
 binkaudio_rdft_decoder_select="wma_freqs"
 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
 clearvideo_decoder_select="idctdsp"
-cllc_decoder_select="bswapdsp"
 comfortnoise_encoder_select="lpc"
 cook_decoder_select="audiodsp sinewin"
 cri_decoder_select="mjpeg_decoder"
@@ -2795,9 +2793,9 @@  dxa_decoder_deps="zlib"
 dxv_decoder_select="lzf texturedsp"
 eac3_decoder_select="ac3_decoder"
 eac3_encoder_select="ac3_encoder"
-eamad_decoder_select="aandcttables blockdsp bswapdsp"
+eamad_decoder_select="aandcttables blockdsp"
 eatgq_decoder_select="aandcttables"
-eatqi_decoder_select="aandcttables blockdsp bswapdsp"
+eatqi_decoder_select="aandcttables blockdsp"
 exr_decoder_deps="zlib"
 exr_encoder_deps="zlib"
 ffv1_decoder_select="rangecoder"
@@ -2805,15 +2803,15 @@  ffv1_encoder_select="rangecoder"
 ffvhuff_decoder_select="huffyuv_decoder"
 ffvhuff_encoder_select="huffyuv_encoder"
 fic_decoder_select="golomb"
-flac_encoder_select="bswapdsp lpc"
+flac_encoder_select="lpc"
 flashsv2_decoder_select="inflate_wrapper"
 flashsv2_encoder_select="deflate_wrapper"
 flashsv_decoder_select="inflate_wrapper"
 flashsv_encoder_deps="zlib"
 flv_decoder_select="h263_decoder"
 flv_encoder_select="h263_encoder"
-fourxm_decoder_select="blockdsp bswapdsp"
-fraps_decoder_select="bswapdsp huffman"
+fourxm_decoder_select="blockdsp"
+fraps_decoder_select="huffman"
 g2m_decoder_deps="zlib"
 g2m_decoder_select="blockdsp idctdsp jpegtables"
 g729_decoder_select="audiodsp"
@@ -2829,13 +2827,13 @@  h264_decoder_suggest="error_resilience"
 hap_decoder_select="snappy texturedsp"
 hap_encoder_deps="libsnappy"
 hap_encoder_select="texturedspenc"
-hevc_decoder_select="bswapdsp cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
-huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
-huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
+hevc_decoder_select="cabac dovi_rpu golomb hevcparse hevc_sei videodsp"
+huffyuv_decoder_select="huffyuvdsp llviddsp"
+huffyuv_encoder_select="huffman huffyuvencdsp llvidencdsp"
 hymt_decoder_select="huffyuv_decoder"
 iac_decoder_select="imc_decoder"
-imc_decoder_select="bswapdsp sinewin"
-imm4_decoder_select="bswapdsp idctdsp"
+imc_decoder_select="sinewin"
+imm4_decoder_select="idctdsp"
 imm5_decoder_select="h264_decoder hevc_decoder"
 indeo3_decoder_select="hpeldsp"
 indeo4_decoder_select="ividsp"
@@ -2849,16 +2847,15 @@  ljpeg_encoder_select="jpegtables"
 lscr_decoder_select="inflate_wrapper"
 magicyuv_decoder_select="llviddsp"
 magicyuv_encoder_select="llvidencdsp"
-mdec_decoder_select="blockdsp bswapdsp idctdsp"
+mdec_decoder_select="blockdsp idctdsp"
 metasound_decoder_select="lsp sinewin"
-mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
+mimic_decoder_select="blockdsp hpeldsp idctdsp"
 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
 mjpeg_encoder_select="jpegtables mpegvideoenc"
 mjpegb_decoder_select="mjpeg_decoder"
 mlp_decoder_select="mlp_parser"
 mlp_encoder_select="lpc audio_frame_queue"
-mobiclip_decoder_select="bswapdsp golomb"
-motionpixels_decoder_select="bswapdsp"
+mobiclip_decoder_select="golomb"
 mp1_decoder_select="mpegaudio"
 mp1float_decoder_select="mpegaudio"
 mp2_decoder_select="mpegaudio"
@@ -2869,7 +2866,7 @@  mp3adufloat_decoder_select="mpegaudio"
 mp3float_decoder_select="mpegaudio"
 mp3on4_decoder_select="mpegaudio mpeg4audio"
 mp3on4float_decoder_select="mpegaudio mpeg4audio"
-mpc7_decoder_select="bswapdsp mpegaudiodsp"
+mpc7_decoder_select="mpegaudiodsp"
 mpc8_decoder_select="mpegaudiodsp"
 mpegvideo_decoder_select="mpegvideodec"
 mpeg1video_decoder_select="mpegvideodec"
@@ -2909,7 +2906,6 @@  ra_144_decoder_select="audiodsp"
 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
 ralf_decoder_select="golomb"
 rasc_decoder_select="inflate_wrapper"
-rawvideo_decoder_select="bswapdsp"
 rscc_decoder_deps="zlib"
 rv10_decoder_select="h263_decoder"
 rv10_encoder_select="h263_encoder"
@@ -2918,7 +2914,6 @@  rv20_encoder_select="h263_encoder"
 rv30_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
 rv40_decoder_select="golomb h264pred h264qpel mpegvideodec rv34dsp"
 screenpresso_decoder_deps="zlib"
-shorten_decoder_select="bswapdsp"
 sipr_decoder_select="lsp"
 smvjpeg_decoder_select="mjpeg_decoder"
 snow_decoder_select="dwt h264qpel hpeldsp rangecoder videodsp"
@@ -2944,13 +2939,11 @@  tiff_decoder_suggest="zlib lzma"
 tiff_encoder_suggest="zlib"
 truehd_decoder_select="mlp_parser"
 truehd_encoder_select="lpc audio_frame_queue"
-truemotion2_decoder_select="bswapdsp"
-truespeech_decoder_select="bswapdsp"
 tscc_decoder_select="inflate_wrapper"
 twinvq_decoder_select="lsp sinewin"
 txd_decoder_select="texturedsp"
-utvideo_decoder_select="bswapdsp llviddsp"
-utvideo_encoder_select="bswapdsp huffman llvidencdsp"
+utvideo_decoder_select="llviddsp"
+utvideo_encoder_select="huffman llvidencdsp"
 vble_decoder_select="llviddsp"
 vbn_decoder_select="texturedsp"
 vbn_encoder_select="texturedspenc"
@@ -2983,7 +2976,6 @@  wmv3_decoder_select="vc1_decoder"
 wmv3image_decoder_select="wmv3_decoder"
 xma1_decoder_select="wmapro_decoder"
 xma2_decoder_select="wmapro_decoder"
-ylc_decoder_select="bswapdsp"
 zerocodec_decoder_select="inflate_wrapper"
 zlib_decoder_select="inflate_wrapper"
 zlib_encoder_select="deflate_wrapper"
diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c
index 5636fdef2d..b99f8be172 100644
--- a/libavcodec/4xm.c
+++ b/libavcodec/4xm.c
@@ -27,6 +27,7 @@ 
 #include <inttypes.h>
 
 #include "libavutil/avassert.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/frame.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
@@ -34,7 +35,6 @@ 
 #include "libavutil/thread.h"
 #include "avcodec.h"
 #include "blockdsp.h"
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "codec_internal.h"
 #include "decode.h"
@@ -138,7 +138,7 @@  typedef struct CFrameBuffer {
 typedef struct FourXContext {
     AVCodecContext *avctx;
     BlockDSPContext bdsp;
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
     uint16_t *frame_buffer;
     uint16_t *last_frame_buffer;
     GetBitContext pre_gb;          ///< ac/dc prefix
@@ -469,8 +469,8 @@  static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length)
                           bitstream_size);
     if (!f->bitstream_buffer)
         return AVERROR(ENOMEM);
-    f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) (buf + extra),
-                       bitstream_size / 4);
+    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *) (buf + extra),
+                         bitstream_size / 4);
     init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size);
 
     wordstream_offset = extra + bitstream_size;
@@ -813,8 +813,8 @@  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,
-                       prestream_size / 4);
+    f->bbdsp.bswap32_buf(f->bitstream_buffer, (const uint32_t *) prestream,
+                         prestream_size / 4);
     init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);
 
     f->last_dc = 0 * 128 * 8 * 8;
@@ -1013,7 +1013,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
 
     f->version = AV_RL32(avctx->extradata) >> 16;
     ff_blockdsp_init(&f->bdsp);
-    ff_bswapdsp_init(&f->bbdsp);
+    av_bswapdsp_init(&f->bbdsp);
     f->avctx = avctx;
 
     if (f->version > 2)
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 98841ed07c..6b9b7a48dd 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -70,7 +70,6 @@  OBJS-$(CONFIG_AUDIO_FRAME_QUEUE)       += audio_frame_queue.o
 OBJS-$(CONFIG_ATSC_A53)                += atsc_a53.o
 OBJS-$(CONFIG_AUDIODSP)                += audiodsp.o
 OBJS-$(CONFIG_BLOCKDSP)                += blockdsp.o
-OBJS-$(CONFIG_BSWAPDSP)                += bswapdsp.o
 OBJS-$(CONFIG_CABAC)                   += cabac.o
 OBJS-$(CONFIG_CBS)                     += cbs.o cbs_bsf.o
 OBJS-$(CONFIG_CBS_AV1)                 += cbs_av1.o
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 1f2949dcfd..218f4e96d2 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -31,13 +31,13 @@ 
 #include <math.h>
 #include <string.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/crc.h"
 #include "libavutil/downmix_info.h"
 #include "libavutil/intmath.h"
 #include "libavutil/opt.h"
 #include "libavutil/thread.h"
-#include "bswapdsp.h"
 #include "aac_ac3_parser.h"
 #include "ac3_parser_internal.h"
 #include "ac3dec.h"
@@ -229,7 +229,7 @@  static av_cold int ac3_decode_init(AVCodecContext *avctx)
         return ret;
 
     AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
 
 #if (USE_FIXED)
     s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags & AV_CODEC_FLAG_BITEXACT);
diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
index 138b462abb..8cd6d83e9a 100644
--- a/libavcodec/ac3dec.h
+++ b/libavcodec/ac3dec.h
@@ -51,6 +51,7 @@ 
 #define AVCODEC_AC3DEC_H
 
 #include "libavutil/tx.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/float_dsp.h"
 #include "libavutil/fixed_dsp.h"
 #include "libavutil/lfg.h"
@@ -59,7 +60,6 @@ 
 #include "ac3.h"
 #include "ac3dsp.h"
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "get_bits.h"
 #include "fmtconvert.h"
 
@@ -228,7 +228,7 @@  typedef struct AC3DecodeContext {
 ///@}
 
 ///@name Optimization
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
 #if USE_FIXED
     AVFixedDSPContext *fdsp;
 #else
diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
index 4605b2248f..af41eda49f 100644
--- a/libavcodec/alsdec.c
+++ b/libavcodec/alsdec.c
@@ -32,12 +32,12 @@ 
 #include "unary.h"
 #include "mpeg4audio.h"
 #include "bgmc.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "internal.h"
 #include "mlz.h"
 #include "libavutil/samplefmt.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/crc.h"
 #include "libavutil/softfloat_ieee754.h"
 #include "libavutil/intfloat.h"
@@ -197,7 +197,7 @@  typedef struct ALSDecContext {
     AVCodecContext *avctx;
     ALSSpecificConfig sconf;
     GetBitContext gb;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     const AVCRC *crc_table;
     uint32_t crc_org;               ///< CRC value of the original input data
     uint32_t crc;                   ///< CRC value calculated from decoded data
@@ -1899,9 +1899,9 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
                          sample++)
                         *dest++ = av_bswap16(src[sample]);
                 } else {
-                    ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
-                                        (uint32_t *) frame->data[0],
-                                        ctx->cur_frame_length * channels);
+                    ctx->bdsp.bswap32_buf((uint32_t *) ctx->crc_buffer,
+                                          (uint32_t *) frame->data[0],
+                                          ctx->cur_frame_length * channels);
                 }
                 crc_source = ctx->crc_buffer;
             } else {
@@ -2164,7 +2164,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
         }
     }
 
-    ff_bswapdsp_init(&ctx->bdsp);
+    av_bswapdsp_init(&ctx->bdsp);
 
     return 0;
 }
diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
index c08d13d6c2..7b9fa74416 100644
--- a/libavcodec/apedec.c
+++ b/libavcodec/apedec.c
@@ -23,12 +23,12 @@ 
 #include <inttypes.h>
 
 #include "libavutil/avassert.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/crc.h"
 #include "libavutil/opt.h"
 #include "lossless_audiodsp.h"
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "codec_internal.h"
 #include "decode.h"
@@ -153,7 +153,7 @@  typedef struct APEPredictor64 {
 typedef struct APEContext {
     AVClass *class;                          ///< class for AVOptions
     AVCodecContext *avctx;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     LLAudDSPContext adsp;
     int channels;
     int samples;                             ///< samples left to decode in current frame
@@ -313,7 +313,7 @@  static av_cold int ape_decode_init(AVCodecContext *avctx)
         s->predictor_decode_stereo = predictor_decode_stereo_3950;
     }
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
     ff_llauddsp_init(&s->adsp);
     av_channel_layout_uninit(&avctx->ch_layout);
     avctx->ch_layout = (channels == 2) ? (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO
@@ -1499,8 +1499,8 @@  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,
-                          buf_size >> 2);
+        s->bdsp.bswap32_buf((uint32_t *) s->data, (const uint32_t *) buf,
+                            buf_size >> 2);
         memset(s->data + (buf_size & ~3), 0, buf_size & 3);
         s->ptr = s->data;
         s->data_end = s->data + buf_size;
diff --git a/libavcodec/asv.c b/libavcodec/asv.c
index 3aa08c30c0..bfe669d25e 100644
--- a/libavcodec/asv.c
+++ b/libavcodec/asv.c
@@ -26,10 +26,10 @@ 
 #include <stdint.h>
 
 #include "libavutil/attributes.h"
+#include "libavutil/bswapdsp.h"
 
 #include "asv.h"
 #include "avcodec.h"
-#include "bswapdsp.h"
 
 const uint8_t ff_asv_scantab[64] = {
     0x00, 0x08, 0x01, 0x09, 0x10, 0x18, 0x11, 0x19,
@@ -92,7 +92,7 @@  av_cold void ff_asv_common_init(AVCodecContext *avctx)
 {
     ASVCommonContext *const a = avctx->priv_data;
 
-    ff_bswapdsp_init(&a->bbdsp);
+    av_bswapdsp_init(&a->bbdsp);
 
     a->mb_width   = (avctx->width  + 15) / 16;
     a->mb_height  = (avctx->height + 15) / 16;
diff --git a/libavcodec/asv.h b/libavcodec/asv.h
index 7c0983a497..f7e00d8ef2 100644
--- a/libavcodec/asv.h
+++ b/libavcodec/asv.h
@@ -29,11 +29,11 @@ 
 #include <stdint.h>
 
 #include "avcodec.h"
-#include "bswapdsp.h"
+#include "libavutil/bswapdsp.h"
 
 typedef struct ASVCommonContext {
     AVCodecContext *avctx;
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
     int mb_width;
     int mb_height;
     int mb_width2;
diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c
index 699aab9f8f..25dab7473f 100644
--- a/libavcodec/asvdec.c
+++ b/libavcodec/asvdec.c
@@ -253,8 +253,8 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
         if (!a->bitstream_buffer)
             return AVERROR(ENOMEM);
 
-        c->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer,
-                           (const uint32_t *) buf, buf_size / 4);
+        c->bbdsp.bswap32_buf((uint32_t *) a->bitstream_buffer,
+                             (const uint32_t *) 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..2bf67d686c 100644
--- a/libavcodec/asvenc.c
+++ b/libavcodec/asvenc.c
@@ -309,8 +309,8 @@  static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     size = (put_bytes_output(&a->pb) + 3) / 4;
 
     if (avctx->codec_id == AV_CODEC_ID_ASV1) {
-        c->bbdsp.bswap_buf((uint32_t *) pkt->data,
-                           (uint32_t *) pkt->data, size);
+        c->bbdsp.bswap32_buf((uint32_t *) pkt->data,
+                             (uint32_t *) pkt->data, size);
     }
 
     pkt->size   = size * 4;
diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
index 911717b68d..dede8591c5 100644
--- a/libavcodec/cllc.c
+++ b/libavcodec/cllc.c
@@ -22,8 +22,8 @@ 
 
 #include <inttypes.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/intreadwrite.h"
-#include "bswapdsp.h"
 #include "canopus.h"
 #include "get_bits.h"
 #include "avcodec.h"
@@ -36,7 +36,7 @@ 
 
 typedef struct CLLCContext {
     AVCodecContext *avctx;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
 
     uint8_t *swapped_buf;
     int      swapped_buf_size;
@@ -486,7 +486,7 @@  static av_cold int cllc_decode_init(AVCodecContext *avctx)
     ctx->swapped_buf      = NULL;
     ctx->swapped_buf_size = 0;
 
-    ff_bswapdsp_init(&ctx->bdsp);
+    av_bswapdsp_init(&ctx->bdsp);
 
     return 0;
 }
diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
index 45012c62b8..0ffcd14105 100644
--- a/libavcodec/eamad.c
+++ b/libavcodec/eamad.c
@@ -28,12 +28,12 @@ 
  * http://wiki.multimedia.cx/index.php?title=Electronic_Arts_MAD
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/mem_internal.h"
 
 #include "avcodec.h"
 #include "blockdsp.h"
 #include "bytestream.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
@@ -50,7 +50,7 @@ 
 typedef struct MadContext {
     AVCodecContext *avctx;
     BlockDSPContext bdsp;
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
     AVFrame *last_frame;
     GetBitContext gb;
     void *bitstream_buf;
@@ -67,7 +67,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     s->avctx = avctx;
     avctx->pix_fmt = AV_PIX_FMT_YUV420P;
     ff_blockdsp_init(&s->bdsp);
-    ff_bswapdsp_init(&s->bbdsp);
+    av_bswapdsp_init(&s->bbdsp);
     ff_mpeg12_init_vlcs();
 
     s->last_frame = av_frame_alloc();
diff --git a/libavcodec/eatqi.c b/libavcodec/eatqi.c
index e4f12b3db2..b1475b16c4 100644
--- a/libavcodec/eatqi.c
+++ b/libavcodec/eatqi.c
@@ -26,11 +26,11 @@ 
  * @see http://wiki.multimedia.cx/index.php?title=Electronic_Arts_TQI
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/mem_internal.h"
 
 #include "avcodec.h"
 #include "blockdsp.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
@@ -43,7 +43,7 @@  typedef struct TqiContext {
     AVCodecContext *avctx;
     GetBitContext gb;
     BlockDSPContext bdsp;
-    BswapDSPContext bsdsp;
+    AVBSwapDSPContext bsdsp;
 
     void *bitstream_buf;
     unsigned int bitstream_buf_size;
@@ -60,7 +60,7 @@  static av_cold int tqi_decode_init(AVCodecContext *avctx)
     TqiContext *t = avctx->priv_data;
 
     ff_blockdsp_init(&t->bdsp);
-    ff_bswapdsp_init(&t->bsdsp);
+    av_bswapdsp_init(&t->bsdsp);
 
     avctx->framerate = (AVRational){ 15, 1 };
     avctx->pix_fmt = AV_PIX_FMT_YUV420P;
@@ -148,8 +148,8 @@  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.bswap32_buf(t->bitstream_buf, (const uint32_t *) 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/exr.c b/libavcodec/exr.c
index 6a0af96ce4..e22045a1a9 100644
--- a/libavcodec/exr.c
+++ b/libavcodec/exr.c
@@ -47,7 +47,7 @@ 
 #include "bytestream.h"
 
 #if HAVE_BIGENDIAN
-#include "bswapdsp.h"
+#include "libavutil/bswapdsp.h"
 #endif
 
 #include "codec_internal.h"
@@ -150,7 +150,7 @@  typedef struct EXRContext {
     ExrDSPContext dsp;
 
 #if HAVE_BIGENDIAN
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
 #endif
 
     enum ExrCompr compression;
@@ -2224,7 +2224,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     ff_exrdsp_init(&s->dsp);
 
 #if HAVE_BIGENDIAN
-    ff_bswapdsp_init(&s->bbdsp);
+    av_bswapdsp_init(&s->bbdsp);
 #endif
 
     trc_func = avpriv_get_trc_function_from_trc(s->apply_trc_type);
diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
index bca71b3780..1082910974 100644
--- a/libavcodec/flacenc.c
+++ b/libavcodec/flacenc.c
@@ -20,6 +20,7 @@ 
  */
 
 #include "libavutil/avassert.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/crc.h"
 #include "libavutil/intmath.h"
@@ -27,7 +28,6 @@ 
 #include "libavutil/opt.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "encode.h"
 #include "put_bits.h"
@@ -123,7 +123,7 @@  typedef struct FlacEncodeContext {
     struct AVMD5 *md5ctx;
     uint8_t *md5_buffer;
     unsigned int md5_buffer_size;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     FLACEncDSPContext flac_dsp;
 
     int flushed;
@@ -454,7 +454,7 @@  static av_cold int flac_encode_init(AVCodecContext *avctx)
     ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
                       s->options.max_prediction_order, FF_LPC_TYPE_LEVINSON);
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
     ff_flacencdsp_init(&s->flac_dsp);
 
     dprint_compression_options(s);
diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
index 4c4c46b602..33e24a5bfb 100644
--- a/libavcodec/fraps.c
+++ b/libavcodec/fraps.c
@@ -35,11 +35,11 @@ 
 
 #define CACHED_BITSTREAM_READER HAVE_FAST_64BIT
 #define UNCHECKED_BITSTREAM_READER 1
+#include "libavutil/bswapdsp.h"
 #include "avcodec.h"
 #include "get_bits.h"
 #include "huffman.h"
 #include "bytestream.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "thread.h"
 
@@ -51,7 +51,7 @@ 
  */
 typedef struct FrapsContext {
     AVCodecContext *avctx;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     uint8_t *tmpbuf;
     int tmpbuf_size;
 } FrapsContext;
@@ -69,7 +69,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     s->avctx  = avctx;
     s->tmpbuf = NULL;
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
 
     return 0;
 }
@@ -106,8 +106,8 @@  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.bswap32_buf((uint32_t *) s->tmpbuf,
+                        (const uint32_t *) 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..e9cef539b2 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -27,6 +27,7 @@ 
 
 #include "libavutil/attributes.h"
 #include "libavutil/avstring.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/common.h"
 #include "libavutil/display.h"
 #include "libavutil/film_grain_params.h"
@@ -37,7 +38,6 @@ 
 #include "libavutil/pixdesc.h"
 #include "libavutil/timecode.h"
 
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "cabac_functions.h"
 #include "codec_internal.h"
@@ -3527,7 +3527,7 @@  static av_cold int hevc_init_context(AVCodecContext *avctx)
     if (!s->md5_ctx)
         return AVERROR(ENOMEM);
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
 
     s->dovi_ctx.logctx = avctx;
     s->eos = 0;
diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
index 9d3f4adbb3..f73ff352d1 100644
--- a/libavcodec/hevcdec.h
+++ b/libavcodec/hevcdec.h
@@ -25,11 +25,11 @@ 
 
 #include <stdatomic.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/buffer.h"
 #include "libavutil/mem_internal.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "cabac.h"
 #include "dovi_rpu.h"
 #include "get_bits.h"
@@ -541,7 +541,7 @@  typedef struct HEVCContext {
     HEVCPredContext hpc;
     HEVCDSPContext hevcdsp;
     VideoDSPContext vdsp;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     H274FilmGrainDatabase h274db;
     int8_t *qp_y_tab;
     uint8_t *horizontal_bs;
diff --git a/libavcodec/huffyuvdec.c b/libavcodec/huffyuvdec.c
index 7d3515cc88..5d3c7a3828 100644
--- a/libavcodec/huffyuvdec.c
+++ b/libavcodec/huffyuvdec.c
@@ -35,13 +35,13 @@ 
 #include "config_components.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "get_bits.h"
 #include "huffyuv.h"
 #include "huffyuvdsp.h"
 #include "lossless_videodsp.h"
 #include "thread.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/pixdesc.h"
 
@@ -76,7 +76,7 @@  typedef struct HYuvDecContext {
     VLC vlc[8];                             //Y,U,V,A,YY,YU,YV,AA
     uint8_t *bitstream_buffer;
     unsigned int bitstream_buffer_size;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     HuffYUVDSPContext hdsp;
     LLVidDSPContext llviddsp;
 } HYuvDecContext;
@@ -340,7 +340,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
 
     s->flags = avctx->flags;
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
     ff_huffyuvdsp_init(&s->hdsp, avctx->pix_fmt);
     ff_llviddsp_init(&s->llviddsp);
     memset(s->vlc, 0, 4 * sizeof(VLC));
@@ -1239,8 +1239,8 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
     if (!s->bitstream_buffer)
         return AVERROR(ENOMEM);
 
-    s->bdsp.bswap_buf((uint32_t *) s->bitstream_buffer,
-                      (const uint32_t *) buf, buf_size / 4);
+    s->bdsp.bswap32_buf((uint32_t *) s->bitstream_buffer,
+                        (const uint32_t *) buf, buf_size / 4);
 
     if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0)
         return ret;
@@ -1282,8 +1282,8 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
                 return AVERROR_INVALIDDATA;
 
             y_offset = height - (slice + 1) * slice_height;
-            s->bdsp.bswap_buf((uint32_t *)s->bitstream_buffer,
-                              (const uint32_t *)(buf + slice_offset), slice_size / 4);
+            s->bdsp.bswap32_buf((uint32_t *)s->bitstream_buffer,
+                                (const uint32_t *)(buf + slice_offset), slice_size / 4);
         } else {
             y_offset = 0;
             slice_offset = 0;
diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c
index db274e37ad..6230e107a3 100644
--- a/libavcodec/huffyuvenc.c
+++ b/libavcodec/huffyuvenc.c
@@ -31,7 +31,6 @@ 
 #include "config_components.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "encode.h"
 #include "huffyuv.h"
@@ -39,6 +38,7 @@ 
 #include "huffyuvencdsp.h"
 #include "lossless_videoencdsp.h"
 #include "put_bits.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
@@ -68,7 +68,7 @@  typedef struct HYuvEncContext {
     uint64_t stats[4][MAX_VLC_N];
     uint8_t len[4][MAX_VLC_N];
     uint32_t bits[4][MAX_VLC_N];
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     HuffYUVEncDSPContext hencdsp;
     LLVidEncDSPContext llvidencdsp;
     int non_determ; // non-deterministic, multi-threaded encoder allowed
@@ -247,7 +247,7 @@  static av_cold int encode_init(AVCodecContext *avctx)
     s->avctx = avctx;
     s->flags = avctx->flags;
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
     ff_huffyuvencdsp_init(&s->hencdsp, avctx->pix_fmt);
     ff_llvidencdsp_init(&s->llvidencdsp);
 
@@ -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.bswap32_buf((uint32_t *) pkt->data, (uint32_t *) pkt->data, size);
     }
 
     s->picture_number++;
diff --git a/libavcodec/imc.c b/libavcodec/imc.c
index 174332de4d..185da01323 100644
--- a/libavcodec/imc.c
+++ b/libavcodec/imc.c
@@ -34,6 +34,7 @@ 
 #include <math.h>
 #include <stddef.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/ffmath.h"
 #include "libavutil/float_dsp.h"
@@ -43,7 +44,6 @@ 
 #include "libavutil/tx.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
@@ -92,7 +92,7 @@  typedef struct IMCContext {
     GetBitContext gb;
 
     AVFloatDSPContext *fdsp;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     AVTXContext *mdct;
     av_tx_fn mdct_fn;
     float *out_samples;
@@ -243,7 +243,7 @@  static av_cold int imc_decode_init(AVCodecContext *avctx)
     if (ret < 0)
         return ret;
 
-    ff_bswapdsp_init(&q->bdsp);
+    av_bswapdsp_init(&q->bdsp);
 
     avctx->sample_fmt     = AV_SAMPLE_FMT_FLTP;
 
diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c
index ccec5dff43..ae391b343b 100644
--- a/libavcodec/imm4.c
+++ b/libavcodec/imm4.c
@@ -23,11 +23,11 @@ 
 #include <stddef.h>
 #include <string.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/mem_internal.h"
 #include "libavutil/thread.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "copy_block.h"
@@ -40,7 +40,7 @@ 
 #define BLOCK_VLC_BITS  12
 
 typedef struct IMM4Context {
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     GetBitContext  gb;
 
     AVFrame *prev_frame;
@@ -368,9 +368,9 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
     if (!s->bitstream)
         return AVERROR(ENOMEM);
 
-    s->bdsp.bswap_buf((uint32_t *)s->bitstream,
-                      (uint32_t *)avpkt->data,
-                      (avpkt->size + 3) >> 2);
+    s->bdsp.bswap32_buf((uint32_t *)s->bitstream,
+                        (uint32_t *)avpkt->data,
+                        (avpkt->size + 3) >> 2);
 
     if ((ret = init_get_bits8(gb, s->bitstream, FFALIGN(avpkt->size, 4))) < 0)
         return ret;
@@ -495,7 +495,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     static AVOnce init_static_once = AV_ONCE_INIT;
     IMM4Context *s = avctx->priv_data;
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
     ff_idctdsp_init(&s->idsp, avctx);
 
     s->prev_frame = av_frame_alloc();
diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
index 640b671a0f..269a3afdfe 100644
--- a/libavcodec/mdec.c
+++ b/libavcodec/mdec.c
@@ -27,11 +27,11 @@ 
  * This is very similar to intra-only MPEG-1.
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/mem_internal.h"
 
 #include "avcodec.h"
 #include "blockdsp.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "idctdsp.h"
 #include "mpeg12data.h"
@@ -41,7 +41,7 @@ 
 typedef struct MDECContext {
     AVCodecContext *avctx;
     BlockDSPContext bdsp;
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
     IDCTDSPContext idsp;
     GetBitContext gb;
     uint8_t permutated_scantable[64];
@@ -219,7 +219,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     a->avctx           = avctx;
 
     ff_blockdsp_init(&a->bdsp);
-    ff_bswapdsp_init(&a->bbdsp);
+    av_bswapdsp_init(&a->bbdsp);
     ff_idctdsp_init(&a->idsp, avctx);
     ff_mpeg12_init_vlcs();
     ff_permute_scantable(a->permutated_scantable, ff_zigzag_direct,
diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
index 891471b30e..333085f8f3 100644
--- a/libavcodec/mimic.c
+++ b/libavcodec/mimic.c
@@ -21,6 +21,7 @@ 
 
 #include <stdint.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/mem_internal.h"
 #include "libavutil/thread.h"
 
@@ -30,7 +31,6 @@ 
 #include "decode.h"
 #include "get_bits.h"
 #include "bytestream.h"
-#include "bswapdsp.h"
 #include "hpeldsp.h"
 #include "idctdsp.h"
 #include "thread.h"
@@ -58,7 +58,7 @@  typedef struct MimicContext {
     GetBitContext   gb;
     uint8_t         permutated_scantable[64];
     BlockDSPContext bdsp;
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
     HpelDSPContext  hdsp;
     IDCTDSPContext  idsp;
 
@@ -134,7 +134,7 @@  static av_cold int mimic_decode_init(AVCodecContext *avctx)
     ctx->cur_index  = 15;
 
     ff_blockdsp_init(&ctx->bdsp);
-    ff_bswapdsp_init(&ctx->bbdsp);
+    av_bswapdsp_init(&ctx->bbdsp);
     ff_hpeldsp_init(&ctx->hdsp, avctx->flags);
     ff_idctdsp_init(&ctx->idsp, avctx);
     ff_permute_scantable(ctx->permutated_scantable, col_zag, ctx->idsp.idct_permutation);
@@ -411,9 +411,9 @@  static int mimic_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     if (!ctx->swap_buf)
         return AVERROR(ENOMEM);
 
-    ctx->bbdsp.bswap_buf(ctx->swap_buf,
-                         (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
-                         swap_buf_size >> 2);
+    ctx->bbdsp.bswap32_buf(ctx->swap_buf,
+                           (const uint32_t *) (buf + MIMIC_HEADER_SIZE),
+                           swap_buf_size >> 2);
     init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3);
 
     res = decode(ctx, quality, num_coeffs, !is_pframe);
diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c
index c3b2383dbc..79c6953ee4 100644
--- a/libavcodec/mobiclip.c
+++ b/libavcodec/mobiclip.c
@@ -24,10 +24,10 @@ 
 #include <inttypes.h>
 
 #include "libavutil/avassert.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/thread.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
@@ -271,7 +271,7 @@  typedef struct MobiClipContext {
     MotionXY *motion;
     int     motion_size;
 
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
 } MobiClipContext;
 
 static VLC rl_vlc[2];
@@ -310,7 +310,7 @@  static av_cold int mobiclip_init(AVCodecContext *avctx)
         return AVERROR_INVALIDDATA;
     }
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
 
     avctx->pix_fmt = AV_PIX_FMT_YUV420P;
 
diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c
index 4141c5a495..04a56a379c 100644
--- a/libavcodec/motionpixels.c
+++ b/libavcodec/motionpixels.c
@@ -19,13 +19,13 @@ 
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/thread.h"
 
 #include "config.h"
 
 #include "avcodec.h"
 #include "get_bits.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 
@@ -41,7 +41,7 @@  typedef struct HuffCode {
 typedef struct MotionPixelsContext {
     AVCodecContext *avctx;
     AVFrame *frame;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     uint8_t *changes_map;
     int offset_bits_len;
     int codes_count, current_codes_count;
@@ -80,7 +80,7 @@  static av_cold int mp_decode_init(AVCodecContext *avctx)
     }
 
     mp->avctx = avctx;
-    ff_bswapdsp_init(&mp->bdsp);
+    av_bswapdsp_init(&mp->bdsp);
     mp->changes_map = av_calloc(avctx->width, h4);
     mp->offset_bits_len = av_log2(avctx->width * avctx->height) + 1;
     mp->vpt = av_calloc(avctx->height, sizeof(*mp->vpt));
@@ -294,8 +294,8 @@  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.bswap32_buf((uint32_t *) mp->bswapbuf, (const uint32_t *) 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/mpc.h b/libavcodec/mpc.h
index cef8db4899..c736a84088 100644
--- a/libavcodec/mpc.h
+++ b/libavcodec/mpc.h
@@ -31,10 +31,10 @@ 
 
 #include <stdint.h>
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/lfg.h"
 #include "libavutil/mem_internal.h"
 
-#include "bswapdsp.h"
 #include "mpegaudio.h"
 #include "mpegaudiodsp.h"
 
@@ -52,7 +52,7 @@  typedef struct Band {
 }Band;
 
 typedef struct MPCContext {
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     MPADSPContext mpadsp;
     int IS, MSS, gapless;
     int lastframelen;
diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
index d2745366c2..9b7af9a01f 100644
--- a/libavcodec/mpc7.c
+++ b/libavcodec/mpc7.c
@@ -91,9 +91,9 @@  static av_cold int mpc7_decode_init(AVCodecContext * avctx)
     }
     memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
     av_lfg_init(&c->rnd, 0xDEADBEEF);
-    ff_bswapdsp_init(&c->bdsp);
+    av_bswapdsp_init(&c->bdsp);
     ff_mpadsp_init(&c->mpadsp);
-    c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4);
+    c->bdsp.bswap32_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4);
     init_get_bits(&gb, buf, 128);
 
     c->IS = get_bits1(&gb);
@@ -211,8 +211,8 @@  static int mpc7_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     av_fast_padded_malloc(&c->bits, &c->buf_size, buf_size);
     if (!c->bits)
         return AVERROR(ENOMEM);
-    c->bdsp.bswap_buf((uint32_t *) c->bits, (const uint32_t *) buf,
-                      buf_size >> 2);
+    c->bdsp.bswap32_buf((uint32_t *) c->bits, (const uint32_t *) buf,
+                        buf_size >> 2);
     if ((ret = init_get_bits8(&gb, c->bits, buf_size)) < 0)
         return ret;
     skip_bits_long(&gb, skip);
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index 72cdd13916..0fc25cac04 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -25,13 +25,13 @@ 
  */
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
 #include "internal.h"
 #include "raw.h"
 #include "libavutil/avassert.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/buffer.h"
 #include "libavutil/common.h"
 #include "libavutil/intreadwrite.h"
@@ -52,7 +52,7 @@  typedef struct RawVideoContext {
     int is_lt_16bpp; // 16bpp pixfmt and bits_per_coded_sample < 16
     int tff;
 
-    BswapDSPContext bbdsp;
+    AVBSwapDSPContext bbdsp;
     void *bitstream_buf;
     unsigned int bitstream_buf_size;
 } RawVideoContext;
@@ -73,7 +73,7 @@  static av_cold int raw_init_decoder(AVCodecContext *avctx)
     RawVideoContext *context = avctx->priv_data;
     const AVPixFmtDescriptor *desc;
 
-    ff_bswapdsp_init(&context->bbdsp);
+    av_bswapdsp_init(&context->bbdsp);
 
     if (   avctx->codec_tag == MKTAG('r','a','w',' ')
         || avctx->codec_tag == MKTAG('N','O','1','6'))
@@ -324,7 +324,7 @@  static int raw_decode(AVCodecContext *avctx, AVFrame *frame,
             if (swap == 16)
                 context->bbdsp.bswap16_buf(context->bitstream_buf, (const uint16_t*)buf, buf_size / 2);
             else if (swap == 32)
-                context->bbdsp.bswap_buf(context->bitstream_buf, (const uint32_t*)buf, buf_size / 4);
+                context->bbdsp.bswap32_buf(context->bitstream_buf, (const uint32_t*)buf, buf_size / 4);
             else
                 return AVERROR_INVALIDDATA;
             buf = context->bitstream_buf;
diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index 965942f4df..212ab3dc13 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -5,9 +5,6 @@  RVV-OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_rvv.o
 OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_init.o \
                            riscv/audiodsp_rvf.o
 RVV-OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_rvv.o
-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_init.o \
-                           riscv/bswapdsp_rvb.o
-RVV-OBJS-$(CONFIG_BSWAPDSP) += riscv/bswapdsp_rvv.o
 OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_init.o
 RVV-OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_rvv.o
 OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_init.o
diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
index 1b2abd76b1..6385821ca1 100644
--- a/libavcodec/shorten.c
+++ b/libavcodec/shorten.c
@@ -25,9 +25,10 @@ 
  * @author Jeff Muizelaar
  */
 
+#include "libavutil/bswapdsp.h"
+
 #include <limits.h>
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "codec_internal.h"
 #include "decode.h"
@@ -112,7 +113,7 @@  typedef struct ShortenContext {
     int got_header;
     int got_quit_command;
     int swap;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
 } ShortenContext;
 
 static av_cold int shorten_decode_init(AVCodecContext *avctx)
@@ -120,7 +121,7 @@  static av_cold int shorten_decode_init(AVCodecContext *avctx)
     ShortenContext *s = avctx->priv_data;
     s->avctx          = avctx;
 
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
 
     return 0;
 }
diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c
index b168b9cda1..7b6db4d9d5 100644
--- a/libavcodec/truemotion2.c
+++ b/libavcodec/truemotion2.c
@@ -26,8 +26,9 @@ 
 
 #include <inttypes.h>
 
+#include "libavutil/bswapdsp.h"
+
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "codec_internal.h"
 #include "decode.h"
@@ -65,7 +66,7 @@  typedef struct TM2Context {
 
     GetBitContext gb;
     int error;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
 
     uint8_t *buffer;
     int buffer_size;
@@ -907,8 +908,8 @@  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.bswap32_buf((uint32_t *) l->buffer, (const uint32_t *) buf,
+                        buf_size >> 2);
 
     if ((ret = tm2_read_header(l, l->buffer)) < 0) {
         return ret;
@@ -960,7 +961,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     if (!l->pic)
         return AVERROR(ENOMEM);
 
-    ff_bswapdsp_init(&l->bdsp);
+    av_bswapdsp_init(&l->bdsp);
 
     l->last  = av_malloc_array(w, 2 * sizeof(*l->last));
     if (!l->last)
diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c
index 454121cc75..06a76fe0db 100644
--- a/libavcodec/truespeech.c
+++ b/libavcodec/truespeech.c
@@ -19,11 +19,11 @@ 
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/mem_internal.h"
 
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
@@ -38,7 +38,7 @@ 
  * TrueSpeech decoder context
  */
 typedef struct TSContext {
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     /* input data */
     DECLARE_ALIGNED(16, uint8_t, buffer)[32];
     int16_t vector[8];  ///< input vector: 5/5/4/4/4/3/3/3
@@ -73,7 +73,7 @@  static av_cold int truespeech_decode_init(AVCodecContext * avctx)
     avctx->ch_layout      = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO;
     avctx->sample_fmt     = AV_SAMPLE_FMT_S16;
 
-    ff_bswapdsp_init(&c->bdsp);
+    av_bswapdsp_init(&c->bdsp);
 
     return 0;
 }
@@ -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.bswap32_buf((uint32_t *) dec->buffer, (const uint32_t *) input, 8);
     init_get_bits(&gb, dec->buffer, 32 * 8);
 
     dec->vector[7] = ts_codebook[7][get_bits(&gb, 3)];
diff --git a/libavcodec/utvideo.h b/libavcodec/utvideo.h
index 9da9329ff3..2ccd088c47 100644
--- a/libavcodec/utvideo.h
+++ b/libavcodec/utvideo.h
@@ -27,9 +27,9 @@ 
  * Common Ut Video header
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/common.h"
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "utvideodsp.h"
 #include "lossless_videodsp.h"
 #include "lossless_videoencdsp.h"
@@ -65,7 +65,7 @@  typedef struct UtvideoContext {
     const AVClass *class;
     AVCodecContext *avctx;
     UTVideoDSPContext utdsp;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
     LLVidDSPContext llviddsp;
     LLVidEncDSPContext llvidencdsp;
 
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index 83120d1b22..dcf09b56c6 100644
--- a/libavcodec/utvideodec.c
+++ b/libavcodec/utvideodec.c
@@ -30,10 +30,10 @@ 
 #define CACHED_BITSTREAM_READER !ARCH_X86_32
 #define UNCHECKED_BITSTREAM_READER 1
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/pixdesc.h"
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "codec_internal.h"
 #include "get_bits.h"
@@ -150,9 +150,9 @@  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),
-                          (slice_data_end - slice_data_start + 3) >> 2);
+        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
+                            (uint32_t *)(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);
 
         prev = 0x200;
@@ -311,9 +311,9 @@  static int decode_plane(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),
-                          (slice_data_end - slice_data_start + 3) >> 2);
+        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
+                            (uint32_t *)(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);
 
         prev = 0x80;
@@ -887,7 +887,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     c->avctx = avctx;
 
     ff_utvideodsp_init(&c->utdsp);
-    ff_bswapdsp_init(&c->bdsp);
+    av_bswapdsp_init(&c->bdsp);
     ff_llviddsp_init(&c->llviddsp);
 
     c->slice_bits_size = 0;
diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c
index d4388da8ba..de9ea8c135 100644
--- a/libavcodec/utvideoenc.c
+++ b/libavcodec/utvideoenc.c
@@ -24,6 +24,7 @@ 
  * Ut Video encoder
  */
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
@@ -31,7 +32,6 @@ 
 #include "avcodec.h"
 #include "codec_internal.h"
 #include "encode.h"
-#include "bswapdsp.h"
 #include "bytestream.h"
 #include "put_bits.h"
 #include "mathops.h"
@@ -132,7 +132,7 @@  static av_cold int utvideo_encode_init(AVCodecContext *avctx)
         return AVERROR_INVALIDDATA;
     }
 
-    ff_bswapdsp_init(&c->bdsp);
+    av_bswapdsp_init(&c->bdsp);
     ff_llvidencdsp_init(&c->llvidencdsp);
 
     if (c->frame_pred == PRED_GRADIENT) {
@@ -490,9 +490,9 @@  static int encode_plane(AVCodecContext *avctx, const uint8_t *src,
         slice_len = offset - slice_len;
 
         /* Byteswap the written huffman codes */
-        c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
-                          (uint32_t *) c->slice_bits,
-                          slice_len >> 2);
+        c->bdsp.bswap32_buf((uint32_t *) c->slice_bits,
+                            (uint32_t *) c->slice_bits,
+                            slice_len >> 2);
 
         /* Write the offset to the stream */
         bytestream2_put_le32(pb, offset);
diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
index 6f62878081..ad0f54be3c 100644
--- a/libavcodec/x86/Makefile
+++ b/libavcodec/x86/Makefile
@@ -4,7 +4,6 @@  OBJS                                   += x86/constants.o               \
 OBJS-$(CONFIG_AC3DSP)                  += x86/ac3dsp_init.o
 OBJS-$(CONFIG_AUDIODSP)                += x86/audiodsp_init.o
 OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp_init.o
-OBJS-$(CONFIG_BSWAPDSP)                += x86/bswapdsp_init.o
 OBJS-$(CONFIG_DCT)                     += x86/dct_init.o
 OBJS-$(CONFIG_DIRAC_DECODER)           += x86/diracdsp_init.o           \
                                           x86/dirac_dwt_init.o
@@ -98,7 +97,6 @@  X86ASM-OBJS-$(CONFIG_AC3DSP)           += x86/ac3dsp.o                  \
                                           x86/ac3dsp_downmix.o
 X86ASM-OBJS-$(CONFIG_AUDIODSP)         += x86/audiodsp.o
 X86ASM-OBJS-$(CONFIG_BLOCKDSP)         += x86/blockdsp.o
-X86ASM-OBJS-$(CONFIG_BSWAPDSP)         += x86/bswapdsp.o
 X86ASM-OBJS-$(CONFIG_DCT)              += x86/dct32.o
 X86ASM-OBJS-$(CONFIG_FFT)              += x86/fft.o
 X86ASM-OBJS-$(CONFIG_FMTCONVERT)       += x86/fmtconvert.o
diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c
index 29c10f05da..7a90e2e5f1 100644
--- a/libavcodec/ylc.c
+++ b/libavcodec/ylc.c
@@ -22,11 +22,11 @@ 
 
 #define YLC_VLC_BITS 10
 
+#include "libavutil/bswapdsp.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/mem.h"
 #include "libavutil/pixfmt.h"
 #include "avcodec.h"
-#include "bswapdsp.h"
 #include "codec_internal.h"
 #include "get_bits.h"
 #include "thread.h"
@@ -37,7 +37,7 @@  typedef struct YLCContext {
     uint32_t table[256];
     uint8_t *buffer;
     int buffer_size;
-    BswapDSPContext bdsp;
+    AVBSwapDSPContext bdsp;
 } YLCContext;
 
 static av_cold int decode_init(AVCodecContext *avctx)
@@ -45,7 +45,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     YLCContext *s = avctx->priv_data;
 
     avctx->pix_fmt = AV_PIX_FMT_YUYV422;
-    ff_bswapdsp_init(&s->bdsp);
+    av_bswapdsp_init(&s->bdsp);
 
     return 0;
 }
@@ -311,9 +311,9 @@  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,
-                      (boffset - toffset + 3) >> 2);
+    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
+                        (uint32_t *) s->buffer,
+                        (boffset - toffset + 3) >> 2);
     if ((ret = init_get_bits8(&gb, s->buffer, boffset - toffset)) < 0)
         return ret;
 
@@ -332,9 +332,9 @@  static int decode_frame(AVCodecContext *avctx, AVFrame *p,
 
     memcpy(s->buffer, avpkt->data + boffset, avpkt->size - boffset);
     memset(s->buffer + avpkt->size - boffset, 0, AV_INPUT_BUFFER_PADDING_SIZE);
-    s->bdsp.bswap_buf((uint32_t *) s->buffer,
-                      (uint32_t *) s->buffer,
-                      (avpkt->size - boffset) >> 2);
+    s->bdsp.bswap32_buf((uint32_t *) s->buffer,
+                        (uint32_t *) s->buffer,
+                        (avpkt->size - boffset) >> 2);
     if ((ret = init_get_bits8(&gb, s->buffer, avpkt->size - boffset)) < 0)
         return ret;
 
diff --git a/libavutil/Makefile b/libavutil/Makefile
index 3d9c07aea8..bff5dbc7d9 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -13,6 +13,7 @@  HEADERS = adler32.h                                                     \
           blowfish.h                                                    \
           bprint.h                                                      \
           bswap.h                                                       \
+          bswapdsp.h                                                    \
           buffer.h                                                      \
           cast5.h                                                       \
           camellia.h                                                    \
@@ -108,6 +109,7 @@  OBJS = adler32.o                                                        \
        base64.o                                                         \
        blowfish.o                                                       \
        bprint.o                                                         \
+       bswapdsp.o                                                       \
        buffer.o                                                         \
        cast5.o                                                          \
        camellia.o                                                       \
diff --git a/libavcodec/bswapdsp.c b/libavutil/bswapdsp.c
similarity index 80%
rename from libavcodec/bswapdsp.c
rename to libavutil/bswapdsp.c
index f0ea2b55c5..e85cdfe5d7 100644
--- a/libavcodec/bswapdsp.c
+++ b/libavutil/bswapdsp.c
@@ -18,15 +18,18 @@ 
 
 #include <stdint.h>
 
-#include "libavutil/attributes.h"
-#include "libavutil/bswap.h"
+#include "attributes.h"
+#include "bswap.h"
 #include "bswapdsp.h"
 
-static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
+void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c);
+void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
+
+static void bswap32_buf(uint32_t *dst, const uint32_t *src, int len)
 {
     int i;
 
-    for (i = 0; i + 8 <= w; i += 8) {
+    for (i = 0; i + 8 <= len; 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]);
@@ -36,7 +39,7 @@  static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
         dst[i + 6] = av_bswap32(src[i + 6]);
         dst[i + 7] = av_bswap32(src[i + 7]);
     }
-    for (; i < w; i++)
+    for (; i < len; i++)
         dst[i + 0] = av_bswap32(src[i + 0]);
 }
 
@@ -46,9 +49,9 @@  static void bswap16_buf(uint16_t *dst, const uint16_t *src, int len)
         *dst++ = av_bswap16(*src++);
 }
 
-av_cold void ff_bswapdsp_init(BswapDSPContext *c)
+av_cold void av_bswapdsp_init(AVBSwapDSPContext *c)
 {
-    c->bswap_buf   = bswap_buf;
+    c->bswap32_buf = bswap32_buf;
     c->bswap16_buf = bswap16_buf;
 
 #if ARCH_RISCV
diff --git a/libavcodec/bswapdsp.h b/libavutil/bswapdsp.h
similarity index 71%
rename from libavcodec/bswapdsp.h
rename to libavutil/bswapdsp.h
index 6f4db66115..b540560d6a 100644
--- a/libavcodec/bswapdsp.h
+++ b/libavutil/bswapdsp.h
@@ -16,18 +16,16 @@ 
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_BSWAPDSP_H
-#define AVCODEC_BSWAPDSP_H
+#ifndef AVUTIL_BSWAPDSP_H
+#define AVUTIL_BSWAPDSP_H
 
 #include <stdint.h>
 
-typedef struct BswapDSPContext {
-    void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
+typedef struct AVBSwapDSPContext {
+    void (*bswap32_buf)(uint32_t *dst, const uint32_t *src, int len);
     void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
-} BswapDSPContext;
+} AVBSwapDSPContext;
 
-void ff_bswapdsp_init(BswapDSPContext *c);
-void ff_bswapdsp_init_riscv(BswapDSPContext *c);
-void ff_bswapdsp_init_x86(BswapDSPContext *c);
+void av_bswapdsp_init(AVBSwapDSPContext *c);
 
-#endif /* AVCODEC_BSWAPDSP_H */
+#endif /* AVUTIL_BSWAPDSP_H */
diff --git a/libavutil/riscv/Makefile b/libavutil/riscv/Makefile
index 1597154ba5..525538f6b6 100644
--- a/libavutil/riscv/Makefile
+++ b/libavutil/riscv/Makefile
@@ -1,5 +1,8 @@ 
-OBJS +=     riscv/float_dsp_init.o \
+OBJS +=     riscv/bswapdsp_init.o \
+            riscv/bswapdsp_rvb.o \
+            riscv/float_dsp_init.o \
             riscv/fixed_dsp_init.o \
             riscv/cpu.o
-RVV-OBJS += riscv/float_dsp_rvv.o \
+RVV-OBJS += riscv/bswapdsp_rvv.o  \
+            riscv/float_dsp_rvv.o \
             riscv/fixed_dsp_rvv.o
diff --git a/libavcodec/riscv/bswapdsp_init.c b/libavutil/riscv/bswapdsp_init.c
similarity index 85%
rename from libavcodec/riscv/bswapdsp_init.c
rename to libavutil/riscv/bswapdsp_init.c
index abe84ec1f7..362d574a27 100644
--- a/libavcodec/riscv/bswapdsp_init.c
+++ b/libavutil/riscv/bswapdsp_init.c
@@ -22,24 +22,25 @@ 
 
 #include "config.h"
 #include "libavutil/attributes.h"
+#include "libavutil/bswapdsp.h"
 #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_bswapdsp_init_riscv(AVBSwapDSPContext *c);
 
-av_cold void ff_bswapdsp_init_riscv(BswapDSPContext *c)
+av_cold void ff_bswapdsp_init_riscv(AVBSwapDSPContext *c)
 {
     int cpu_flags = av_get_cpu_flags();
 
 #if (__riscv_xlen >= 64)
     if (cpu_flags & AV_CPU_FLAG_RVB_BASIC)
-        c->bswap_buf = ff_bswap32_buf_rvb;
+        c->bswap32_buf = ff_bswap32_buf_rvb;
 #endif
 #if HAVE_RVV
     if (cpu_flags & AV_CPU_FLAG_RVV_I32) {
-        c->bswap_buf = ff_bswap32_buf_rvv;
+        c->bswap32_buf = ff_bswap32_buf_rvv;
         c->bswap16_buf = ff_bswap16_buf_rvv;
     }
 #endif
diff --git a/libavcodec/riscv/bswapdsp_rvb.S b/libavutil/riscv/bswapdsp_rvb.S
similarity index 100%
rename from libavcodec/riscv/bswapdsp_rvb.S
rename to libavutil/riscv/bswapdsp_rvb.S
diff --git a/libavcodec/riscv/bswapdsp_rvv.S b/libavutil/riscv/bswapdsp_rvv.S
similarity index 100%
rename from libavcodec/riscv/bswapdsp_rvv.S
rename to libavutil/riscv/bswapdsp_rvv.S
diff --git a/libavutil/version.h b/libavutil/version.h
index 3b616ea489..60f96af5df 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@ 
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  57
-#define LIBAVUTIL_VERSION_MINOR  43
+#define LIBAVUTIL_VERSION_MINOR  44
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libavutil/x86/Makefile b/libavutil/x86/Makefile
index d66839e35d..40bac784d1 100644
--- a/libavutil/x86/Makefile
+++ b/libavutil/x86/Makefile
@@ -4,14 +4,16 @@  OBJS += x86/cpu.o                                                       \
         x86/imgutils_init.o                                             \
         x86/lls_init.o                                                  \
 
-OBJS-$(HAVE_X86ASM) += x86/tx_float_init.o                              \
+OBJS-$(HAVE_X86ASM) += x86/bswapdsp_init.o                              \
+                       x86/tx_float_init.o
 
 OBJS-$(CONFIG_PIXELUTILS) += x86/pixelutils_init.o                      \
 
 EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) = x86/emms.o
 
-X86ASM-OBJS += x86/cpuid.o                                              \
-             $(EMMS_OBJS__yes_)                                      \
+X86ASM-OBJS += x86/bswapdsp.o                                           \
+             x86/cpuid.o                                                \
+             $(EMMS_OBJS__yes_)                                         \
              x86/fixed_dsp.o                                            \
              x86/float_dsp.o                                            \
              x86/imgutils.o                                             \
diff --git a/libavcodec/x86/bswapdsp.asm b/libavutil/x86/bswapdsp.asm
similarity index 97%
rename from libavcodec/x86/bswapdsp.asm
rename to libavutil/x86/bswapdsp.asm
index 31c6c48a21..c3bb90c2be 100644
--- a/libavcodec/x86/bswapdsp.asm
+++ b/libavutil/x86/bswapdsp.asm
@@ -26,8 +26,6 @@ 
 SECTION_RODATA
 pb_bswap32: db 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
 
-cextern pb_80
-
 SECTION .text
 
 ; %1 = aligned/unaligned
@@ -99,7 +97,7 @@  SECTION .text
     add      r0, 16
 %endmacro
 
-; void ff_bswap_buf(uint32_t *dst, const uint32_t *src, int w);
+; void ff_bswap32_buf(uint32_t *dst, const uint32_t *src, int len);
 %macro BSWAP32_BUF 0
 %if cpuflag(ssse3)||cpuflag(avx2)
 cglobal bswap32_buf, 3,4,3
diff --git a/libavcodec/x86/bswapdsp_init.c b/libavutil/x86/bswapdsp_init.c
similarity index 80%
rename from libavcodec/x86/bswapdsp_init.c
rename to libavutil/x86/bswapdsp_init.c
index 877bab1a2c..3694e9208c 100644
--- a/libavcodec/x86/bswapdsp_init.c
+++ b/libavutil/x86/bswapdsp_init.c
@@ -19,22 +19,23 @@ 
 #include <stdint.h>
 
 #include "libavutil/attributes.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/cpu.h"
 #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 uint32_t *src, int len);
+void ff_bswap32_buf_ssse3(uint32_t *dst, const uint32_t *src, int len);
+void ff_bswap32_buf_avx2(uint32_t *dst, const uint32_t *src, int len);
+void ff_bswapdsp_init_x86(AVBSwapDSPContext *c);
 
-av_cold void ff_bswapdsp_init_x86(BswapDSPContext *c)
+av_cold void ff_bswapdsp_init_x86(AVBSwapDSPContext *c)
 {
     int cpu_flags = av_get_cpu_flags();
 
     if (EXTERNAL_SSE2(cpu_flags))
-        c->bswap_buf = ff_bswap32_buf_sse2;
+        c->bswap32_buf = ff_bswap32_buf_sse2;
     if (EXTERNAL_SSSE3(cpu_flags))
-        c->bswap_buf = ff_bswap32_buf_ssse3;
+        c->bswap32_buf = ff_bswap32_buf_ssse3;
     if (EXTERNAL_AVX2_FAST(cpu_flags))
-        c->bswap_buf = ff_bswap32_buf_avx2;
+        c->bswap32_buf = ff_bswap32_buf_avx2;
 }
diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
index a6f06c7007..1bfaea0e9b 100644
--- a/tests/checkasm/Makefile
+++ b/tests/checkasm/Makefile
@@ -2,7 +2,6 @@ 
 # subsystems
 AVCODECOBJS-$(CONFIG_AUDIODSP)          += audiodsp.o
 AVCODECOBJS-$(CONFIG_BLOCKDSP)          += blockdsp.o
-AVCODECOBJS-$(CONFIG_BSWAPDSP)          += bswapdsp.o
 AVCODECOBJS-$(CONFIG_FMTCONVERT)        += fmtconvert.o
 AVCODECOBJS-$(CONFIG_G722DSP)           += g722dsp.o
 AVCODECOBJS-$(CONFIG_H264DSP)           += h264dsp.o
@@ -59,6 +58,7 @@  CHECKASMOBJS-$(CONFIG_SWSCALE)  += $(SWSCALEOBJS)
 AVUTILOBJS                              += av_tx.o
 AVUTILOBJS                              += fixed_dsp.o
 AVUTILOBJS                              += float_dsp.o
+AVUTILOBJS                              += bswapdsp.o
 
 CHECKASMOBJS-$(CONFIG_AVUTIL)  += $(AVUTILOBJS)
 
diff --git a/tests/checkasm/bswapdsp.c b/tests/checkasm/bswapdsp.c
index d789e90de3..f8dc50be33 100644
--- a/tests/checkasm/bswapdsp.c
+++ b/tests/checkasm/bswapdsp.c
@@ -20,7 +20,7 @@ 
 
 #include <string.h>
 #include "checkasm.h"
-#include "libavcodec/bswapdsp.h"
+#include "libavutil/bswapdsp.h"
 #include "libavutil/common.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
@@ -63,11 +63,11 @@  void checkasm_check_bswapdsp(void)
     LOCAL_ALIGNED_16(uint8_t, src1, [BUF_SIZE]);
     LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]);
     LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]);
-    BswapDSPContext h;
+    AVBSwapDSPContext h;
 
-    ff_bswapdsp_init(&h);
+    av_bswapdsp_init(&h);
 
-    if (check_func(h.bswap_buf, "bswap_buf"))
+    if (check_func(h.bswap32_buf, "bswap32_buf"))
         check_bswap(uint32_t);
 
     if (check_func(h.bswap16_buf, "bswap16_buf"))
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index e96d84a7da..32657b6c2d 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -87,9 +87,6 @@  static const struct {
     #if CONFIG_BLOCKDSP
         { "blockdsp", checkasm_check_blockdsp },
     #endif
-    #if CONFIG_BSWAPDSP
-        { "bswapdsp", checkasm_check_bswapdsp },
-    #endif
     #if CONFIG_DCA_DECODER
         { "synth_filter", checkasm_check_synth_filter },
     #endif
@@ -207,6 +204,7 @@  static const struct {
     { "sw_scale", checkasm_check_sw_scale },
 #endif
 #if CONFIG_AVUTIL
+        { "bswapdsp", checkasm_check_bswapdsp },
         { "fixed_dsp", checkasm_check_fixed_dsp },
         { "float_dsp", checkasm_check_float_dsp },
         { "av_tx",     checkasm_check_av_tx },