mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
dsputil: Split bswap*_buf() off into a separate context
This commit is contained in:
parent
7b9ef8d701
commit
c67b449beb
49
configure
vendored
49
configure
vendored
@ -1531,6 +1531,7 @@ CONFIG_EXTRA="
|
||||
audio_frame_queue
|
||||
audiodsp
|
||||
blockdsp
|
||||
bswapdsp
|
||||
cabac
|
||||
dsputil
|
||||
gcrypt
|
||||
@ -1716,20 +1717,20 @@ mpegvideoenc_select="dsputil mpegvideo qpeldsp"
|
||||
aac_decoder_select="mdct sinewin"
|
||||
aac_encoder_select="audio_frame_queue mdct sinewin"
|
||||
aac_latm_decoder_select="aac_decoder aac_latm_parser"
|
||||
ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
|
||||
ac3_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
|
||||
ac3_encoder_select="ac3dsp audiodsp dsputil mdct"
|
||||
ac3_fixed_encoder_select="ac3dsp audiodsp dsputil mdct"
|
||||
aic_decoder_select="dsputil golomb"
|
||||
alac_encoder_select="lpc"
|
||||
als_decoder_select="dsputil"
|
||||
als_decoder_select="bswapdsp"
|
||||
amrnb_decoder_select="lsp"
|
||||
amrwb_decoder_select="lsp"
|
||||
amv_decoder_select="sp5x_decoder"
|
||||
ape_decoder_select="dsputil"
|
||||
asv1_decoder_select="blockdsp dsputil"
|
||||
asv1_encoder_select="dsputil"
|
||||
asv2_decoder_select="blockdsp dsputil"
|
||||
asv2_encoder_select="dsputil"
|
||||
ape_decoder_select="bswapdsp"
|
||||
asv1_decoder_select="blockdsp bswapdsp dsputil"
|
||||
asv1_encoder_select="bswapdsp dsputil"
|
||||
asv2_decoder_select="blockdsp bswapdsp dsputil"
|
||||
asv2_encoder_select="bswapdsp dsputil"
|
||||
atrac1_decoder_select="mdct sinewin"
|
||||
atrac3_decoder_select="mdct"
|
||||
atrac3p_decoder_select="mdct sinewin"
|
||||
@ -1737,7 +1738,7 @@ bink_decoder_select="blockdsp hpeldsp"
|
||||
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
|
||||
binkaudio_rdft_decoder_select="mdct rdft sinewin"
|
||||
cavs_decoder_select="blockdsp dsputil golomb h264chroma qpeldsp videodsp"
|
||||
cllc_decoder_select="dsputil"
|
||||
cllc_decoder_select="bswapdsp"
|
||||
comfortnoise_encoder_select="lpc"
|
||||
cook_decoder_select="audiodsp mdct sinewin"
|
||||
cscd_decoder_select="lzo"
|
||||
@ -1750,9 +1751,9 @@ dvvideo_encoder_select="dsputil"
|
||||
dxa_decoder_deps="zlib"
|
||||
eac3_decoder_select="ac3_decoder"
|
||||
eac3_encoder_select="ac3_encoder"
|
||||
eamad_decoder_select="aandcttables blockdsp dsputil mpegvideo"
|
||||
eamad_decoder_select="aandcttables blockdsp bswapdsp dsputil mpegvideo"
|
||||
eatgq_decoder_select="aandcttables dsputil"
|
||||
eatqi_decoder_select="aandcttables blockdsp dsputil mpeg1video_decoder"
|
||||
eatqi_decoder_select="aandcttables blockdsp bswapdsp dsputil mpeg1video_decoder"
|
||||
exr_decoder_deps="zlib"
|
||||
ffv1_decoder_select="golomb rangecoder"
|
||||
ffv1_encoder_select="rangecoder"
|
||||
@ -1760,14 +1761,14 @@ ffvhuff_decoder_select="huffyuv_decoder"
|
||||
ffvhuff_encoder_select="huffyuv_encoder"
|
||||
fic_decoder_select="golomb"
|
||||
flac_decoder_select="golomb"
|
||||
flac_encoder_select="dsputil golomb lpc"
|
||||
flac_encoder_select="bswapdsp golomb lpc"
|
||||
flashsv_decoder_deps="zlib"
|
||||
flashsv_encoder_deps="zlib"
|
||||
flashsv2_decoder_deps="zlib"
|
||||
flv_decoder_select="h263_decoder"
|
||||
flv_encoder_select="h263_encoder"
|
||||
fourxm_decoder_select="blockdsp dsputil"
|
||||
fraps_decoder_select="dsputil huffman"
|
||||
fourxm_decoder_select="blockdsp bswapdsp"
|
||||
fraps_decoder_select="bswapdsp huffman"
|
||||
g2m_decoder_deps="zlib"
|
||||
g2m_decoder_select="blockdsp dsputil"
|
||||
h261_decoder_select="mpeg_er mpegvideo"
|
||||
@ -1778,11 +1779,11 @@ h263i_decoder_select="h263_decoder"
|
||||
h263p_encoder_select="h263_encoder"
|
||||
h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel videodsp"
|
||||
h264_decoder_suggest="error_resilience"
|
||||
hevc_decoder_select="cabac dsputil golomb videodsp"
|
||||
huffyuv_decoder_select="dsputil huffyuvdsp"
|
||||
huffyuv_encoder_select="dsputil huffman huffyuvencdsp"
|
||||
hevc_decoder_select="bswapdsp cabac golomb videodsp"
|
||||
huffyuv_decoder_select="bswapdsp huffyuvdsp"
|
||||
huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
|
||||
iac_decoder_select="imc_decoder"
|
||||
imc_decoder_select="dsputil fft mdct sinewin"
|
||||
imc_decoder_select="bswapdsp fft mdct sinewin"
|
||||
indeo3_decoder_select="hpeldsp"
|
||||
interplay_video_decoder_select="hpeldsp"
|
||||
jpegls_decoder_select="golomb mjpeg_decoder"
|
||||
@ -1793,12 +1794,12 @@ ljpeg_encoder_select="aandcttables mpegvideoenc"
|
||||
loco_decoder_select="golomb"
|
||||
mdec_decoder_select="blockdsp dsputil mpegvideo"
|
||||
metasound_decoder_select="lsp mdct sinewin"
|
||||
mimic_decoder_select="blockdsp dsputil hpeldsp"
|
||||
mimic_decoder_select="blockdsp bswapdsp dsputil hpeldsp"
|
||||
mjpeg_decoder_select="blockdsp dsputil hpeldsp"
|
||||
mjpeg_encoder_select="aandcttables mpegvideoenc"
|
||||
mjpegb_decoder_select="mjpeg_decoder"
|
||||
mlp_decoder_select="mlp_parser"
|
||||
motionpixels_decoder_select="dsputil"
|
||||
motionpixels_decoder_select="bswapdsp"
|
||||
mp1_decoder_select="mpegaudio"
|
||||
mp1float_decoder_select="mpegaudio"
|
||||
mp2_decoder_select="mpegaudio"
|
||||
@ -1809,7 +1810,7 @@ mp3adufloat_decoder_select="mpegaudio"
|
||||
mp3float_decoder_select="mpegaudio"
|
||||
mp3on4_decoder_select="mpegaudio"
|
||||
mp3on4float_decoder_select="mpegaudio"
|
||||
mpc7_decoder_select="dsputil mpegaudiodsp"
|
||||
mpc7_decoder_select="bswapdsp mpegaudiodsp"
|
||||
mpc8_decoder_select="mpegaudiodsp"
|
||||
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
|
||||
mpeg_xvmc_decoder_select="mpeg2video_decoder"
|
||||
@ -1859,12 +1860,12 @@ thp_decoder_select="mjpeg_decoder"
|
||||
tiff_decoder_suggest="zlib"
|
||||
tiff_encoder_suggest="zlib"
|
||||
truehd_decoder_select="mlp_decoder"
|
||||
truemotion2_decoder_select="dsputil"
|
||||
truespeech_decoder_select="dsputil"
|
||||
truemotion2_decoder_select="bswapdsp"
|
||||
truespeech_decoder_select="bswapdsp"
|
||||
tscc_decoder_deps="zlib"
|
||||
twinvq_decoder_select="mdct lsp sinewin"
|
||||
utvideo_decoder_select="dsputil"
|
||||
utvideo_encoder_select="dsputil huffman huffyuvencdsp"
|
||||
utvideo_decoder_select="bswapdsp"
|
||||
utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
|
||||
vble_decoder_select="huffyuvdsp"
|
||||
vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp"
|
||||
vc1image_decoder_select="vc1_decoder"
|
||||
|
@ -31,8 +31,8 @@
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "avcodec.h"
|
||||
#include "blockdsp.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "dsputil.h"
|
||||
#include "get_bits.h"
|
||||
#include "internal.h"
|
||||
|
||||
@ -132,8 +132,8 @@ typedef struct CFrameBuffer {
|
||||
|
||||
typedef struct FourXContext {
|
||||
AVCodecContext *avctx;
|
||||
DSPContext dsp;
|
||||
BlockDSPContext bdsp;
|
||||
BswapDSPContext bbdsp;
|
||||
uint16_t *frame_buffer;
|
||||
uint16_t *last_frame_buffer;
|
||||
GetBitContext pre_gb; ///< ac/dc prefix
|
||||
@ -442,7 +442,7 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length)
|
||||
bitstream_size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!f->bitstream_buffer)
|
||||
return AVERROR(ENOMEM);
|
||||
f->dsp.bswap_buf(f->bitstream_buffer, (const uint32_t*)(buf + extra),
|
||||
f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) (buf + extra),
|
||||
bitstream_size / 4);
|
||||
memset((uint8_t*)f->bitstream_buffer + bitstream_size,
|
||||
0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
@ -765,7 +765,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length)
|
||||
prestream_size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!f->bitstream_buffer)
|
||||
return AVERROR(ENOMEM);
|
||||
f->dsp.bswap_buf(f->bitstream_buffer, (const uint32_t*)prestream,
|
||||
f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) prestream,
|
||||
prestream_size / 4);
|
||||
memset((uint8_t*)f->bitstream_buffer + prestream_size,
|
||||
0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
@ -956,7 +956,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
|
||||
f->version = AV_RL32(avctx->extradata) >> 16;
|
||||
ff_blockdsp_init(&f->bdsp, avctx);
|
||||
ff_dsputil_init(&f->dsp, avctx);
|
||||
ff_bswapdsp_init(&f->bbdsp);
|
||||
f->avctx = avctx;
|
||||
init_vlcs(f);
|
||||
|
||||
|
@ -30,6 +30,7 @@ OBJS-$(CONFIG_AC3DSP) += ac3dsp.o
|
||||
OBJS-$(CONFIG_AUDIO_FRAME_QUEUE) += audio_frame_queue.o
|
||||
OBJS-$(CONFIG_AUDIODSP) += audiodsp.o
|
||||
OBJS-$(CONFIG_BLOCKDSP) += blockdsp.o
|
||||
OBJS-$(CONFIG_BSWAPDSP) += bswapdsp.o
|
||||
OBJS-$(CONFIG_CABAC) += cabac.o
|
||||
OBJS-$(CONFIG_DCT) += dct.o dct32_fixed.o dct32_float.o
|
||||
OBJS-$(CONFIG_DXVA2) += dxva2.o
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "libavutil/crc.h"
|
||||
#include "libavutil/downmix_info.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "internal.h"
|
||||
#include "aac_ac3_parser.h"
|
||||
#include "ac3_parser.h"
|
||||
@ -180,7 +181,7 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx)
|
||||
ff_mdct_init(&s->imdct_256, 8, 1, 1.0);
|
||||
ff_mdct_init(&s->imdct_512, 9, 1, 1.0);
|
||||
ff_kbd_window_init(s->window, 5.0, 256);
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_bswapdsp_init(&s->bdsp);
|
||||
avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
|
||||
ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
|
||||
ff_fmt_convert_init(&s->fmt_conv, avctx);
|
||||
@ -1325,7 +1326,8 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
|
||||
if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
|
||||
// seems to be byte-swapped AC-3
|
||||
int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
|
||||
s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt);
|
||||
s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
|
||||
(const uint16_t *) buf, cnt);
|
||||
} else
|
||||
memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
|
||||
buf = s->input_buffer;
|
||||
|
@ -54,8 +54,8 @@
|
||||
#include "libavutil/lfg.h"
|
||||
#include "ac3.h"
|
||||
#include "ac3dsp.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "fft.h"
|
||||
#include "fmtconvert.h"
|
||||
|
||||
@ -200,7 +200,7 @@ typedef struct AC3DecodeContext {
|
||||
///@}
|
||||
|
||||
///@name Optimization
|
||||
DSPContext dsp; ///< for optimization
|
||||
BswapDSPContext bdsp;
|
||||
AVFloatDSPContext fdsp;
|
||||
AC3DSPContext ac3dsp;
|
||||
FmtConvertContext fmt_conv; ///< optimized conversion functions
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include "mpeg4audio.h"
|
||||
#include "bytestream.h"
|
||||
#include "bgmc.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "internal.h"
|
||||
#include "libavutil/samplefmt.h"
|
||||
#include "libavutil/crc.h"
|
||||
@ -192,7 +192,7 @@ typedef struct {
|
||||
AVCodecContext *avctx;
|
||||
ALSSpecificConfig sconf;
|
||||
GetBitContext gb;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext 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
|
||||
@ -1536,8 +1536,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr,
|
||||
sample++)
|
||||
*dest++ = av_bswap16(src[sample]);
|
||||
} else {
|
||||
ctx->dsp.bswap_buf((uint32_t*)ctx->crc_buffer,
|
||||
(uint32_t *)frame->data[0],
|
||||
ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
|
||||
(uint32_t *) frame->data[0],
|
||||
ctx->cur_frame_length * avctx->channels);
|
||||
}
|
||||
crc_source = ctx->crc_buffer;
|
||||
@ -1756,7 +1756,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
}
|
||||
}
|
||||
|
||||
ff_dsputil_init(&ctx->dsp, avctx);
|
||||
ff_bswapdsp_init(&ctx->bdsp);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "libavutil/opt.h"
|
||||
#include "apedsp.h"
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "internal.h"
|
||||
#include "get_bits.h"
|
||||
@ -136,7 +136,7 @@ typedef struct APEPredictor {
|
||||
typedef struct APEContext {
|
||||
AVClass *class; ///< class for AVOptions
|
||||
AVCodecContext *avctx;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
APEDSPContext adsp;
|
||||
int channels;
|
||||
int samples; ///< samples left to decode in current frame
|
||||
@ -314,7 +314,7 @@ static av_cold int ape_decode_init(AVCodecContext *avctx)
|
||||
if (ARCH_X86)
|
||||
ff_apedsp_init_x86(&s->adsp);
|
||||
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_bswapdsp_init(&s->bdsp);
|
||||
avctx->channel_layout = (avctx->channels==2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO;
|
||||
|
||||
return 0;
|
||||
@ -1452,7 +1452,8 @@ static int ape_decode_frame(AVCodecContext *avctx, void *data,
|
||||
av_fast_malloc(&s->data, &s->data_size, buf_size);
|
||||
if (!s->data)
|
||||
return AVERROR(ENOMEM);
|
||||
s->dsp.bswap_buf((uint32_t*)s->data, (const uint32_t*)buf, buf_size >> 2);
|
||||
s->bdsp.bswap_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;
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include "asv.h"
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
|
||||
const uint8_t ff_asv_scantab[64] = {
|
||||
0x00,0x08,0x01,0x09,0x10,0x18,0x11,0x19,
|
||||
@ -82,6 +83,7 @@ const uint8_t ff_asv2_level_tab[63][2] = {
|
||||
av_cold void ff_asv_common_init(AVCodecContext *avctx) {
|
||||
ASV1Context * const a = avctx->priv_data;
|
||||
|
||||
ff_bswapdsp_init(&a->bbdsp);
|
||||
ff_dsputil_init(&a->dsp, avctx);
|
||||
|
||||
a->mb_width = (avctx->width + 15) / 16;
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "blockdsp.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "dsputil.h"
|
||||
#include "get_bits.h"
|
||||
#include "put_bits.h"
|
||||
@ -39,6 +40,7 @@
|
||||
typedef struct ASV1Context{
|
||||
AVCodecContext *avctx;
|
||||
BlockDSPContext bdsp;
|
||||
BswapDSPContext bbdsp;
|
||||
DSPContext dsp;
|
||||
PutBitContext pb;
|
||||
GetBitContext gb;
|
||||
|
@ -224,7 +224,8 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
if (avctx->codec_id == AV_CODEC_ID_ASV1)
|
||||
a->dsp.bswap_buf((uint32_t*)a->bitstream_buffer, (const uint32_t*)buf, buf_size/4);
|
||||
a->bbdsp.bswap_buf((uint32_t *) a->bitstream_buffer,
|
||||
(const uint32_t *) buf, buf_size / 4);
|
||||
else {
|
||||
int i;
|
||||
for (i = 0; i < buf_size; i++)
|
||||
|
@ -220,7 +220,8 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
||||
size= put_bits_count(&a->pb)/32;
|
||||
|
||||
if(avctx->codec_id == AV_CODEC_ID_ASV1)
|
||||
a->dsp.bswap_buf((uint32_t*)pkt->data, (uint32_t*)pkt->data, size);
|
||||
a->bbdsp.bswap_buf((uint32_t *) pkt->data,
|
||||
(uint32_t *) pkt->data, size);
|
||||
else{
|
||||
int i;
|
||||
for(i=0; i<4*size; i++)
|
||||
|
56
libavcodec/bswapdsp.c
Normal file
56
libavcodec/bswapdsp.c
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* This file is part of Libav.
|
||||
*
|
||||
* Libav is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* Libav is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with Libav; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/bswap.h"
|
||||
#include "bswapdsp.h"
|
||||
|
||||
static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i + 8 <= w; i += 8) {
|
||||
dst[i + 0] = av_bswap32(src[i + 0]);
|
||||
dst[i + 1] = av_bswap32(src[i + 1]);
|
||||
dst[i + 2] = av_bswap32(src[i + 2]);
|
||||
dst[i + 3] = av_bswap32(src[i + 3]);
|
||||
dst[i + 4] = av_bswap32(src[i + 4]);
|
||||
dst[i + 5] = av_bswap32(src[i + 5]);
|
||||
dst[i + 6] = av_bswap32(src[i + 6]);
|
||||
dst[i + 7] = av_bswap32(src[i + 7]);
|
||||
}
|
||||
for (; i < w; i++)
|
||||
dst[i + 0] = av_bswap32(src[i + 0]);
|
||||
}
|
||||
|
||||
static void bswap16_buf(uint16_t *dst, const uint16_t *src, int len)
|
||||
{
|
||||
while (len--)
|
||||
*dst++ = av_bswap16(*src++);
|
||||
}
|
||||
|
||||
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
|
||||
{
|
||||
c->bswap_buf = bswap_buf;
|
||||
c->bswap16_buf = bswap16_buf;
|
||||
|
||||
if (ARCH_X86)
|
||||
ff_bswapdsp_init_x86(c);
|
||||
}
|
32
libavcodec/bswapdsp.h
Normal file
32
libavcodec/bswapdsp.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* This file is part of Libav.
|
||||
*
|
||||
* Libav is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* Libav is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with Libav; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef AVCODEC_BSWAP_BUF_H
|
||||
#define AVCODEC_BSWAP_BUF_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct BswapDSPContext {
|
||||
void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
|
||||
void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
|
||||
} BswapDSPContext;
|
||||
|
||||
void ff_bswapdsp_init(BswapDSPContext *c);
|
||||
void ff_bswapdsp_init_x86(BswapDSPContext *c);
|
||||
|
||||
#endif /* AVCODEC_BSWAP_BUF_H */
|
@ -23,14 +23,14 @@
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "avcodec.h"
|
||||
#include "internal.h"
|
||||
|
||||
typedef struct CLLCContext {
|
||||
DSPContext dsp;
|
||||
AVCodecContext *avctx;
|
||||
BswapDSPContext bdsp;
|
||||
|
||||
uint8_t *swapped_buf;
|
||||
int swapped_buf_size;
|
||||
@ -391,7 +391,7 @@ static int cllc_decode_frame(AVCodecContext *avctx, void *data,
|
||||
}
|
||||
|
||||
/* bswap16 the buffer since CLLC's bitreader works in 16-bit words */
|
||||
ctx->dsp.bswap16_buf((uint16_t *) ctx->swapped_buf, (uint16_t *) src,
|
||||
ctx->bdsp.bswap16_buf((uint16_t *) ctx->swapped_buf, (uint16_t *) src,
|
||||
data_size / 2);
|
||||
|
||||
init_get_bits(&gb, ctx->swapped_buf, data_size * 8);
|
||||
@ -485,7 +485,7 @@ static av_cold int cllc_decode_init(AVCodecContext *avctx)
|
||||
ctx->swapped_buf = NULL;
|
||||
ctx->swapped_buf_size = 0;
|
||||
|
||||
ff_dsputil_init(&ctx->dsp, avctx);
|
||||
ff_bswapdsp_init(&ctx->bdsp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -189,30 +189,6 @@ static int pix_norm1_c(uint8_t *pix, int line_size)
|
||||
return s;
|
||||
}
|
||||
|
||||
static void bswap_buf(uint32_t *dst, const uint32_t *src, int w)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i + 8 <= w; i += 8) {
|
||||
dst[i + 0] = av_bswap32(src[i + 0]);
|
||||
dst[i + 1] = av_bswap32(src[i + 1]);
|
||||
dst[i + 2] = av_bswap32(src[i + 2]);
|
||||
dst[i + 3] = av_bswap32(src[i + 3]);
|
||||
dst[i + 4] = av_bswap32(src[i + 4]);
|
||||
dst[i + 5] = av_bswap32(src[i + 5]);
|
||||
dst[i + 6] = av_bswap32(src[i + 6]);
|
||||
dst[i + 7] = av_bswap32(src[i + 7]);
|
||||
}
|
||||
for (; i < w; i++)
|
||||
dst[i + 0] = av_bswap32(src[i + 0]);
|
||||
}
|
||||
|
||||
static void bswap16_buf(uint16_t *dst, const uint16_t *src, int len)
|
||||
{
|
||||
while (len--)
|
||||
*dst++ = av_bswap16(*src++);
|
||||
}
|
||||
|
||||
static int sse4_c(MpegEncContext *v, uint8_t *pix1, uint8_t *pix2,
|
||||
int line_size, int h)
|
||||
{
|
||||
@ -1415,9 +1391,6 @@ av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
|
||||
c->nsse[0] = nsse16_c;
|
||||
c->nsse[1] = nsse8_c;
|
||||
|
||||
c->bswap_buf = bswap_buf;
|
||||
c->bswap16_buf = bswap16_buf;
|
||||
|
||||
c->try_8x8basis = try_8x8basis_c;
|
||||
c->add_8x8basis = add_8x8basis_c;
|
||||
|
||||
|
@ -122,9 +122,6 @@ typedef struct DSPContext {
|
||||
|
||||
me_cmp_func pix_abs[2][4];
|
||||
|
||||
void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
|
||||
void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
|
||||
|
||||
/* (I)DCT */
|
||||
void (*fdct)(int16_t *block /* align 16 */);
|
||||
void (*fdct248)(int16_t *block /* align 16 */);
|
||||
|
@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "aandcttab.h"
|
||||
#include "eaidct.h"
|
||||
@ -45,6 +46,7 @@
|
||||
typedef struct MadContext {
|
||||
AVCodecContext *avctx;
|
||||
BlockDSPContext bdsp;
|
||||
BswapDSPContext bbdsp;
|
||||
DSPContext dsp;
|
||||
AVFrame *last_frame;
|
||||
GetBitContext gb;
|
||||
@ -63,6 +65,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
s->avctx = avctx;
|
||||
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
|
||||
ff_blockdsp_init(&s->bdsp, avctx);
|
||||
ff_bswapdsp_init(&s->bbdsp);
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_init_scantable_permutation(s->dsp.idct_permutation, FF_NO_IDCT_PERM);
|
||||
ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct);
|
||||
@ -284,7 +287,8 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
buf_end - buf);
|
||||
if (!s->bitstream_buf)
|
||||
return AVERROR(ENOMEM);
|
||||
s->dsp.bswap16_buf(s->bitstream_buf, (const uint16_t*)buf, (buf_end-buf)/2);
|
||||
s->bbdsp.bswap16_buf(s->bitstream_buf, (const uint16_t *) buf,
|
||||
(buf_end - buf) / 2);
|
||||
init_get_bits(&s->gb, s->bitstream_buf, 8*(buf_end-buf));
|
||||
|
||||
for (s->mb_y=0; s->mb_y < (avctx->height+15)/16; s->mb_y++)
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "blockdsp.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "aandcttab.h"
|
||||
#include "eaidct.h"
|
||||
@ -37,6 +38,7 @@
|
||||
|
||||
typedef struct TqiContext {
|
||||
MpegEncContext s;
|
||||
BswapDSPContext bsdsp;
|
||||
void *bitstream_buf;
|
||||
unsigned int bitstream_buf_size;
|
||||
DECLARE_ALIGNED(16, int16_t, block)[6][64];
|
||||
@ -48,6 +50,7 @@ static av_cold int tqi_decode_init(AVCodecContext *avctx)
|
||||
MpegEncContext *s = &t->s;
|
||||
s->avctx = avctx;
|
||||
ff_blockdsp_init(&s->bdsp, avctx);
|
||||
ff_bswapdsp_init(&t->bsdsp);
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_init_scantable_permutation(s->dsp.idct_permutation, FF_NO_IDCT_PERM);
|
||||
ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct);
|
||||
@ -126,7 +129,8 @@ static int tqi_decode_frame(AVCodecContext *avctx,
|
||||
buf_end - buf);
|
||||
if (!t->bitstream_buf)
|
||||
return AVERROR(ENOMEM);
|
||||
s->dsp.bswap_buf(t->bitstream_buf, (const uint32_t*)buf, (buf_end-buf)/4);
|
||||
t->bsdsp.bswap_buf(t->bitstream_buf, (const uint32_t *) buf,
|
||||
(buf_end - buf) / 4);
|
||||
init_get_bits(&s->gb, t->bitstream_buf, 8*(buf_end-buf));
|
||||
|
||||
s->last_dc[0] = s->last_dc[1] = s->last_dc[2] = 0;
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "libavutil/md5.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "golomb.h"
|
||||
#include "internal.h"
|
||||
@ -112,7 +112,7 @@ typedef struct FlacEncodeContext {
|
||||
struct AVMD5 *md5ctx;
|
||||
uint8_t *md5_buffer;
|
||||
unsigned int md5_buffer_size;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
FLACDSPContext flac_dsp;
|
||||
|
||||
int flushed;
|
||||
@ -400,7 +400,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_dsputil_init(&s->dsp, avctx);
|
||||
ff_bswapdsp_init(&s->bdsp);
|
||||
ff_flacdsp_init(&s->flac_dsp, avctx->sample_fmt,
|
||||
avctx->bits_per_raw_sample);
|
||||
|
||||
@ -1179,8 +1179,8 @@ static int update_md5_sum(FlacEncodeContext *s, const void *samples)
|
||||
if (s->avctx->bits_per_raw_sample <= 16) {
|
||||
buf = (const uint8_t *)samples;
|
||||
#if HAVE_BIGENDIAN
|
||||
s->dsp.bswap16_buf((uint16_t *)s->md5_buffer,
|
||||
(const uint16_t *)samples, buf_size / 2);
|
||||
s->bdsp.bswap16_buf((uint16_t *) s->md5_buffer,
|
||||
(const uint16_t *) samples, buf_size / 2);
|
||||
buf = s->md5_buffer;
|
||||
#endif
|
||||
} else {
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include "get_bits.h"
|
||||
#include "huffman.h"
|
||||
#include "bytestream.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "internal.h"
|
||||
|
||||
#define FPS_TAG MKTAG('F', 'P', 'S', 'x')
|
||||
@ -45,10 +45,10 @@
|
||||
*/
|
||||
typedef struct FrapsContext {
|
||||
AVCodecContext *avctx;
|
||||
BswapDSPContext bdsp;
|
||||
AVFrame *frame;
|
||||
uint8_t *tmpbuf;
|
||||
int tmpbuf_size;
|
||||
DSPContext dsp;
|
||||
} FrapsContext;
|
||||
|
||||
|
||||
@ -70,7 +70,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
if (!s->frame)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_bswapdsp_init(&s->bdsp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -106,7 +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->dsp.bswap_buf((uint32_t *)s->tmpbuf, (const uint32_t *)src, size >> 2);
|
||||
s->bdsp.bswap_buf((uint32_t *) s->tmpbuf,
|
||||
(const uint32_t *) src, size >> 2);
|
||||
|
||||
init_get_bits(&gb, s->tmpbuf, size * 8);
|
||||
for (j = 0; j < h; j++) {
|
||||
|
@ -31,9 +31,9 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/stereo3d.h"
|
||||
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "cabac_functions.h"
|
||||
#include "dsputil.h"
|
||||
#include "golomb.h"
|
||||
#include "hevc.h"
|
||||
|
||||
@ -2880,8 +2880,8 @@ static int verify_md5(HEVCContext *s, AVFrame *frame)
|
||||
const uint8_t *src = frame->data[i] + j * frame->linesize[i];
|
||||
#if HAVE_BIGENDIAN
|
||||
if (pixel_shift) {
|
||||
s->dsp.bswap16_buf((uint16_t*)s->checksum_buf,
|
||||
(const uint16_t*)src, w);
|
||||
s->bdsp.bswap16_buf((uint16_t *) s->checksum_buf,
|
||||
(const uint16_t *) src, w);
|
||||
src = s->checksum_buf;
|
||||
}
|
||||
#endif
|
||||
@ -3044,7 +3044,7 @@ static av_cold int hevc_init_context(AVCodecContext *avctx)
|
||||
if (!s->md5_ctx)
|
||||
goto fail;
|
||||
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_bswapdsp_init(&s->bdsp);
|
||||
|
||||
s->context_initialized = 1;
|
||||
|
||||
|
@ -30,8 +30,8 @@
|
||||
#include "libavutil/md5.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "cabac.h"
|
||||
#include "dsputil.h"
|
||||
#include "get_bits.h"
|
||||
#include "hevcdsp.h"
|
||||
#include "internal.h"
|
||||
@ -805,7 +805,7 @@ typedef struct HEVCContext {
|
||||
HEVCPredContext hpc;
|
||||
HEVCDSPContext hevcdsp;
|
||||
VideoDSPContext vdsp;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
int8_t *qp_y_tab;
|
||||
uint8_t *split_cu_flag;
|
||||
uint8_t *horizontal_bs;
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include "libavutil/mem.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "huffyuv.h"
|
||||
|
||||
int ff_huffyuv_generate_bits_table(uint32_t *dst, const uint8_t *len_table)
|
||||
@ -80,7 +80,7 @@ av_cold void ff_huffyuv_common_init(AVCodecContext *avctx)
|
||||
s->avctx = avctx;
|
||||
s->flags = avctx->flags;
|
||||
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_bswapdsp_init(&s->bdsp);
|
||||
|
||||
s->width = avctx->width;
|
||||
s->height = avctx->height;
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "huffyuvdsp.h"
|
||||
#include "huffyuvencdsp.h"
|
||||
@ -82,7 +82,7 @@ typedef struct HYuvContext {
|
||||
VLC vlc[6]; //Y,U,V,YY,YU,YV
|
||||
uint8_t *bitstream_buffer;
|
||||
unsigned int bitstream_buffer_size;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
HuffYUVDSPContext hdsp;
|
||||
HuffYUVEncDSPContext hencdsp;
|
||||
} HYuvContext;
|
||||
|
@ -493,8 +493,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
memset(s->bitstream_buffer + buf_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
s->dsp.bswap_buf((uint32_t*)s->bitstream_buffer,
|
||||
(const uint32_t*)buf, buf_size / 4);
|
||||
s->bdsp.bswap_buf((uint32_t *) s->bitstream_buffer,
|
||||
(const uint32_t *) buf, buf_size / 4);
|
||||
|
||||
if (ff_thread_get_buffer(avctx, &frame, 0) < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||
|
@ -658,7 +658,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
||||
avctx->stats_out[0] = '\0';
|
||||
if (!(s->avctx->flags2 & CODEC_FLAG2_NO_OUTPUT)) {
|
||||
flush_put_bits(&s->pb);
|
||||
s->dsp.bswap_buf((uint32_t*)pkt->data, (uint32_t*)pkt->data, size);
|
||||
s->bdsp.bswap_buf((uint32_t *) pkt->data, (uint32_t *) pkt->data, size);
|
||||
}
|
||||
|
||||
s->picture_number++;
|
||||
|
@ -39,8 +39,8 @@
|
||||
#include "libavutil/float_dsp.h"
|
||||
#include "libavutil/internal.h"
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "fft.h"
|
||||
#include "internal.h"
|
||||
#include "sinewin.h"
|
||||
@ -94,7 +94,7 @@ typedef struct {
|
||||
float sqrt_tab[30];
|
||||
GetBitContext gb;
|
||||
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
AVFloatDSPContext fdsp;
|
||||
FFTContext fft;
|
||||
DECLARE_ALIGNED(32, FFTComplex, samples)[COEFFS / 2];
|
||||
@ -246,7 +246,7 @@ static av_cold int imc_decode_init(AVCodecContext *avctx)
|
||||
av_log(avctx, AV_LOG_INFO, "FFT init failed\n");
|
||||
return ret;
|
||||
}
|
||||
ff_dsputil_init(&q->dsp, avctx);
|
||||
ff_bswapdsp_init(&q->bdsp);
|
||||
avpriv_float_dsp_init(&q->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
|
||||
avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
|
||||
avctx->channel_layout = avctx->channels == 1 ? AV_CH_LAYOUT_MONO
|
||||
@ -1014,7 +1014,7 @@ static int imc_decode_frame(AVCodecContext *avctx, void *data,
|
||||
for (i = 0; i < avctx->channels; i++) {
|
||||
q->out_samples = (float *)frame->extended_data[i];
|
||||
|
||||
q->dsp.bswap16_buf(buf16, (const uint16_t*)buf, IMC_BLOCK_SIZE / 2);
|
||||
q->bdsp.bswap16_buf(buf16, (const uint16_t *) buf, IMC_BLOCK_SIZE / 2);
|
||||
|
||||
init_get_bits(&q->gb, (const uint8_t*)buf16, IMC_BLOCK_SIZE * 8);
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "internal.h"
|
||||
#include "get_bits.h"
|
||||
#include "bytestream.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "dsputil.h"
|
||||
#include "hpeldsp.h"
|
||||
#include "thread.h"
|
||||
@ -54,6 +55,7 @@ typedef struct {
|
||||
GetBitContext gb;
|
||||
ScanTable scantable;
|
||||
BlockDSPContext bdsp;
|
||||
BswapDSPContext bbdsp;
|
||||
DSPContext dsp;
|
||||
HpelDSPContext hdsp;
|
||||
VLC vlc;
|
||||
@ -148,6 +150,7 @@ static av_cold int mimic_decode_init(AVCodecContext *avctx)
|
||||
return ret;
|
||||
}
|
||||
ff_blockdsp_init(&ctx->bdsp, avctx);
|
||||
ff_bswapdsp_init(&ctx->bbdsp);
|
||||
ff_dsputil_init(&ctx->dsp, avctx);
|
||||
ff_hpeldsp_init(&ctx->hdsp, avctx->flags);
|
||||
ff_init_scantable(ctx->dsp.idct_permutation, &ctx->scantable, col_zag);
|
||||
@ -425,8 +428,8 @@ static int mimic_decode_frame(AVCodecContext *avctx, void *data,
|
||||
if (!ctx->swap_buf)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
ctx->dsp.bswap_buf(ctx->swap_buf,
|
||||
(const uint32_t*) (buf + MIMIC_HEADER_SIZE),
|
||||
ctx->bbdsp.bswap_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);
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "internal.h"
|
||||
|
||||
#define MAX_HUFF_CODES 16
|
||||
@ -37,7 +37,7 @@ typedef struct HuffCode {
|
||||
typedef struct MotionPixelsContext {
|
||||
AVCodecContext *avctx;
|
||||
AVFrame *frame;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
uint8_t *changes_map;
|
||||
int offset_bits_len;
|
||||
int codes_count, current_codes_count;
|
||||
@ -71,7 +71,7 @@ static av_cold int mp_decode_init(AVCodecContext *avctx)
|
||||
|
||||
motionpixels_tableinit();
|
||||
mp->avctx = avctx;
|
||||
ff_dsputil_init(&mp->dsp, avctx);
|
||||
ff_bswapdsp_init(&mp->bdsp);
|
||||
mp->changes_map = av_mallocz(avctx->width * h4);
|
||||
mp->offset_bits_len = av_log2(avctx->width * avctx->height) + 1;
|
||||
mp->vpt = av_mallocz(avctx->height * sizeof(YuvPixel));
|
||||
@ -277,7 +277,8 @@ static int mp_decode_frame(AVCodecContext *avctx,
|
||||
av_fast_malloc(&mp->bswapbuf, &mp->bswapbuf_size, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!mp->bswapbuf)
|
||||
return AVERROR(ENOMEM);
|
||||
mp->dsp.bswap_buf((uint32_t *)mp->bswapbuf, (const uint32_t *)buf, buf_size / 4);
|
||||
mp->bdsp.bswap_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);
|
||||
memset(mp->bswapbuf + buf_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
|
@ -31,8 +31,8 @@
|
||||
|
||||
#include "libavutil/lfg.h"
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "mpegaudio.h"
|
||||
#include "mpegaudiodsp.h"
|
||||
|
||||
@ -50,7 +50,7 @@ typedef struct Band {
|
||||
}Band;
|
||||
|
||||
typedef struct MPCContext {
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
MPADSPContext mpadsp;
|
||||
GetBitContext gb;
|
||||
int IS, MSS, gapless;
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include "libavutil/lfg.h"
|
||||
#include "avcodec.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "internal.h"
|
||||
#include "mpegaudiodsp.h"
|
||||
|
||||
@ -75,9 +74,9 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
|
||||
}
|
||||
memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
|
||||
av_lfg_init(&c->rnd, 0xDEADBEEF);
|
||||
ff_dsputil_init(&c->dsp, avctx);
|
||||
ff_bswapdsp_init(&c->bdsp);
|
||||
ff_mpadsp_init(&c->mpadsp);
|
||||
c->dsp.bswap_buf((uint32_t*)buf, (const uint32_t*)avctx->extradata, 4);
|
||||
c->bdsp.bswap_buf((uint32_t *) buf, (const uint32_t *) avctx->extradata, 4);
|
||||
ff_mpc_init();
|
||||
init_get_bits(&gb, buf, 128);
|
||||
|
||||
@ -236,7 +235,8 @@ static int mpc7_decode_frame(AVCodecContext * avctx, void *data,
|
||||
av_fast_padded_malloc(&c->bits, &c->buf_size, buf_size);
|
||||
if (!c->bits)
|
||||
return AVERROR(ENOMEM);
|
||||
c->dsp.bswap_buf((uint32_t *)c->bits, (const uint32_t *)buf, buf_size >> 2);
|
||||
c->bdsp.bswap_buf((uint32_t *) c->bits, (const uint32_t *) buf,
|
||||
buf_size >> 2);
|
||||
init_get_bits(&gb, c->bits, buf_size * 8);
|
||||
skip_bits_long(&gb, skip);
|
||||
|
||||
|
@ -27,9 +27,9 @@
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "internal.h"
|
||||
|
||||
#define TM2_ESCAPE 0x80000000
|
||||
@ -63,7 +63,7 @@ typedef struct TM2Context {
|
||||
AVFrame *pic;
|
||||
|
||||
GetBitContext gb;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
|
||||
/* TM2 streams */
|
||||
int *tokens[TM2_NUM_STREAMS];
|
||||
@ -858,7 +858,8 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
return ret;
|
||||
}
|
||||
|
||||
l->dsp.bswap_buf((uint32_t*)swbuf, (const uint32_t*)buf, buf_size >> 2);
|
||||
l->bdsp.bswap_buf((uint32_t *) swbuf, (const uint32_t *) buf,
|
||||
buf_size >> 2);
|
||||
|
||||
if ((ret = tm2_read_header(l, swbuf)) < 0) {
|
||||
av_free(swbuf);
|
||||
@ -909,7 +910,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
if (!l->pic)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
ff_dsputil_init(&l->dsp, avctx);
|
||||
ff_bswapdsp_init(&l->bdsp);
|
||||
|
||||
l->last = av_malloc(4 * sizeof(*l->last) * (w >> 2));
|
||||
l->clast = av_malloc(4 * sizeof(*l->clast) * (w >> 2));
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "libavutil/channel_layout.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "get_bits.h"
|
||||
#include "internal.h"
|
||||
|
||||
@ -36,7 +36,7 @@
|
||||
* TrueSpeech decoder context
|
||||
*/
|
||||
typedef struct {
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
/* input data */
|
||||
DECLARE_ALIGNED(16, uint8_t, buffer)[32];
|
||||
int16_t vector[8]; ///< input vector: 5/5/4/4/4/3/3/3
|
||||
@ -70,7 +70,7 @@ static av_cold int truespeech_decode_init(AVCodecContext * avctx)
|
||||
avctx->channel_layout = AV_CH_LAYOUT_MONO;
|
||||
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
|
||||
ff_dsputil_init(&c->dsp, avctx);
|
||||
ff_bswapdsp_init(&c->bdsp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -79,7 +79,7 @@ static void truespeech_read_frame(TSContext *dec, const uint8_t *input)
|
||||
{
|
||||
GetBitContext gb;
|
||||
|
||||
dec->dsp.bswap_buf((uint32_t *)dec->buffer, (const uint32_t *)input, 8);
|
||||
dec->bdsp.bswap_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)];
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
#include "libavutil/common.h"
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "huffyuvencdsp.h"
|
||||
|
||||
enum {
|
||||
@ -66,7 +66,7 @@ extern const int ff_ut_rgb_order[4];
|
||||
|
||||
typedef struct UtvideoContext {
|
||||
AVCodecContext *avctx;
|
||||
DSPContext dsp;
|
||||
BswapDSPContext bdsp;
|
||||
HuffYUVEncDSPContext hdsp;
|
||||
|
||||
uint32_t frame_info_size, flags, frame_info;
|
||||
|
@ -29,9 +29,9 @@
|
||||
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "avcodec.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "get_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "thread.h"
|
||||
#include "utvideo.h"
|
||||
|
||||
@ -143,7 +143,8 @@ static int decode_plane(UtvideoContext *c, int plane_no,
|
||||
memcpy(c->slice_bits, src + slice_data_start + c->slices * 4,
|
||||
slice_size);
|
||||
memset(c->slice_bits + slice_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
c->dsp.bswap_buf((uint32_t *) c->slice_bits, (uint32_t *) c->slice_bits,
|
||||
c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
|
||||
(uint32_t *) c->slice_bits,
|
||||
(slice_data_end - slice_data_start + 3) >> 2);
|
||||
init_get_bits(&gb, c->slice_bits, slice_size * 8);
|
||||
|
||||
@ -475,7 +476,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
|
||||
c->avctx = avctx;
|
||||
|
||||
ff_dsputil_init(&c->dsp, avctx);
|
||||
ff_bswapdsp_init(&c->bdsp);
|
||||
|
||||
if (avctx->extradata_size < 16) {
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
|
@ -28,9 +28,9 @@
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "avcodec.h"
|
||||
#include "internal.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "put_bits.h"
|
||||
#include "dsputil.h"
|
||||
#include "huffyuvencdsp.h"
|
||||
#include "mathops.h"
|
||||
#include "utvideo.h"
|
||||
@ -109,7 +109,7 @@ static av_cold int utvideo_encode_init(AVCodecContext *avctx)
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
ff_dsputil_init(&c->dsp, avctx);
|
||||
ff_bswapdsp_init(&c->bdsp);
|
||||
ff_huffyuvencdsp_init(&c->hdsp);
|
||||
|
||||
/* Check the prediction method, and error out if unsupported */
|
||||
@ -500,7 +500,7 @@ static int encode_plane(AVCodecContext *avctx, uint8_t *src,
|
||||
slice_len = offset - slice_len;
|
||||
|
||||
/* Byteswap the written huffman codes */
|
||||
c->dsp.bswap_buf((uint32_t *) c->slice_bits,
|
||||
c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
|
||||
(uint32_t *) c->slice_bits,
|
||||
slice_len >> 2);
|
||||
|
||||
|
@ -3,6 +3,7 @@ OBJS += x86/constants.o \
|
||||
|
||||
OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp_init.o
|
||||
OBJS-$(CONFIG_AUDIODSP) += x86/audiodsp_init.o
|
||||
OBJS-$(CONFIG_BSWAPDSP) += x86/bswapdsp_init.o
|
||||
OBJS-$(CONFIG_DCT) += x86/dct_init.o
|
||||
OBJS-$(CONFIG_DSPUTIL) += x86/dsputil_init.o
|
||||
OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc_mmx.o \
|
||||
@ -64,9 +65,9 @@ YASM-OBJS += x86/deinterlace.o \
|
||||
|
||||
YASM-OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp.o
|
||||
YASM-OBJS-$(CONFIG_AUDIODSP) += x86/audiodsp.o
|
||||
YASM-OBJS-$(CONFIG_BSWAPDSP) += x86/bswapdsp.o
|
||||
YASM-OBJS-$(CONFIG_DCT) += x86/dct32.o
|
||||
YASM-OBJS-$(CONFIG_DNXHD_ENCODER) += x86/dnxhdenc.o
|
||||
YASM-OBJS-$(CONFIG_DSPUTIL) += x86/dsputil.o
|
||||
YASM-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc.o
|
||||
YASM-OBJS-$(CONFIG_FFT) += x86/fft.o
|
||||
YASM-OBJS-$(CONFIG_H263DSP) += x86/h263_loopfilter.o
|
||||
|
@ -1,5 +1,5 @@
|
||||
;******************************************************************************
|
||||
;* MMX optimized DSP utils
|
||||
;* optimized bswap buffer functions
|
||||
;* Copyright (c) 2008 Loren Merritt
|
||||
;*
|
||||
;* This file is part of Libav.
|
37
libavcodec/x86/bswapdsp_init.c
Normal file
37
libavcodec/x86/bswapdsp_init.c
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* This file is part of Libav.
|
||||
*
|
||||
* Libav is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* Libav is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with Libav; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/attributes.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);
|
||||
|
||||
av_cold void ff_bswapdsp_init_x86(BswapDSPContext *c)
|
||||
{
|
||||
int cpu_flags = av_get_cpu_flags();
|
||||
|
||||
if (EXTERNAL_SSE2(cpu_flags))
|
||||
c->bswap_buf = ff_bswap32_buf_sse2;
|
||||
if (EXTERNAL_SSSE3(cpu_flags))
|
||||
c->bswap_buf = ff_bswap32_buf_ssse3;
|
||||
}
|
@ -26,9 +26,6 @@
|
||||
#include "dsputil_x86.h"
|
||||
#include "idct_xvid.h"
|
||||
|
||||
void ff_bswap32_buf_ssse3(uint32_t *dst, const uint32_t *src, int w);
|
||||
void ff_bswap32_buf_sse2(uint32_t *dst, const uint32_t *src, int w);
|
||||
|
||||
static av_cold void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx,
|
||||
int cpu_flags, unsigned high_bit_depth)
|
||||
{
|
||||
@ -83,18 +80,6 @@ static av_cold void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx,
|
||||
c->idct_permutation_type = FF_SSE2_IDCT_PERM;
|
||||
}
|
||||
#endif /* HAVE_SSE2_INLINE */
|
||||
|
||||
#if HAVE_SSE2_EXTERNAL
|
||||
c->bswap_buf = ff_bswap32_buf_sse2;
|
||||
#endif /* HAVE_SSE2_EXTERNAL */
|
||||
}
|
||||
|
||||
static av_cold void dsputil_init_ssse3(DSPContext *c, AVCodecContext *avctx,
|
||||
int cpu_flags, unsigned high_bit_depth)
|
||||
{
|
||||
#if HAVE_SSSE3_EXTERNAL
|
||||
c->bswap_buf = ff_bswap32_buf_ssse3;
|
||||
#endif /* HAVE_SSSE3_EXTERNAL */
|
||||
}
|
||||
|
||||
av_cold void ff_dsputil_init_x86(DSPContext *c, AVCodecContext *avctx,
|
||||
@ -111,9 +96,6 @@ av_cold void ff_dsputil_init_x86(DSPContext *c, AVCodecContext *avctx,
|
||||
if (X86_SSE2(cpu_flags))
|
||||
dsputil_init_sse2(c, avctx, cpu_flags, high_bit_depth);
|
||||
|
||||
if (EXTERNAL_SSSE3(cpu_flags))
|
||||
dsputil_init_ssse3(c, avctx, cpu_flags, high_bit_depth);
|
||||
|
||||
if (CONFIG_ENCODERS)
|
||||
ff_dsputilenc_init_mmx(c, avctx, high_bit_depth);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user