Commit 7427d1ca authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  g723.1: simplify scale_vector()
  g723.1: simplify normalize_bits()
  vda: cosmetics: fix Doxygen comment formatting
  vda: better frame allocation
  vda: Merge implementation into one file
  vda: support synchronous decoding
  vda: Reuse the bitstream buffer and reallocate it only if needed
  build: Factor out mpegvideo encoding dependencies to CONFIG_MPEGVIDEOENC
  avprobe: Include libm.h for the log2 fallback
  proresenc: use the edge emulation buffer
  rtmp: handle bytes read reports
  configure: Fix typo in mpeg2video/svq1 decoder dependency declaration
  Use log2(x) instead of log(x) / log(2)
  x86: swscale: fix fragile memory accesses
  x86: swscale: remove disabled code
  x86: yadif: fix asm with suncc
  x86: cabac: allow building with suncc
  x86: mlpdsp: avoid taking address of void
  ARM: intmath: use native-size return types for clipping functions

Conflicts:
	configure
	ffprobe.c
	libavcodec/Makefile
	libavcodec/g723_1.c
	libavcodec/v210dec.h
	libavcodec/vda.h
	libavcodec/vda_h264.c
	libavcodec/x86/cabac.h
	libavfilter/x86/yadif_template.c
	libswscale/x86/rgb2rgb_template.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 0e05908c 0d230e93
...@@ -1377,6 +1377,7 @@ CONFIG_EXTRA=" ...@@ -1377,6 +1377,7 @@ CONFIG_EXTRA="
lpc lpc
mpegaudiodsp mpegaudiodsp
mpegvideo mpegvideo
mpegvideoenc
nettle nettle
rtpdec rtpdec
sinewin sinewin
...@@ -1500,6 +1501,7 @@ dct_select="rdft" ...@@ -1500,6 +1501,7 @@ dct_select="rdft"
mdct_select="fft" mdct_select="fft"
rdft_select="fft" rdft_select="fft"
mpegaudiodsp_select="dct" mpegaudiodsp_select="dct"
mpegvideoenc_select="mpegvideo"
# decoders / encoders / hardware accelerators # decoders / encoders / hardware accelerators
aac_decoder_select="mdct sinewin" aac_decoder_select="mdct sinewin"
...@@ -1521,7 +1523,7 @@ cook_decoder_select="mdct sinewin" ...@@ -1521,7 +1523,7 @@ cook_decoder_select="mdct sinewin"
cscd_decoder_suggest="zlib" cscd_decoder_suggest="zlib"
dca_decoder_select="mdct" dca_decoder_select="mdct"
dirac_decoder_select="dwt golomb" dirac_decoder_select="dwt golomb"
dnxhd_encoder_select="aandcttables mpegvideo" dnxhd_encoder_select="aandcttables mpegvideoenc"
dxa_decoder_select="zlib" dxa_decoder_select="zlib"
eac3_decoder_select="ac3_decoder" eac3_decoder_select="ac3_decoder"
eac3_encoder_select="mdct ac3dsp" eac3_encoder_select="mdct ac3dsp"
...@@ -1540,9 +1542,9 @@ flv_decoder_select="h263_decoder" ...@@ -1540,9 +1542,9 @@ flv_decoder_select="h263_decoder"
flv_encoder_select="h263_encoder" flv_encoder_select="h263_encoder"
fraps_decoder_select="huffman" fraps_decoder_select="huffman"
h261_decoder_select="mpegvideo" h261_decoder_select="mpegvideo"
h261_encoder_select="aandcttables mpegvideo" h261_encoder_select="aandcttables mpegvideoenc"
h263_decoder_select="h263_parser mpegvideo" h263_decoder_select="h263_parser mpegvideo"
h263_encoder_select="aandcttables mpegvideo" h263_encoder_select="aandcttables mpegvideoenc"
h263_vaapi_hwaccel_select="vaapi h263_decoder" h263_vaapi_hwaccel_select="vaapi h263_decoder"
h263i_decoder_select="h263_decoder" h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder" h263p_encoder_select="h263_encoder"
...@@ -1558,10 +1560,10 @@ iac_decoder_select="fft mdct sinewin" ...@@ -1558,10 +1560,10 @@ iac_decoder_select="fft mdct sinewin"
imc_decoder_select="fft mdct sinewin" imc_decoder_select="fft mdct sinewin"
jpegls_decoder_select="golomb" jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb" jpegls_encoder_select="golomb"
ljpeg_encoder_select="aandcttables mpegvideo" ljpeg_encoder_select="aandcttables mpegvideoenc"
loco_decoder_select="golomb" loco_decoder_select="golomb"
mdec_decoder_select="mpegvideo" mdec_decoder_select="mpegvideo"
mjpeg_encoder_select="aandcttables mpegvideo" mjpeg_encoder_select="aandcttables mpegvideoenc"
mlp_decoder_select="mlp_parser" mlp_decoder_select="mlp_parser"
mp1_decoder_select="mpegaudiodsp" mp1_decoder_select="mpegaudiodsp"
mp1float_decoder_select="mpegaudiodsp" mp1float_decoder_select="mpegaudiodsp"
...@@ -1581,14 +1583,14 @@ mpeg_xvmc_decoder_select="mpegvideo_decoder" ...@@ -1581,14 +1583,14 @@ mpeg_xvmc_decoder_select="mpegvideo_decoder"
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder" mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
mpeg1video_decoder_select="mpegvideo" mpeg1video_decoder_select="mpegvideo"
mpeg1video_encoder_select="aandcttables mpegvideo" mpeg1video_encoder_select="aandcttables mpegvideoenc"
mpeg2_crystalhd_decoder_select="crystalhd" mpeg2_crystalhd_decoder_select="crystalhd"
mpeg2_dxva2_hwaccel_deps="dxva2api_h" mpeg2_dxva2_hwaccel_deps="dxva2api_h"
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder" mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
mpeg2video_encoder_select="mpegvideo" mpeg2video_decoder_select="mpegvideo"
mpeg2video_encoder_select="aandcttables mpegvideo" mpeg2video_encoder_select="aandcttables mpegvideoenc"
mpeg4_crystalhd_decoder_select="crystalhd" mpeg4_crystalhd_decoder_select="crystalhd"
mpeg4_decoder_select="h263_decoder mpeg4video_parser" mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder" mpeg4_encoder_select="h263_encoder"
...@@ -1618,12 +1620,12 @@ rv40_decoder_select="golomb h264chroma h264pred h264qpel mpegvideo" ...@@ -1618,12 +1620,12 @@ rv40_decoder_select="golomb h264chroma h264pred h264qpel mpegvideo"
shorten_decoder_select="golomb" shorten_decoder_select="golomb"
sipr_decoder_select="lsp" sipr_decoder_select="lsp"
snow_decoder_select="dwt" snow_decoder_select="dwt"
snow_encoder_select="aandcttables dwt mpegvideo" snow_encoder_select="aandcttables dwt mpegvideoenc"
sonic_decoder_select="golomb" sonic_decoder_select="golomb"
sonic_encoder_select="golomb" sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb" sonic_ls_encoder_select="golomb"
svq1_encoder_select="mpegvideo" svq1_decoder_select="mpegvideo"
svq1_encoder_select="aandcttables mpegvideo" svq1_encoder_select="aandcttables mpegvideoenc"
svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel mpegvideo" svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
svq3_decoder_suggest="zlib" svq3_decoder_suggest="zlib"
theora_decoder_select="vp3_decoder" theora_decoder_select="vp3_decoder"
......
...@@ -1120,7 +1120,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti ...@@ -1120,7 +1120,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti
if (qp >= 0 && qp < FF_ARRAY_ELEMS(qp_histogram)) if (qp >= 0 && qp < FF_ARRAY_ELEMS(qp_histogram))
qp_histogram[qp]++; qp_histogram[qp]++;
for (j = 0; j < 32; j++) for (j = 0; j < 32; j++)
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%X", (int)lrintf(log(qp_histogram[j] + 1) / log(2))); snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%X", (int)lrintf(log2(qp_histogram[j] + 1)));
} }
if (enc->flags&CODEC_FLAG_PSNR) { if (enc->flags&CODEC_FLAG_PSNR) {
int j; int j;
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavutil/dict.h" #include "libavutil/dict.h"
#include "libavutil/libm.h"
#include "libavutil/timecode.h" #include "libavutil/timecode.h"
#include "libavdevice/avdevice.h" #include "libavdevice/avdevice.h"
#include "libswscale/swscale.h" #include "libswscale/swscale.h"
...@@ -121,7 +122,7 @@ static char *value_string(char *buf, int buf_size, struct unit_value uv) ...@@ -121,7 +122,7 @@ static char *value_string(char *buf, int buf_size, struct unit_value uv)
long long int index; long long int index;
if (uv.unit == unit_byte_str && use_byte_value_binary_prefix) { if (uv.unit == unit_byte_str && use_byte_value_binary_prefix) {
index = (long long int) (log(vald)/log(2)) / 10; index = (long long int) (log2(vald)) / 10;
index = av_clip(index, 0, FF_ARRAY_ELEMS(binary_unit_prefixes) - 1); index = av_clip(index, 0, FF_ARRAY_ELEMS(binary_unit_prefixes) - 1);
vald /= pow(2, index * 10); vald /= pow(2, index * 10);
prefix_string = binary_unit_prefixes[index]; prefix_string = binary_unit_prefixes[index];
......
...@@ -56,6 +56,8 @@ OBJS-$(CONFIG_MPEGAUDIODSP) += mpegaudiodsp.o \ ...@@ -56,6 +56,8 @@ OBJS-$(CONFIG_MPEGAUDIODSP) += mpegaudiodsp.o \
mpegaudiodsp_fixed.o \ mpegaudiodsp_fixed.o \
mpegaudiodsp_float.o mpegaudiodsp_float.o
OBJS-$(CONFIG_MPEGVIDEO) += mpegvideo.o mpegvideo_motion.o OBJS-$(CONFIG_MPEGVIDEO) += mpegvideo.o mpegvideo_motion.o
OBJS-$(CONFIG_MPEGVIDEOENC) += mpegvideo_enc.o mpeg12data.o \
motion_est.o ratecontrol.o
RDFT-OBJS-$(CONFIG_HARDCODED_TABLES) += sin_tables.o RDFT-OBJS-$(CONFIG_HARDCODED_TABLES) += sin_tables.o
OBJS-$(CONFIG_RDFT) += rdft.o $(RDFT-OBJS-yes) OBJS-$(CONFIG_RDFT) += rdft.o $(RDFT-OBJS-yes)
OBJS-$(CONFIG_SINEWIN) += sinewin.o OBJS-$(CONFIG_SINEWIN) += sinewin.o
...@@ -144,9 +146,7 @@ OBJS-$(CONFIG_DIRAC_DECODER) += diracdec.o dirac.o diracdsp.o \ ...@@ -144,9 +146,7 @@ OBJS-$(CONFIG_DIRAC_DECODER) += diracdec.o dirac.o diracdsp.o \
dirac_arith.o mpeg12data.o dwt.o dirac_arith.o mpeg12data.o dwt.o
OBJS-$(CONFIG_DFA_DECODER) += dfa.o OBJS-$(CONFIG_DFA_DECODER) += dfa.o
OBJS-$(CONFIG_DNXHD_DECODER) += dnxhddec.o dnxhddata.o OBJS-$(CONFIG_DNXHD_DECODER) += dnxhddec.o dnxhddata.o
OBJS-$(CONFIG_DNXHD_ENCODER) += dnxhdenc.o dnxhddata.o \ OBJS-$(CONFIG_DNXHD_ENCODER) += dnxhdenc.o dnxhddata.o
mpegvideo_enc.o motion_est.o \
ratecontrol.o mpeg12data.o
OBJS-$(CONFIG_DPX_DECODER) += dpx.o OBJS-$(CONFIG_DPX_DECODER) += dpx.o
OBJS-$(CONFIG_DPX_ENCODER) += dpxenc.o OBJS-$(CONFIG_DPX_ENCODER) += dpxenc.o
OBJS-$(CONFIG_DSICINAUDIO_DECODER) += dsicinav.o OBJS-$(CONFIG_DSICINAUDIO_DECODER) += dsicinav.o
...@@ -199,17 +199,13 @@ OBJS-$(CONFIG_GIF_ENCODER) += gif.o lzwenc.o ...@@ -199,17 +199,13 @@ OBJS-$(CONFIG_GIF_ENCODER) += gif.o lzwenc.o
OBJS-$(CONFIG_GSM_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o OBJS-$(CONFIG_GSM_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o
OBJS-$(CONFIG_GSM_MS_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o OBJS-$(CONFIG_GSM_MS_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o
OBJS-$(CONFIG_H261_DECODER) += h261dec.o h261.o h261data.o error_resilience.o OBJS-$(CONFIG_H261_DECODER) += h261dec.o h261.o h261data.o error_resilience.o
OBJS-$(CONFIG_H261_ENCODER) += h261enc.o h261.o h261data.o \ OBJS-$(CONFIG_H261_ENCODER) += h261enc.o h261.o h261data.o
mpegvideo_enc.o motion_est.o \
ratecontrol.o mpeg12data.o
OBJS-$(CONFIG_H263_DECODER) += h263dec.o h263.o ituh263dec.o \ OBJS-$(CONFIG_H263_DECODER) += h263dec.o h263.o ituh263dec.o \
mpeg4video.o mpeg4videodec.o flvdec.o\ mpeg4video.o mpeg4videodec.o flvdec.o\
intelh263dec.o error_resilience.o intelh263dec.o error_resilience.o
OBJS-$(CONFIG_H263_VAAPI_HWACCEL) += vaapi_mpeg4.o OBJS-$(CONFIG_H263_VAAPI_HWACCEL) += vaapi_mpeg4.o
OBJS-$(CONFIG_H263_ENCODER) += mpegvideo_enc.o mpeg4video.o \ OBJS-$(CONFIG_H263_ENCODER) += mpeg4videoenc.o mpeg4video.o \
mpeg4videoenc.o motion_est.o \ h263.o ituh263enc.o flvenc.o \
ratecontrol.o h263.o ituh263enc.o \
flvenc.o mpeg12data.o \
error_resilience.o error_resilience.o
OBJS-$(CONFIG_H264_DECODER) += h264.o \ OBJS-$(CONFIG_H264_DECODER) += h264.o \
h264_loopfilter.o h264_direct.o \ h264_loopfilter.o h264_direct.o \
...@@ -243,9 +239,7 @@ OBJS-$(CONFIG_JV_DECODER) += jvdec.o ...@@ -243,9 +239,7 @@ OBJS-$(CONFIG_JV_DECODER) += jvdec.o
OBJS-$(CONFIG_KGV1_DECODER) += kgv1dec.o OBJS-$(CONFIG_KGV1_DECODER) += kgv1dec.o
OBJS-$(CONFIG_KMVC_DECODER) += kmvc.o OBJS-$(CONFIG_KMVC_DECODER) += kmvc.o
OBJS-$(CONFIG_LAGARITH_DECODER) += lagarith.o lagarithrac.o OBJS-$(CONFIG_LAGARITH_DECODER) += lagarith.o lagarithrac.o
OBJS-$(CONFIG_LJPEG_ENCODER) += ljpegenc.o mjpegenc.o mjpeg.o \ OBJS-$(CONFIG_LJPEG_ENCODER) += ljpegenc.o mjpegenc.o mjpeg.o
mpegvideo_enc.o motion_est.o \
ratecontrol.o mpeg12data.o
OBJS-$(CONFIG_LOCO_DECODER) += loco.o OBJS-$(CONFIG_LOCO_DECODER) += loco.o
OBJS-$(CONFIG_MACE3_DECODER) += mace.o OBJS-$(CONFIG_MACE3_DECODER) += mace.o
OBJS-$(CONFIG_MACE6_DECODER) += mace.o OBJS-$(CONFIG_MACE6_DECODER) += mace.o
...@@ -254,9 +248,7 @@ OBJS-$(CONFIG_MDEC_DECODER) += mdec.o mpeg12.o mpeg12data.o \ ...@@ -254,9 +248,7 @@ OBJS-$(CONFIG_MDEC_DECODER) += mdec.o mpeg12.o mpeg12data.o \
OBJS-$(CONFIG_MICRODVD_DECODER) += microdvddec.o ass.o OBJS-$(CONFIG_MICRODVD_DECODER) += microdvddec.o ass.o
OBJS-$(CONFIG_MIMIC_DECODER) += mimic.o OBJS-$(CONFIG_MIMIC_DECODER) += mimic.o
OBJS-$(CONFIG_MJPEG_DECODER) += mjpegdec.o mjpeg.o OBJS-$(CONFIG_MJPEG_DECODER) += mjpegdec.o mjpeg.o
OBJS-$(CONFIG_MJPEG_ENCODER) += mjpegenc.o mjpeg.o \ OBJS-$(CONFIG_MJPEG_ENCODER) += mjpegenc.o mjpeg.o
mpegvideo_enc.o motion_est.o \
ratecontrol.o mpeg12data.o
OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o mjpegdec.o mjpeg.o OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o mjpegdec.o mjpeg.o
OBJS-$(CONFIG_MLP_DECODER) += mlpdec.o mlpdsp.o OBJS-$(CONFIG_MLP_DECODER) += mlpdec.o mlpdsp.o
OBJS-$(CONFIG_MMVIDEO_DECODER) += mmvideo.o OBJS-$(CONFIG_MMVIDEO_DECODER) += mmvideo.o
...@@ -298,19 +290,15 @@ OBJS-$(CONFIG_MPEGVIDEO_DECODER) += mpeg12.o mpeg12data.o \ ...@@ -298,19 +290,15 @@ OBJS-$(CONFIG_MPEGVIDEO_DECODER) += mpeg12.o mpeg12data.o \
OBJS-$(CONFIG_MPEG_XVMC_DECODER) += mpegvideo_xvmc.o OBJS-$(CONFIG_MPEG_XVMC_DECODER) += mpegvideo_xvmc.o
OBJS-$(CONFIG_MPEG1VIDEO_DECODER) += mpeg12.o mpeg12data.o \ OBJS-$(CONFIG_MPEG1VIDEO_DECODER) += mpeg12.o mpeg12data.o \
error_resilience.o error_resilience.o
OBJS-$(CONFIG_MPEG1VIDEO_ENCODER) += mpeg12enc.o mpegvideo_enc.o \ OBJS-$(CONFIG_MPEG1VIDEO_ENCODER) += mpeg12enc.o mpeg12.o \
timecode.o \ timecode.o \
motion_est.o ratecontrol.o \
mpeg12.o mpeg12data.o \
error_resilience.o error_resilience.o
OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o
OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o
OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o \ OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o \
error_resilience.o error_resilience.o
OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpegvideo_enc.o \ OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o \
timecode.o \ timecode.o \
motion_est.o ratecontrol.o \
mpeg12.o mpeg12data.o \
error_resilience.o error_resilience.o
OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL) += vaapi_mpeg4.o OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL) += vaapi_mpeg4.o
OBJS-$(CONFIG_MSMPEG4V1_DECODER) += msmpeg4.o msmpeg4data.o OBJS-$(CONFIG_MSMPEG4V1_DECODER) += msmpeg4.o msmpeg4data.o
...@@ -411,10 +399,8 @@ OBJS-$(CONFIG_SMACKER_DECODER) += smacker.o ...@@ -411,10 +399,8 @@ OBJS-$(CONFIG_SMACKER_DECODER) += smacker.o
OBJS-$(CONFIG_SMC_DECODER) += smc.o OBJS-$(CONFIG_SMC_DECODER) += smc.o
OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o rangecoder.o OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o rangecoder.o
OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o rangecoder.o \ OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o rangecoder.o \
motion_est.o ratecontrol.o \ h263.o ituh263enc.o \
h263.o \ error_resilience.o
error_resilience.o ituh263enc.o \
mpegvideo_enc.o mpeg12data.o
OBJS-$(CONFIG_SOL_DPCM_DECODER) += dpcm.o OBJS-$(CONFIG_SOL_DPCM_DECODER) += dpcm.o
OBJS-$(CONFIG_SONIC_DECODER) += sonic.o OBJS-$(CONFIG_SONIC_DECODER) += sonic.o
OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o
...@@ -428,10 +414,8 @@ OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o ...@@ -428,10 +414,8 @@ OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o
OBJS-$(CONFIG_SVQ1_DECODER) += svq1dec.o svq1.o h263.o \ OBJS-$(CONFIG_SVQ1_DECODER) += svq1dec.o svq1.o h263.o \
error_resilience.o error_resilience.o
OBJS-$(CONFIG_SVQ1_ENCODER) += svq1enc.o svq1.o \ OBJS-$(CONFIG_SVQ1_ENCODER) += svq1enc.o svq1.o \
motion_est.o h263.o \ h263.o ituh263enc.o \
error_resilience.o \ error_resilience.o
ituh263enc.o mpegvideo_enc.o \
ratecontrol.o mpeg12data.o
OBJS-$(CONFIG_SVQ3_DECODER) += h264.o svq3.o \ OBJS-$(CONFIG_SVQ3_DECODER) += h264.o svq3.o \
h264_loopfilter.o h264_direct.o \ h264_loopfilter.o h264_direct.o \
h264_sei.o h264_ps.o h264_refs.o \ h264_sei.o h264_ps.o h264_refs.o \
......
...@@ -230,17 +230,7 @@ static int16_t square_root(int val) ...@@ -230,17 +230,7 @@ static int16_t square_root(int val)
*/ */
static int normalize_bits(int num, int width) static int normalize_bits(int num, int width)
{ {
int i = 0; return width - av_log2(num) - 1;
if (num) {
if (num == -1)
return width;
if (num < 0)
num = ~num;
i= width - av_log2(num) - 1;
i= FFMAX(i, 0);
}
return i;
} }
#define normalize_bits_int16(num) normalize_bits(num, 15) #define normalize_bits_int16(num) normalize_bits(num, 15)
......
...@@ -342,7 +342,7 @@ static void imc_decode_level_coefficients(IMCContext *q, int *levlCoeffBuf, ...@@ -342,7 +342,7 @@ static void imc_decode_level_coefficients(IMCContext *q, int *levlCoeffBuf,
// maybe some frequency division thingy // maybe some frequency division thingy
flcoeffs1[0] = 20000.0 / pow (2, levlCoeffBuf[0] * 0.18945); // 0.18945 = log2(10) * 0.05703125 flcoeffs1[0] = 20000.0 / pow (2, levlCoeffBuf[0] * 0.18945); // 0.18945 = log2(10) * 0.05703125
flcoeffs2[0] = log(flcoeffs1[0]) / log(2); flcoeffs2[0] = log2f(flcoeffs1[0]);
tmp = flcoeffs1[0]; tmp = flcoeffs1[0];
tmp2 = flcoeffs2[0]; tmp2 = flcoeffs2[0];
...@@ -414,7 +414,7 @@ static int bit_allocation(IMCContext *q, IMCChannel *chctx, ...@@ -414,7 +414,7 @@ static int bit_allocation(IMCContext *q, IMCChannel *chctx,
highest = FFMAX(highest, chctx->flcoeffs1[i]); highest = FFMAX(highest, chctx->flcoeffs1[i]);
for (i = 0; i < BANDS - 1; i++) for (i = 0; i < BANDS - 1; i++)
chctx->flcoeffs4[i] = chctx->flcoeffs3[i] - log(chctx->flcoeffs5[i]) / log(2); chctx->flcoeffs4[i] = chctx->flcoeffs3[i] - log2f(chctx->flcoeffs5[i]);
chctx->flcoeffs4[BANDS - 1] = limit; chctx->flcoeffs4[BANDS - 1] = limit;
highest = highest * 0.25; highest = highest * 0.25;
......
...@@ -1538,7 +1538,7 @@ static void update_last_header_values(SnowContext *s){ ...@@ -1538,7 +1538,7 @@ static void update_last_header_values(SnowContext *s){
} }
static int qscale2qlog(int qscale){ static int qscale2qlog(int qscale){
return rint(QROOT*log(qscale / (float)FF_QP2LAMBDA)/log(2)) return rint(QROOT*log2(qscale / (float)FF_QP2LAMBDA))
+ 61*QROOT/8; ///< 64 > 60 + 61*QROOT/8; ///< 64 > 60
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#if FF_API_VDA_ASYNC #if FF_API_VDA_ASYNC
#include <pthread.h> #include <pthread.h>
#endif #endif
#include <stdint.h> #include <stdint.h>
// emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes // emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes
...@@ -53,34 +54,33 @@ ...@@ -53,34 +54,33 @@
#if FF_API_VDA_ASYNC #if FF_API_VDA_ASYNC
/** /**
* This structure is used to store a decoded frame information and data. * This structure is used to store decoded frame information and data.
* *
* @deprecated Use synchronous decoding mode. * @deprecated Use synchronous decoding mode.
*
*/ */
typedef struct { typedef struct {
/** /**
* The PTS of the frame. * The PTS of the frame.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
int64_t pts; int64_t pts;
/** /**
* The CoreVideo buffer that contains the decoded data. * The CoreVideo buffer that contains the decoded data.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
CVPixelBufferRef cv_buffer; CVPixelBufferRef cv_buffer;
/** /**
* A pointer to the next frame. * A pointer to the next frame.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
struct vda_frame *next_frame; struct vda_frame *next_frame;
} vda_frame; } vda_frame;
#endif #endif
...@@ -93,106 +93,106 @@ typedef struct { ...@@ -93,106 +93,106 @@ typedef struct {
*/ */
struct vda_context { struct vda_context {
/** /**
* VDA decoder object. * VDA decoder object.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
VDADecoder decoder; VDADecoder decoder;
/** /**
* The Core Video pixel buffer that contains the current image data. * The Core Video pixel buffer that contains the current image data.
* *
* encoding: unused * encoding: unused
* decoding: Set by libavcodec. Unset by user. * decoding: Set by libavcodec. Unset by user.
*/ */
CVPixelBufferRef cv_buffer; CVPixelBufferRef cv_buffer;
/** /**
* An integer value that indicates whether use the hardware decoder in synchronous mode. * Use the hardware decoder in synchronous mode.
* *
* encoding: unused * encoding: unused
* decoding: Set by user. * decoding: Set by user.
*/ */
int use_sync_decoding; int use_sync_decoding;
#if FF_API_VDA_ASYNC #if FF_API_VDA_ASYNC
/** /**
* VDA frames queue ordered by presentation timestamp. * VDA frames queue ordered by presentation timestamp.
* *
* @deprecated Use synchronous decoding mode. * @deprecated Use synchronous decoding mode.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
vda_frame *queue; vda_frame *queue;
/** /**
* Mutex for locking queue operations. * Mutex for locking queue operations.
* *
* @deprecated Use synchronous decoding mode. * @deprecated Use synchronous decoding mode.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
pthread_mutex_t queue_mutex; pthread_mutex_t queue_mutex;
#endif #endif
/** /**
* The frame width. * The frame width.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by user. * - decoding: Set/Unset by user.
*/ */
int width; int width;
/** /**
* The frame height. * The frame height.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by user. * - decoding: Set/Unset by user.
*/ */
int height; int height;
/** /**
* The frame format. * The frame format.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by user. * - decoding: Set/Unset by user.
*/ */
int format; int format;
/** /**
* The pixel format for output image buffers. * The pixel format for output image buffers.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by user. * - decoding: Set/Unset by user.
*/ */
OSType cv_pix_fmt_type; OSType cv_pix_fmt_type;
/** /**
* The current bitstream buffer. * The current bitstream buffer.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
uint8_t *bitstream; uint8_t *priv_bitstream;
/** /**
* The current size of the bitstream. * The current size of the bitstream.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
int bitstream_size; int priv_bitstream_size;
/** /**
* The reference size used for fast reallocation. * The reference size used for fast reallocation.
* *
* - encoding: unused * - encoding: unused
* - decoding: Set/Unset by libavcodec. * - decoding: Set/Unset by libavcodec.
*/ */
int ref_size; int priv_allocated_size;
}; };
/** Create the video decoder. */ /** Create the video decoder. */
......
...@@ -130,7 +130,7 @@ static void vda_decoder_callback (void *vda_hw_ctx, ...@@ -130,7 +130,7 @@ static void vda_decoder_callback (void *vda_hw_ctx,
uint32_t infoFlags, uint32_t infoFlags,
CVImageBufferRef image_buffer) CVImageBufferRef image_buffer)
{ {
struct vda_context *vda_ctx = (struct vda_context*)vda_hw_ctx; struct vda_context *vda_ctx = vda_hw_ctx;
if (!image_buffer) if (!image_buffer)
return; return;
...@@ -140,8 +140,7 @@ static void vda_decoder_callback (void *vda_hw_ctx, ...@@ -140,8 +140,7 @@ static void vda_decoder_callback (void *vda_hw_ctx,
if (vda_ctx->use_sync_decoding) { if (vda_ctx->use_sync_decoding) {
vda_ctx->cv_buffer = CVPixelBufferRetain(image_buffer); vda_ctx->cv_buffer = CVPixelBufferRetain(image_buffer);
} } else {
else {
vda_frame *new_frame; vda_frame *new_frame;
vda_frame *queue_walker; vda_frame *queue_walker;
...@@ -188,8 +187,8 @@ static int vda_sync_decode(struct vda_context *vda_ctx) ...@@ -188,8 +187,8 @@ static int vda_sync_decode(struct vda_context *vda_ctx)
uint32_t flush_flags = 1 << 0; ///< kVDADecoderFlush_emitFrames uint32_t flush_flags = 1 << 0; ///< kVDADecoderFlush_emitFrames
coded_frame = CFDataCreate(kCFAllocatorDefault, coded_frame = CFDataCreate(kCFAllocatorDefault,
vda_ctx->bitstream, vda_ctx->priv_bitstream,
vda_ctx->bitstream_size); vda_ctx->priv_bitstream_size);
status = VDADecoderDecode(vda_ctx->decoder, 0, coded_frame, NULL); status = VDADecoderDecode(vda_ctx->decoder, 0, coded_frame, NULL);
...@@ -210,7 +209,7 @@ static int start_frame(AVCodecContext *avctx, ...@@ -210,7 +209,7 @@ static int start_frame(AVCodecContext *avctx,
if (!vda_ctx->decoder) if (!vda_ctx->decoder)
return -1; return -1;
vda_ctx->bitstream_size = 0; vda_ctx->priv_bitstream_size = 0;
return 0; return 0;
} }
...@@ -225,38 +224,38 @@ static int decode_slice(AVCodecContext *avctx, ...@@ -225,38 +224,38 @@ static int decode_slice(AVCodecContext *avctx,
if (!vda_ctx->decoder) if (!vda_ctx->decoder)
return -1; return -1;
tmp = av_fast_realloc(vda_ctx->bitstream, tmp = av_fast_realloc(vda_ctx->priv_bitstream,
&vda_ctx->ref_size, &vda_ctx->priv_allocated_size,
vda_ctx->bitstream_size+size+4); vda_ctx->priv_bitstream_size + size + 4);
if (!tmp) if (!tmp)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
vda_ctx->bitstream = tmp; vda_ctx->priv_bitstream = tmp;
AV_WB32(vda_ctx->bitstream+vda_ctx->bitstream_size, size); AV_WB32(vda_ctx->priv_bitstream + vda_ctx->priv_bitstream_size, size);
memcpy(vda_ctx->bitstream+vda_ctx->bitstream_size+4, buffer, size); memcpy(vda_ctx->priv_bitstream + vda_ctx->priv_bitstream_size + 4, buffer, size);
vda_ctx->bitstream_size += size + 4; vda_ctx->priv_bitstream_size += size + 4;
return 0; return 0;
} }
static int end_frame(AVCodecContext *avctx) static int end_frame(AVCodecContext *avctx)
{ {
H264Context *h = avctx->priv_data; H264Context *h = avctx->priv_data;
struct vda_context *vda_ctx = avctx->hwaccel_context; struct vda_context *vda_ctx = avctx->hwaccel_context;
AVFrame *frame = &h->s.current_picture_ptr->f; AVFrame *frame = &h->s.current_picture_ptr->f;
int status; int status;
if (!vda_ctx->decoder || !vda_ctx->bitstream) if (!vda_ctx->decoder || !vda_ctx->priv_bitstream)
return -1; return -1;
if (vda_ctx->use_sync_decoding) { if (vda_ctx->use_sync_decoding) {
status = vda_sync_decode(vda_ctx); status = vda_sync_decode(vda_ctx);
frame->data[3] = (void*)vda_ctx->cv_buffer; frame->data[3] = (void*)vda_ctx->cv_buffer;
} else { } else {
status = vda_decoder_decode(vda_ctx, vda_ctx->bitstream, status = vda_decoder_decode(vda_ctx, vda_ctx->priv_bitstream,
vda_ctx->bitstream_size, vda_ctx->priv_bitstream_size,
frame->reordered_opaque); frame->reordered_opaque);
} }
...@@ -280,8 +279,8 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx, ...@@ -280,8 +279,8 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx,
CFMutableDictionaryRef io_surface_properties; CFMutableDictionaryRef io_surface_properties;
CFNumberRef cv_pix_fmt; CFNumberRef cv_pix_fmt;
vda_ctx->bitstream = NULL; vda_ctx->priv_bitstream = NULL;
vda_ctx->ref_size = 0; vda_ctx->priv_allocated_size = 0;
#if FF_API_VDA_ASYNC #if FF_API_VDA_ASYNC
pthread_mutex_init(&vda_ctx->queue_mutex, NULL); pthread_mutex_init(&vda_ctx->queue_mutex, NULL);
...@@ -341,7 +340,7 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx, ...@@ -341,7 +340,7 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx,
status = VDADecoderCreate(config_info, status = VDADecoderCreate(config_info,
buffer_attributes, buffer_attributes,
(VDADecoderOutputCallback *)vda_decoder_callback, vda_decoder_callback,
vda_ctx, vda_ctx,
&vda_ctx->decoder); &vda_ctx->decoder);
...@@ -368,8 +367,7 @@ int ff_vda_destroy_decoder(struct vda_context *vda_ctx) ...@@ -368,8 +367,7 @@ int ff_vda_destroy_decoder(struct vda_context *vda_ctx)
vda_clear_queue(vda_ctx); vda_clear_queue(vda_ctx);
pthread_mutex_destroy(&vda_ctx->queue_mutex); pthread_mutex_destroy(&vda_ctx->queue_mutex);
#endif #endif
if (vda_ctx->bitstream) av_freep(&vda_ctx->priv_bitstream);
av_freep(&vda_ctx->bitstream);
return status; return status;
} }
......
...@@ -89,6 +89,9 @@ ...@@ -89,6 +89,9 @@
#ifndef FF_API_CODEC_ID #ifndef FF_API_CODEC_ID
#define FF_API_CODEC_ID (LIBAVCODEC_VERSION_MAJOR < 55) #define FF_API_CODEC_ID (LIBAVCODEC_VERSION_MAJOR < 55)
#endif #endif
#ifndef FF_API_VDA_ASYNC
#define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55)
#endif
#ifndef FF_API_VDA_ASYNC #ifndef FF_API_VDA_ASYNC
#define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55) #define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55)
......
...@@ -169,14 +169,16 @@ static av_always_inline int get_cabac_inline_x86(CABACContext *c, ...@@ -169,14 +169,16 @@ static av_always_inline int get_cabac_inline_x86(CABACContext *c,
__asm__ volatile( __asm__ volatile(
BRANCHLESS_GET_CABAC("%0", "%q0", "(%4)", "%1", "%w1", BRANCHLESS_GET_CABAC("%0", "%q0", "(%4)", "%1", "%w1",
"%2", "%q2", "%3", "%b3", "%2", "%q2", "%3", "%b3",
"%a6(%5)", "%a7(%5)", "%a8", "%a9", "%a10", "%11") "%c6(%5)", "%c7(%5)",
AV_STRINGIFY(H264_NORM_SHIFT_OFFSET),
AV_STRINGIFY(H264_LPS_RANGE_OFFSET),
AV_STRINGIFY(H264_MLPS_STATE_OFFSET),
"%8")
: "=&r"(bit), "+&r"(c->low), "+&r"(c->range), "=&q"(tmp) : "=&r"(bit), "+&r"(c->low), "+&r"(c->range), "=&q"(tmp)
: "r"(state), "r"(c), : "r"(state), "r"(c),
"i"(offsetof(CABACContext, bytestream)), "i"(offsetof(CABACContext, bytestream)),
"i"(offsetof(CABACContext, bytestream_end)), "i"(offsetof(CABACContext, bytestream_end))
"i"(H264_NORM_SHIFT_OFFSET), TABLES_ARG
"i"(H264_LPS_RANGE_OFFSET),
"i"(H264_MLPS_STATE_OFFSET) TABLES_ARG
: "%"REG_c, "memory" : "%"REG_c, "memory"
); );
return bit & 1; return bit & 1;
...@@ -188,8 +190,8 @@ static av_always_inline int get_cabac_bypass_sign_x86(CABACContext *c, int val) ...@@ -188,8 +190,8 @@ static av_always_inline int get_cabac_bypass_sign_x86(CABACContext *c, int val)
{ {
x86_reg tmp; x86_reg tmp;
__asm__ volatile( __asm__ volatile(
"movl %a6(%2), %k1 \n\t" "movl %c6(%2), %k1 \n\t"
"movl %a3(%2), %%eax \n\t" "movl %c3(%2), %%eax \n\t"
"shl $17, %k1 \n\t" "shl $17, %k1 \n\t"
"add %%eax, %%eax \n\t" "add %%eax, %%eax \n\t"
"sub %k1, %%eax \n\t" "sub %k1, %%eax \n\t"
...@@ -200,16 +202,16 @@ static av_always_inline int get_cabac_bypass_sign_x86(CABACContext *c, int val) ...@@ -200,16 +202,16 @@ static av_always_inline int get_cabac_bypass_sign_x86(CABACContext *c, int val)
"sub %%edx, %%ecx \n\t" "sub %%edx, %%ecx \n\t"
"test %%ax, %%ax \n\t" "test %%ax, %%ax \n\t"
"jnz 1f \n\t" "jnz 1f \n\t"
"mov %a4(%2), %1 \n\t" "mov %c4(%2), %1 \n\t"
"subl $0xFFFF, %%eax \n\t" "subl $0xFFFF, %%eax \n\t"
"movzwl (%1), %%edx \n\t" "movzwl (%1), %%edx \n\t"
"bswap %%edx \n\t" "bswap %%edx \n\t"
"shrl $15, %%edx \n\t" "shrl $15, %%edx \n\t"
"add $2, %1 \n\t" "add $2, %1 \n\t"
"addl %%edx, %%eax \n\t" "addl %%edx, %%eax \n\t"
"mov %1, %a4(%2) \n\t" "mov %1, %c4(%2) \n\t"
"1: \n\t" "1: \n\t"
"movl %%eax, %a3(%2) \n\t" "movl %%eax, %c3(%2) \n\t"
: "+c"(val), "=&r"(tmp) : "+c"(val), "=&r"(tmp)
: "r"(c), : "r"(c),
......
...@@ -63,7 +63,11 @@ static int decode_significance_x86(CABACContext *c, int max_coeff, ...@@ -63,7 +63,11 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3", BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3",
"%5", "%q5", "%k0", "%b0", "%5", "%q5", "%k0", "%b0",
"%a11(%6)", "%a12(%6)", "%a13", "%a14", "%a15", "%16") "%c11(%6)", "%c12(%6)",
AV_STRINGIFY(H264_NORM_SHIFT_OFFSET),
AV_STRINGIFY(H264_LPS_RANGE_OFFSET),
AV_STRINGIFY(H264_MLPS_STATE_OFFSET),
"%13")
"test $1, %4 \n\t" "test $1, %4 \n\t"
" jz 4f \n\t" " jz 4f \n\t"
...@@ -71,7 +75,11 @@ static int decode_significance_x86(CABACContext *c, int max_coeff, ...@@ -71,7 +75,11 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3", BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3",
"%5", "%q5", "%k0", "%b0", "%5", "%q5", "%k0", "%b0",
"%a11(%6)", "%a12(%6)", "%a13", "%a14", "%a15", "%16") "%c11(%6)", "%c12(%6)",
AV_STRINGIFY(H264_NORM_SHIFT_OFFSET),
AV_STRINGIFY(H264_LPS_RANGE_OFFSET),
AV_STRINGIFY(H264_MLPS_STATE_OFFSET),
"%13")
"sub %10, %1 \n\t" "sub %10, %1 \n\t"
"mov %2, %0 \n\t" "mov %2, %0 \n\t"
...@@ -99,10 +107,8 @@ static int decode_significance_x86(CABACContext *c, int max_coeff, ...@@ -99,10 +107,8 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
"+&r"(c->low), "=&r"(bit), "+&r"(c->range) "+&r"(c->low), "=&r"(bit), "+&r"(c->range)
: "r"(c), "m"(minusstart), "m"(end), "m"(minusindex), "m"(last_off), : "r"(c), "m"(minusstart), "m"(end), "m"(minusindex), "m"(last_off),
"i"(offsetof(CABACContext, bytestream)), "i"(offsetof(CABACContext, bytestream)),
"i"(offsetof(CABACContext, bytestream_end)), "i"(offsetof(CABACContext, bytestream_end))
"i"(H264_NORM_SHIFT_OFFSET), TABLES_ARG
"i"(H264_LPS_RANGE_OFFSET),
"i"(H264_MLPS_STATE_OFFSET) TABLES_ARG
: "%"REG_c, "memory" : "%"REG_c, "memory"
); );
return coeff_count; return coeff_count;
...@@ -137,22 +143,30 @@ static int decode_significance_8x8_x86(CABACContext *c, ...@@ -137,22 +143,30 @@ static int decode_significance_8x8_x86(CABACContext *c,
BRANCHLESS_GET_CABAC("%4", "%q4", "(%6)", "%3", "%w3", BRANCHLESS_GET_CABAC("%4", "%q4", "(%6)", "%3", "%w3",
"%5", "%q5", "%k0", "%b0", "%5", "%q5", "%k0", "%b0",
"%a12(%7)", "%a13(%7)", "%a14", "%a15", "%a16", "%18") "%c12(%7)", "%c13(%7)",
AV_STRINGIFY(H264_NORM_SHIFT_OFFSET),
AV_STRINGIFY(H264_LPS_RANGE_OFFSET),
AV_STRINGIFY(H264_MLPS_STATE_OFFSET),
"%15")
"mov %1, %k6 \n\t" "mov %1, %k6 \n\t"
"test $1, %4 \n\t" "test $1, %4 \n\t"
" jz 4f \n\t" " jz 4f \n\t"
#ifdef BROKEN_RELOCATIONS #ifdef BROKEN_RELOCATIONS
"movzbl %a17(%18, %q6), %k6\n\t" "movzbl %c14(%15, %q6), %k6\n\t"
#else #else
"movzbl "MANGLE(ff_h264_cabac_tables)"+%a17(%k6), %k6\n\t" "movzbl "MANGLE(ff_h264_cabac_tables)"+%c14(%k6), %k6\n\t"
#endif #endif
"add %11, %6 \n\t" "add %11, %6 \n\t"
BRANCHLESS_GET_CABAC("%4", "%q4", "(%6)", "%3", "%w3", BRANCHLESS_GET_CABAC("%4", "%q4", "(%6)", "%3", "%w3",
"%5", "%q5", "%k0", "%b0", "%5", "%q5", "%k0", "%b0",
"%a12(%7)", "%a13(%7)", "%a14", "%a15", "%a16", "%18") "%c12(%7)", "%c13(%7)",
AV_STRINGIFY(H264_NORM_SHIFT_OFFSET),
AV_STRINGIFY(H264_LPS_RANGE_OFFSET),
AV_STRINGIFY(H264_MLPS_STATE_OFFSET),
"%15")
"mov %2, %0 \n\t" "mov %2, %0 \n\t"
"mov %1, %k6 \n\t" "mov %1, %k6 \n\t"
...@@ -179,9 +193,6 @@ static int decode_significance_8x8_x86(CABACContext *c, ...@@ -179,9 +193,6 @@ static int decode_significance_8x8_x86(CABACContext *c,
"m"(sig_off), "m"(last_coeff_ctx_base), "m"(sig_off), "m"(last_coeff_ctx_base),
"i"(offsetof(CABACContext, bytestream)), "i"(offsetof(CABACContext, bytestream)),
"i"(offsetof(CABACContext, bytestream_end)), "i"(offsetof(CABACContext, bytestream_end)),
"i"(H264_NORM_SHIFT_OFFSET),
"i"(H264_LPS_RANGE_OFFSET),
"i"(H264_MLPS_STATE_OFFSET),
"i"(H264_LAST_COEFF_FLAG_OFFSET_8x8_OFFSET) TABLES_ARG "i"(H264_LAST_COEFF_FLAG_OFFSET_8x8_OFFSET) TABLES_ARG
: "%"REG_c, "memory" : "%"REG_c, "memory"
); );
......
...@@ -25,21 +25,21 @@ ...@@ -25,21 +25,21 @@
#if HAVE_7REGS #if HAVE_7REGS
extern void ff_mlp_firorder_8; extern char ff_mlp_firorder_8;
extern void ff_mlp_firorder_7; extern char ff_mlp_firorder_7;
extern void ff_mlp_firorder_6; extern char ff_mlp_firorder_6;
extern void ff_mlp_firorder_5; extern char ff_mlp_firorder_5;
extern void ff_mlp_firorder_4; extern char ff_mlp_firorder_4;
extern void ff_mlp_firorder_3; extern char ff_mlp_firorder_3;
extern void ff_mlp_firorder_2; extern char ff_mlp_firorder_2;
extern void ff_mlp_firorder_1; extern char ff_mlp_firorder_1;
extern void ff_mlp_firorder_0; extern char ff_mlp_firorder_0;
extern void ff_mlp_iirorder_4; extern char ff_mlp_iirorder_4;
extern void ff_mlp_iirorder_3; extern char ff_mlp_iirorder_3;
extern void ff_mlp_iirorder_2; extern char ff_mlp_iirorder_2;
extern void ff_mlp_iirorder_1; extern char ff_mlp_iirorder_1;
extern void ff_mlp_iirorder_0; extern char ff_mlp_iirorder_0;
static const void *firtable[9] = { &ff_mlp_firorder_0, &ff_mlp_firorder_1, static const void *firtable[9] = { &ff_mlp_firorder_0, &ff_mlp_firorder_1,
&ff_mlp_firorder_2, &ff_mlp_firorder_3, &ff_mlp_firorder_2, &ff_mlp_firorder_3,
......
...@@ -107,8 +107,8 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -107,8 +107,8 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
uint8_t *next, int w, int prefs, uint8_t *next, int w, int prefs,
int mrefs, int parity, int mode) int mrefs, int parity, int mode)
{ {
uint8_t tmp[5*16]; uint8_t tmpU[5*16];
uint8_t *tmpA= (uint8_t*)(((uint64_t)(tmp+15)) & ~15); uint8_t *tmp= (uint8_t*)(((uint64_t)(tmpU+15)) & ~15);
int x; int x;
#define FILTER\ #define FILTER\
...@@ -122,9 +122,9 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -122,9 +122,9 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
MOVQ" "MM"3, "MM"4 \n\t"\ MOVQ" "MM"3, "MM"4 \n\t"\
"paddw "MM"2, "MM"3 \n\t"\ "paddw "MM"2, "MM"3 \n\t"\
"psraw $1, "MM"3 \n\t" /* d = (prev2[x] + next2[x])>>1 */\ "psraw $1, "MM"3 \n\t" /* d = (prev2[x] + next2[x])>>1 */\
MOVQ" "MM"0, (%[tmpA]) \n\t" /* c */\ MOVQ" "MM"0, (%[tmp]) \n\t" /* c */\
MOVQ" "MM"3, 16(%[tmpA]) \n\t" /* d */\ MOVQ" "MM"3, 16(%[tmp]) \n\t" /* d */\
MOVQ" "MM"1, 32(%[tmpA]) \n\t" /* e */\ MOVQ" "MM"1, 32(%[tmp]) \n\t" /* e */\
"psubw "MM"4, "MM"2 \n\t"\ "psubw "MM"4, "MM"2 \n\t"\
PABS( MM"4", MM"2") /* temporal_diff0 */\ PABS( MM"4", MM"2") /* temporal_diff0 */\
LOAD("(%[prev],%[mrefs])", MM"3") /* prev[x-refs] */\ LOAD("(%[prev],%[mrefs])", MM"3") /* prev[x-refs] */\
...@@ -146,7 +146,7 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -146,7 +146,7 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
"paddw "MM"4, "MM"3 \n\t" /* temporal_diff2 */\ "paddw "MM"4, "MM"3 \n\t" /* temporal_diff2 */\
"psrlw $1, "MM"3 \n\t"\ "psrlw $1, "MM"3 \n\t"\
"pmaxsw "MM"3, "MM"2 \n\t"\ "pmaxsw "MM"3, "MM"2 \n\t"\
MOVQ" "MM"2, 48(%[tmpA]) \n\t" /* diff */\ MOVQ" "MM"2, 48(%[tmp]) \n\t" /* diff */\
\ \
"paddw "MM"0, "MM"1 \n\t"\ "paddw "MM"0, "MM"1 \n\t"\
"paddw "MM"0, "MM"0 \n\t"\ "paddw "MM"0, "MM"0 \n\t"\
...@@ -177,7 +177,7 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -177,7 +177,7 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
CHECK2\ CHECK2\
\ \
/* if(p->mode<2) ... */\ /* if(p->mode<2) ... */\
MOVQ" 48(%[tmpA]), "MM"6 \n\t" /* diff */\ MOVQ" 48(%[tmp]), "MM"6 \n\t" /* diff */\
"cmpl $2, %[mode] \n\t"\ "cmpl $2, %[mode] \n\t"\
"jge 1f \n\t"\ "jge 1f \n\t"\
LOAD("(%["prev2"],%[mrefs],2)", MM"2") /* prev2[x-2*refs] */\ LOAD("(%["prev2"],%[mrefs],2)", MM"2") /* prev2[x-2*refs] */\
...@@ -188,9 +188,9 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -188,9 +188,9 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
"paddw "MM"5, "MM"3 \n\t"\ "paddw "MM"5, "MM"3 \n\t"\
"psrlw $1, "MM"2 \n\t" /* b */\ "psrlw $1, "MM"2 \n\t" /* b */\
"psrlw $1, "MM"3 \n\t" /* f */\ "psrlw $1, "MM"3 \n\t" /* f */\
MOVQ" (%[tmpA]), "MM"4 \n\t" /* c */\ MOVQ" (%[tmp]), "MM"4 \n\t" /* c */\
MOVQ" 16(%[tmpA]), "MM"5 \n\t" /* d */\ MOVQ" 16(%[tmp]), "MM"5 \n\t" /* d */\
MOVQ" 32(%[tmpA]), "MM"7 \n\t" /* e */\ MOVQ" 32(%[tmp]), "MM"7 \n\t" /* e */\
"psubw "MM"4, "MM"2 \n\t" /* b-c */\ "psubw "MM"4, "MM"2 \n\t" /* b-c */\
"psubw "MM"7, "MM"3 \n\t" /* f-e */\ "psubw "MM"7, "MM"3 \n\t" /* f-e */\
MOVQ" "MM"5, "MM"0 \n\t"\ MOVQ" "MM"5, "MM"0 \n\t"\
...@@ -209,7 +209,7 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -209,7 +209,7 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
"pmaxsw "MM"4, "MM"6 \n\t" /* diff= MAX3(diff, min, -max); */\ "pmaxsw "MM"4, "MM"6 \n\t" /* diff= MAX3(diff, min, -max); */\
"1: \n\t"\ "1: \n\t"\
\ \
MOVQ" 16(%[tmpA]), "MM"2 \n\t" /* d */\ MOVQ" 16(%[tmp]), "MM"2 \n\t" /* d */\
MOVQ" "MM"2, "MM"3 \n\t"\ MOVQ" "MM"2, "MM"3 \n\t"\
"psubw "MM"6, "MM"2 \n\t" /* d-diff */\ "psubw "MM"6, "MM"2 \n\t" /* d-diff */\
"paddw "MM"6, "MM"3 \n\t" /* d+diff */\ "paddw "MM"6, "MM"3 \n\t" /* d+diff */\
...@@ -217,14 +217,13 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, ...@@ -217,14 +217,13 @@ static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur,
"pminsw "MM"3, "MM"1 \n\t" /* d = clip(spatial_pred, d-diff, d+diff); */\ "pminsw "MM"3, "MM"1 \n\t" /* d = clip(spatial_pred, d-diff, d+diff); */\
"packuswb "MM"1, "MM"1 \n\t"\ "packuswb "MM"1, "MM"1 \n\t"\
\ \
:\ ::[prev] "r"(prev),\
:[tmpA] "r"(tmpA),\
[prev] "r"(prev),\
[cur] "r"(cur),\ [cur] "r"(cur),\
[next] "r"(next),\ [next] "r"(next),\
[prefs]"r"((x86_reg)prefs),\ [prefs]"r"((x86_reg)prefs),\
[mrefs]"r"((x86_reg)mrefs),\ [mrefs]"r"((x86_reg)mrefs),\
[mode] "g"(mode)\ [mode] "g"(mode),\
[tmp] "r"(tmp)\
);\ );\
__asm__ volatile(MOV" "MM"1, %0" :"=m"(*dst));\ __asm__ volatile(MOV" "MM"1, %0" :"=m"(*dst));\
dst += STEP;\ dst += STEP;\
......
...@@ -1200,6 +1200,9 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt) ...@@ -1200,6 +1200,9 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt)
#endif #endif
switch (pkt->type) { switch (pkt->type) {
case RTMP_PT_BYTES_READ:
av_dlog(s, "received bytes read report\n");
break;
case RTMP_PT_CHUNK_SIZE: case RTMP_PT_CHUNK_SIZE:
if ((ret = handle_chunk_size(s, pkt)) < 0) if ((ret = handle_chunk_size(s, pkt)) < 0)
return ret; return ret;
......
...@@ -44,7 +44,7 @@ static av_always_inline av_const int FASTDIV(int a, int b) ...@@ -44,7 +44,7 @@ static av_always_inline av_const int FASTDIV(int a, int b)
} }
#define av_clip_uint8 av_clip_uint8_arm #define av_clip_uint8 av_clip_uint8_arm
static av_always_inline av_const uint8_t av_clip_uint8_arm(int a) static av_always_inline av_const unsigned av_clip_uint8_arm(int a)
{ {
unsigned x; unsigned x;
__asm__ ("usat %0, #8, %1" : "=r"(x) : "r"(a)); __asm__ ("usat %0, #8, %1" : "=r"(x) : "r"(a));
...@@ -52,15 +52,15 @@ static av_always_inline av_const uint8_t av_clip_uint8_arm(int a) ...@@ -52,15 +52,15 @@ static av_always_inline av_const uint8_t av_clip_uint8_arm(int a)
} }
#define av_clip_int8 av_clip_int8_arm #define av_clip_int8 av_clip_int8_arm
static av_always_inline av_const uint8_t av_clip_int8_arm(int a) static av_always_inline av_const int av_clip_int8_arm(int a)
{ {
unsigned x; int x;
__asm__ ("ssat %0, #8, %1" : "=r"(x) : "r"(a)); __asm__ ("ssat %0, #8, %1" : "=r"(x) : "r"(a));
return x; return x;
} }
#define av_clip_uint16 av_clip_uint16_arm #define av_clip_uint16 av_clip_uint16_arm
static av_always_inline av_const uint16_t av_clip_uint16_arm(int a) static av_always_inline av_const unsigned av_clip_uint16_arm(int a)
{ {
unsigned x; unsigned x;
__asm__ ("usat %0, #16, %1" : "=r"(x) : "r"(a)); __asm__ ("usat %0, #16, %1" : "=r"(x) : "r"(a));
...@@ -68,7 +68,7 @@ static av_always_inline av_const uint16_t av_clip_uint16_arm(int a) ...@@ -68,7 +68,7 @@ static av_always_inline av_const uint16_t av_clip_uint16_arm(int a)
} }
#define av_clip_int16 av_clip_int16_arm #define av_clip_int16 av_clip_int16_arm
static av_always_inline av_const int16_t av_clip_int16_arm(int a) static av_always_inline av_const int av_clip_int16_arm(int a)
{ {
int x; int x;
__asm__ ("ssat %0, #16, %1" : "=r"(x) : "r"(a)); __asm__ ("ssat %0, #16, %1" : "=r"(x) : "r"(a));
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment