Commit 686959e8 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  doxygen: Consistently use '@' instead of '\' for Doxygen markup.
  Use av_printf_format to check the usage of printf style functions
  Add av_printf_format, for marking printf style format strings and their parameters
  ARM: enable thumb for Cortex-M* CPUs
  nsvdec: Propagate error values instead of returning 0 in nsv_read_header().
  build: remove SRC_PATH_BARE variable
  build: move basic rules and variables to main Makefile
  build: move special targets to end of main Makefile
  lavdev: improve feedback in case of invalid frame rate/size
  vfwcap: prefer "framerate_q" over "fps" in vfw_read_header()
  v4l2: prefer "framerate_q" over "fps" in v4l2_set_parameters()
  fbdev: prefer "framerate_q" over "fps" in device context
  bktr: prefer "framerate" over "fps" for grab_read_header()
  ALSA: implement channel layout for playback.
  alsa: support unsigned variants of already supported signed formats.
  alsa: add support for more formats.
  ARM: allow building in Thumb2 mode

Conflicts:
	common.mak
	doc/APIchanges
	libavcodec/vdpau.h
	libavdevice/alsa-audio-common.c
	libavdevice/fbdev.c
	libavdevice/libdc1394.c
	libavutil/avutil.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents ffc6c8a4 adbfc605
include config.mak include config.mak
SRC_DIR = $(SRC_PATH_BARE) vpath %.c $(SRC_PATH)
vpath %.h $(SRC_PATH)
vpath %.S $(SRC_PATH)
vpath %.asm $(SRC_PATH)
vpath %.v $(SRC_PATH)
vpath %.texi $(SRC_PATH)
ifndef V
Q = @
ECHO = printf "$(1)\t%s\n" $(2)
BRIEF = CC AS YASM AR LD HOSTCC STRIP CP
SILENT = DEPCC YASMDEP RM RANLIB
MSG = $@
M = @$(call ECHO,$(TAG),$@);
$(foreach VAR,$(BRIEF), \
$(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_PATH)/%=%)); $(INSTALL))
endif
IFLAGS := -I. -I$(SRC_PATH)
CPPFLAGS := $(IFLAGS) $(CPPFLAGS)
CFLAGS += $(ECFLAGS)
YASMFLAGS += $(IFLAGS) -Pconfig.asm
HOSTCFLAGS += $(IFLAGS)
%.o: %.c
$(CCDEP)
$(CC) $(CPPFLAGS) $(CFLAGS) $(CC_DEPFLAGS) -c $(CC_O) $<
%.o: %.S
$(ASDEP)
$(AS) $(CPPFLAGS) $(ASFLAGS) $(AS_DEPFLAGS) -c -o $@ $<
%.ho: %.h
$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused -c -o $@ -x c $<
vpath %.c $(SRC_DIR) %.ver: %.v
vpath %.h $(SRC_DIR) $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
vpath %.S $(SRC_DIR)
vpath %.asm $(SRC_DIR) %.c %.h: TAG = GEN
vpath %.v $(SRC_DIR)
vpath %.texi $(SRC_PATH_BARE) # Do not delete intermediate files from chains of implicit rules
$(OBJS):
PROGS-$(CONFIG_FFMPEG) += ffmpeg PROGS-$(CONFIG_FFMPEG) += ffmpeg
PROGS-$(CONFIG_FFPLAY) += ffplay PROGS-$(CONFIG_FFPLAY) += ffplay
...@@ -37,7 +73,7 @@ FFLIBS-$(CONFIG_SWSCALE) += swscale ...@@ -37,7 +73,7 @@ FFLIBS-$(CONFIG_SWSCALE) += swscale
FFLIBS := avutil FFLIBS := avutil
DATA_FILES := $(wildcard $(SRC_DIR)/ffpresets/*.ffpreset) DATA_FILES := $(wildcard $(SRC_PATH)/ffpresets/*.ffpreset)
SKIPHEADERS = cmdutils_common_opts.h SKIPHEADERS = cmdutils_common_opts.h
...@@ -54,7 +90,7 @@ $(PROGS): %$(EXESUF): %_g$(EXESUF) ...@@ -54,7 +90,7 @@ $(PROGS): %$(EXESUF): %_g$(EXESUF)
$(STRIP) $@ $(STRIP) $@
config.h: .config config.h: .config
.config: $(wildcard $(FFLIBS:%=$(SRC_DIR)/lib%/all*.c)) .config: $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))
@-tput bold 2>/dev/null @-tput bold 2>/dev/null
@-printf '\nWARNING: $(?F) newer than config.h, rerun configure\n\n' @-printf '\nWARNING: $(?F) newer than config.h, rerun configure\n\n'
@-tput sgr0 2>/dev/null @-tput sgr0 2>/dev/null
...@@ -93,8 +129,8 @@ tools/%.o: tools/%.c ...@@ -93,8 +129,8 @@ tools/%.o: tools/%.c
-include $(wildcard tools/*.d) -include $(wildcard tools/*.d)
VERSION_SH = $(SRC_PATH_BARE)/version.sh VERSION_SH = $(SRC_PATH)/version.sh
GIT_LOG = $(SRC_PATH_BARE)/.git/logs/HEAD GIT_LOG = $(SRC_PATH)/.git/logs/HEAD
.version: $(wildcard $(GIT_LOG)) $(VERSION_SH) config.mak .version: $(wildcard $(GIT_LOG)) $(VERSION_SH) config.mak
.version: M=@ .version: M=@
...@@ -151,5 +187,13 @@ check: test ...@@ -151,5 +187,13 @@ check: test
include doc/Makefile include doc/Makefile
include tests/Makefile include tests/Makefile
# Dummy rule to stop make trying to rebuild removed or renamed headers
%.h:
@:
# Disable suffix rules. Most of the builtin rules are suffix rules,
# so this saves some time on slow systems.
.SUFFIXES:
.PHONY: all alltools *clean check config examples install* .PHONY: all alltools *clean check config examples install*
.PHONY: testprogs uninstall* .PHONY: testprogs uninstall*
...@@ -5,56 +5,6 @@ ...@@ -5,56 +5,6 @@
# first so "all" becomes default target # first so "all" becomes default target
all: all-yes all: all-yes
ifndef SUBDIR
ifndef V
Q = @
ECHO = printf "$(1)\t%s\n" $(2)
BRIEF = CC AS YASM AR LD HOSTCC STRIP CP
SILENT = DEPCC YASMDEP RM RANLIB
MSG = $@
M = @$(call ECHO,$(TAG),$@);
$(foreach VAR,$(BRIEF), \
$(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
endif
IFLAGS := -I. -I$(SRC_PATH)
CPPFLAGS := $(IFLAGS) $(CPPFLAGS)
CFLAGS += $(ECFLAGS)
YASMFLAGS += $(IFLAGS) -Pconfig.asm
HOSTCFLAGS += $(IFLAGS)
%.o: %.c
$(CCDEP)
$(CC) $(CPPFLAGS) $(CFLAGS) $(CC_DEPFLAGS) -c $(CC_O) $<
%.o: %.S
$(ASDEP)
$(AS) $(CPPFLAGS) $(ASFLAGS) $(AS_DEPFLAGS) -c -o $@ $<
%.ho: %.h
$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused -c -o $@ -x c $<
%.ver: %.v
$(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
%.c %.h: TAG = GEN
# Dummy rule to stop make trying to rebuild removed or renamed headers
%.h:
@:
# Disable suffix rules. Most of the builtin rules are suffix rules,
# so this saves some time on slow systems.
.SUFFIXES:
# Do not delete intermediate files from chains of implicit rules
$(OBJS):
endif
OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes) OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
OBJS += $(OBJS-yes) OBJS += $(OBJS-yes)
......
...@@ -971,6 +971,7 @@ CONFIG_LIST=" ...@@ -971,6 +971,7 @@ CONFIG_LIST="
static static
swscale swscale
swscale_alpha swscale_alpha
thumb
vaapi vaapi
vdpau vdpau
version3 version3
...@@ -1717,7 +1718,7 @@ DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM' ...@@ -1717,7 +1718,7 @@ DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
# find source path # find source path
if test -f configure; then if test -f configure; then
source_path="$(pwd)" source_path=.
disable source_path_used disable source_path_used
else else
source_path=$(cd $(dirname "$0"); pwd) source_path=$(cd $(dirname "$0"); pwd)
...@@ -2300,7 +2301,7 @@ elif enabled arm; then ...@@ -2300,7 +2301,7 @@ elif enabled arm; then
case $cpu in case $cpu in
cortex-a*) subarch=armv7a ;; cortex-a*) subarch=armv7a ;;
cortex-r*) subarch=armv7r ;; cortex-r*) subarch=armv7r ;;
cortex-m*) subarch=armv7m ;; cortex-m*) enable thumb; subarch=armv7m ;;
arm11*) subarch=armv6 ;; arm11*) subarch=armv6 ;;
arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;; arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
armv4*|arm7*|arm9[24]*) subarch=armv4 ;; armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
...@@ -2640,7 +2641,7 @@ if enabled alpha; then ...@@ -2640,7 +2641,7 @@ if enabled alpha; then
elif enabled arm; then elif enabled arm; then
check_cflags -marm enabled thumb && check_cflags -mthumb || check_cflags -marm
nogas=die nogas=die
if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
...@@ -3325,8 +3326,7 @@ INCDIR=\$(DESTDIR)$incdir ...@@ -3325,8 +3326,7 @@ INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir DATADIR=\$(DESTDIR)$datadir
MANDIR=\$(DESTDIR)$mandir MANDIR=\$(DESTDIR)$mandir
SRC_PATH="$source_path" SRC_PATH=$source_path
SRC_PATH_BARE=$source_path
CC_IDENT=$cc_ident CC_IDENT=$cc_ident
ARCH=$arch ARCH=$arch
CC=$cc CC=$cc
......
...@@ -43,6 +43,9 @@ API changes, most recent first: ...@@ -43,6 +43,9 @@ API changes, most recent first:
2011-06-12 - xxxxxxx - lavfi 2.16.0 - avfilter_graph_parse() 2011-06-12 - xxxxxxx - lavfi 2.16.0 - avfilter_graph_parse()
Change avfilter_graph_parse() signature. Change avfilter_graph_parse() signature.
2011-06-xx - xxxxxxx - lavu 51.8.0 - attributes.h
Add av_printf_format().
2011-06-xx - xxxxxxx - lavf 53.2.0 - avformat.h 2011-06-xx - xxxxxxx - lavf 53.2.0 - avformat.h
Add avformat_open_input and avformat_write_header(). Add avformat_open_input and avformat_write_header().
Deprecate av_open_input_stream, av_open_input_file, Deprecate av_open_input_stream, av_open_input_file,
......
...@@ -11,9 +11,9 @@ documentation: $(DOCS) ...@@ -11,9 +11,9 @@ documentation: $(DOCS)
TEXIDEP = awk '/^@include/ { printf "$@: $(@D)/%s\n", $$2 }' <$< >$(@:%=%.d) TEXIDEP = awk '/^@include/ { printf "$@: $(@D)/%s\n", $$2 }' <$< >$(@:%=%.d)
doc/%.html: TAG = HTML doc/%.html: TAG = HTML
doc/%.html: doc/%.texi $(SRC_PATH_BARE)/doc/t2h.init doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.init
$(Q)$(TEXIDEP) $(Q)$(TEXIDEP)
$(M)texi2html -monolithic --init-file $(SRC_PATH_BARE)/doc/t2h.init --output $@ $< $(M)texi2html -monolithic --init-file $(SRC_PATH)/doc/t2h.init --output $@ $<
doc/%.pod: TAG = POD doc/%.pod: TAG = POD
doc/%.pod: doc/%.texi doc/%.pod: doc/%.texi
......
...@@ -30,11 +30,11 @@ ...@@ -30,11 +30,11 @@
#define PITCH_DELAY_MAX 143 #define PITCH_DELAY_MAX 143
/** /**
* \brief Decode pitch delay of the first subframe encoded by 8 bits with 1/3 * @brief Decode pitch delay of the first subframe encoded by 8 bits with 1/3
* resolution. * resolution.
* \param ac_index adaptive codebook index (8 bits) * @param ac_index adaptive codebook index (8 bits)
* *
* \return pitch delay in 1/3 units * @return pitch delay in 1/3 units
* *
* Pitch delay is coded: * Pitch delay is coded:
* with 1/3 resolution, 19 < pitch_delay < 85 * with 1/3 resolution, 19 < pitch_delay < 85
...@@ -43,18 +43,18 @@ ...@@ -43,18 +43,18 @@
int ff_acelp_decode_8bit_to_1st_delay3(int ac_index); int ff_acelp_decode_8bit_to_1st_delay3(int ac_index);
/** /**
* \brief Decode pitch delay of the second subframe encoded by 5 or 6 bits * @brief Decode pitch delay of the second subframe encoded by 5 or 6 bits
* with 1/3 precision. * with 1/3 precision.
* \param ac_index adaptive codebook index (5 or 6 bits) * @param ac_index adaptive codebook index (5 or 6 bits)
* \param pitch_delay_min lower bound (integer) of pitch delay interval * @param pitch_delay_min lower bound (integer) of pitch delay interval
* for second subframe * for second subframe
* *
* \return pitch delay in 1/3 units * @return pitch delay in 1/3 units
* *
* Pitch delay is coded: * Pitch delay is coded:
* with 1/3 resolution, -6 < pitch_delay - int(prev_pitch_delay) < 5 * with 1/3 resolution, -6 < pitch_delay - int(prev_pitch_delay) < 5
* *
* \remark The routine is used in G.729 @@8k, AMR @@10.2k, AMR @@7.95k, * @remark The routine is used in G.729 @@8k, AMR @@10.2k, AMR @@7.95k,
* AMR @@7.4k for the second subframe. * AMR @@7.4k for the second subframe.
*/ */
int ff_acelp_decode_5_6_bit_to_2nd_delay3( int ff_acelp_decode_5_6_bit_to_2nd_delay3(
...@@ -62,19 +62,19 @@ int ff_acelp_decode_5_6_bit_to_2nd_delay3( ...@@ -62,19 +62,19 @@ int ff_acelp_decode_5_6_bit_to_2nd_delay3(
int pitch_delay_min); int pitch_delay_min);
/** /**
* \brief Decode pitch delay with 1/3 precision. * @brief Decode pitch delay with 1/3 precision.
* \param ac_index adaptive codebook index (4 bits) * @param ac_index adaptive codebook index (4 bits)
* \param pitch_delay_min lower bound (integer) of pitch delay interval for * @param pitch_delay_min lower bound (integer) of pitch delay interval for
* second subframe * second subframe
* *
* \return pitch delay in 1/3 units * @return pitch delay in 1/3 units
* *
* Pitch delay is coded: * Pitch delay is coded:
* integers only, -6 < pitch_delay - int(prev_pitch_delay) <= -2 * integers only, -6 < pitch_delay - int(prev_pitch_delay) <= -2
* with 1/3 resolution, -2 < pitch_delay - int(prev_pitch_delay) < 1 * with 1/3 resolution, -2 < pitch_delay - int(prev_pitch_delay) < 1
* integers only, 1 <= pitch_delay - int(prev_pitch_delay) < 5 * integers only, 1 <= pitch_delay - int(prev_pitch_delay) < 5
* *
* \remark The routine is used in G.729 @@6.4k, AMR @@6.7k, AMR @@5.9k, * @remark The routine is used in G.729 @@6.4k, AMR @@6.7k, AMR @@5.9k,
* AMR @@5.15k, AMR @@4.75k for the second subframe. * AMR @@5.15k, AMR @@4.75k for the second subframe.
*/ */
int ff_acelp_decode_4bit_to_2nd_delay3( int ff_acelp_decode_4bit_to_2nd_delay3(
...@@ -82,44 +82,44 @@ int ff_acelp_decode_4bit_to_2nd_delay3( ...@@ -82,44 +82,44 @@ int ff_acelp_decode_4bit_to_2nd_delay3(
int pitch_delay_min); int pitch_delay_min);
/** /**
* \brief Decode pitch delay of the first subframe encoded by 9 bits * @brief Decode pitch delay of the first subframe encoded by 9 bits
* with 1/6 precision. * with 1/6 precision.
* \param ac_index adaptive codebook index (9 bits) * @param ac_index adaptive codebook index (9 bits)
* *
* \return pitch delay in 1/6 units * @return pitch delay in 1/6 units
* *
* Pitch delay is coded: * Pitch delay is coded:
* with 1/6 resolution, 17 < pitch_delay < 95 * with 1/6 resolution, 17 < pitch_delay < 95
* integers only, 95 <= pitch_delay <= 143 * integers only, 95 <= pitch_delay <= 143
* *
* \remark The routine is used in AMR @@12.2k for the first and third subframes. * @remark The routine is used in AMR @@12.2k for the first and third subframes.
*/ */
int ff_acelp_decode_9bit_to_1st_delay6(int ac_index); int ff_acelp_decode_9bit_to_1st_delay6(int ac_index);
/** /**
* \brief Decode pitch delay of the second subframe encoded by 6 bits * @brief Decode pitch delay of the second subframe encoded by 6 bits
* with 1/6 precision. * with 1/6 precision.
* \param ac_index adaptive codebook index (6 bits) * @param ac_index adaptive codebook index (6 bits)
* \param pitch_delay_min lower bound (integer) of pitch delay interval for * @param pitch_delay_min lower bound (integer) of pitch delay interval for
* second subframe * second subframe
* *
* \return pitch delay in 1/6 units * @return pitch delay in 1/6 units
* *
* Pitch delay is coded: * Pitch delay is coded:
* with 1/6 resolution, -6 < pitch_delay - int(prev_pitch_delay) < 5 * with 1/6 resolution, -6 < pitch_delay - int(prev_pitch_delay) < 5
* *
* \remark The routine is used in AMR @@12.2k for the second and fourth subframes. * @remark The routine is used in AMR @@12.2k for the second and fourth subframes.
*/ */
int ff_acelp_decode_6bit_to_2nd_delay6( int ff_acelp_decode_6bit_to_2nd_delay6(
int ac_index, int ac_index,
int pitch_delay_min); int pitch_delay_min);
/** /**
* \brief Update past quantized energies * @brief Update past quantized energies
* \param[in,out] quant_energy past quantized energies (5.10) * @param[in,out] quant_energy past quantized energies (5.10)
* \param gain_corr_factor gain correction factor * @param gain_corr_factor gain correction factor
* \param log2_ma_pred_order log2() of MA prediction order * @param log2_ma_pred_order log2() of MA prediction order
* \param erasure frame erasure flag * @param erasure frame erasure flag
* *
* If frame erasure flag is not equal to zero, memory is updated with * If frame erasure flag is not equal to zero, memory is updated with
* averaged energy, attenuated by 4dB: * averaged energy, attenuated by 4dB:
...@@ -128,7 +128,7 @@ int ff_acelp_decode_6bit_to_2nd_delay6( ...@@ -128,7 +128,7 @@ int ff_acelp_decode_6bit_to_2nd_delay6(
* In normal mode memory is updated with * In normal mode memory is updated with
* Er - Ep = 20 * log10(gain_corr_factor) * Er - Ep = 20 * log10(gain_corr_factor)
* *
* \remark The routine is used in G.729 and AMR (all modes). * @remark The routine is used in G.729 and AMR (all modes).
*/ */
void ff_acelp_update_past_gain( void ff_acelp_update_past_gain(
int16_t* quant_energy, int16_t* quant_energy,
...@@ -137,16 +137,16 @@ void ff_acelp_update_past_gain( ...@@ -137,16 +137,16 @@ void ff_acelp_update_past_gain(
int erasure); int erasure);
/** /**
* \brief Decode the adaptive codebook gain and add * @brief Decode the adaptive codebook gain and add
* correction (4.1.5 and 3.9.1 of G.729). * correction (4.1.5 and 3.9.1 of G.729).
* \param dsp initialized dsputil context * @param dsp initialized dsputil context
* \param gain_corr_factor gain correction factor (2.13) * @param gain_corr_factor gain correction factor (2.13)
* \param fc_v fixed-codebook vector (2.13) * @param fc_v fixed-codebook vector (2.13)
* \param mr_energy mean innovation energy and fixed-point correction (7.13) * @param mr_energy mean innovation energy and fixed-point correction (7.13)
* \param[in,out] quant_energy past quantized energies (5.10) * @param[in,out] quant_energy past quantized energies (5.10)
* \param subframe_size length of subframe * @param subframe_size length of subframe
* *
* \return quantized fixed-codebook gain (14.1) * @return quantized fixed-codebook gain (14.1)
* *
* The routine implements equations 69, 66 and 71 of the G.729 specification (3.9.1) * The routine implements equations 69, 66 and 71 of the G.729 specification (3.9.1)
* *
...@@ -205,7 +205,7 @@ void ff_acelp_update_past_gain( ...@@ -205,7 +205,7 @@ void ff_acelp_update_past_gain(
* *
* mr_energy = Em + 10log(N) + 10log(2^26) * mr_energy = Em + 10log(N) + 10log(2^26)
* *
* \remark The routine is used in G.729 and AMR (all modes). * @remark The routine is used in G.729 and AMR (all modes).
*/ */
int16_t ff_acelp_decode_gain_code( int16_t ff_acelp_decode_gain_code(
DSPContext *dsp, DSPContext *dsp,
......
...@@ -114,12 +114,15 @@ static inline float *VMUL4S(float *dst, const float *v, unsigned idx, ...@@ -114,12 +114,15 @@ static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
"vmov d1, %2, %3 \n\t" "vmov d1, %2, %3 \n\t"
"lsls %6, %6, #1 \n\t" "lsls %6, %6, #1 \n\t"
"and %0, %5, #1<<31 \n\t" "and %0, %5, #1<<31 \n\t"
"it cs \n\t"
"lslcs %5, %5, #1 \n\t" "lslcs %5, %5, #1 \n\t"
"lsls %6, %6, #1 \n\t" "lsls %6, %6, #1 \n\t"
"and %1, %5, #1<<31 \n\t" "and %1, %5, #1<<31 \n\t"
"it cs \n\t"
"lslcs %5, %5, #1 \n\t" "lslcs %5, %5, #1 \n\t"
"lsls %6, %6, #1 \n\t" "lsls %6, %6, #1 \n\t"
"and %2, %5, #1<<31 \n\t" "and %2, %5, #1<<31 \n\t"
"it cs \n\t"
"lslcs %5, %5, #1 \n\t" "lslcs %5, %5, #1 \n\t"
"vmov d4, %0, %1 \n\t" "vmov d4, %0, %1 \n\t"
"and %3, %5, #1<<31 \n\t" "and %3, %5, #1<<31 \n\t"
......
...@@ -27,6 +27,7 @@ function ff_ac3_update_bap_counts_arm, export=1 ...@@ -27,6 +27,7 @@ function ff_ac3_update_bap_counts_arm, export=1
lsl r3, lr, #1 lsl r3, lr, #1
ldrh r12, [r0, r3] ldrh r12, [r0, r3]
subs r2, r2, #1 subs r2, r2, #1
it gt
ldrbgt lr, [r1], #1 ldrbgt lr, [r1], #1
add r12, r12, #1 add r12, r12, #1
strh r12, [r0, r3] strh r12, [r0, r3]
......
...@@ -42,9 +42,11 @@ function ff_ac3_bit_alloc_calc_bap_armv6, export=1 ...@@ -42,9 +42,11 @@ function ff_ac3_bit_alloc_calc_bap_armv6, export=1
mov r11, r10 mov r11, r10
ldrb r10, [r4], #1 @ band_start_tab[band++] ldrb r10, [r4], #1 @ band_start_tab[band++]
subs r9, r9, r5 @ - floor subs r9, r9, r5 @ - floor
it lt
movlt r9, #0 movlt r9, #0
cmp r10, r3 @ - end cmp r10, r3 @ - end
and r9, r9, r8 @ & 0x1fe0 and r9, r9, r8 @ & 0x1fe0
ite gt
subgt r8, r3, r11 subgt r8, r3, r11
suble r8, r10, r11 suble r8, r10, r11
add r9, r9, r5 @ + floor => m add r9, r9, r5 @ + floor => m
......
...@@ -41,6 +41,7 @@ endfunc ...@@ -41,6 +41,7 @@ endfunc
function ff_ac3_exponent_min_neon, export=1 function ff_ac3_exponent_min_neon, export=1
cmp r1, #0 cmp r1, #0
it eq
bxeq lr bxeq lr
push {lr} push {lr}
mov r12, #256 mov r12, #256
......
...@@ -24,9 +24,18 @@ ...@@ -24,9 +24,18 @@
# define ELF # define ELF
#else #else
# define ELF @ # define ELF @
#endif
#if CONFIG_THUMB
# define A @
# define T
#else
# define A
# define T @
#endif #endif
.syntax unified .syntax unified
T .thumb
.macro require8 val=1 .macro require8 val=1
ELF .eabi_attribute 24, \val ELF .eabi_attribute 24, \val
...@@ -82,6 +91,90 @@ ELF .size \name, . - \name ...@@ -82,6 +91,90 @@ ELF .size \name, . - \name
#endif #endif
.endm .endm
.macro ldr_pre rt, rn, rm:vararg
A ldr \rt, [\rn, \rm]!
T add \rn, \rn, \rm
T ldr \rt, [\rn]
.endm
.macro ldr_post rt, rn, rm:vararg
A ldr \rt, [\rn], \rm
T ldr \rt, [\rn]
T add \rn, \rn, \rm
.endm
.macro ldrd_reg rt, rt2, rn, rm
A ldrd \rt, \rt2, [\rn, \rm]
T add \rt, \rn, \rm
T ldrd \rt, \rt2, [\rt]
.endm
.macro ldrd_post rt, rt2, rn, rm
A ldrd \rt, \rt2, [\rn], \rm
T ldrd \rt, \rt2, [\rn]
T add \rn, \rn, \rm
.endm
.macro ldrh_pre rt, rn, rm
A ldrh \rt, [\rn, \rm]!
T add \rn, \rn, \rm
T ldrh \rt, [\rn]
.endm
.macro ldrh_dpre rt, rn, rm
A ldrh \rt, [\rn, -\rm]!
T sub \rn, \rn, \rm
T ldrh \rt, [\rn]
.endm
.macro ldrh_post rt, rn, rm
A ldrh \rt, [\rn], \rm
T ldrh \rt, [\rn]
T add \rn, \rn, \rm
.endm
.macro str_post rt, rn, rm:vararg
A str \rt, [\rn], \rm
T str \rt, [\rn]
T add \rn, \rn, \rm
.endm
.macro strb_post rt, rn, rm:vararg
A strb \rt, [\rn], \rm
T strb \rt, [\rn]
T add \rn, \rn, \rm
.endm
.macro strd_post rt, rt2, rn, rm
A strd \rt, \rt2, [\rn], \rm
T strd \rt, \rt2, [\rn]
T add \rn, \rn, \rm
.endm
.macro strh_pre rt, rn, rm
A strh \rt, [\rn, \rm]!
T add \rn, \rn, \rm
T strh \rt, [\rn]
.endm
.macro strh_dpre rt, rn, rm
A strh \rt, [\rn, -\rm]!
T sub \rn, \rn, \rm
T strh \rt, [\rn]
.endm
.macro strh_post rt, rn, rm
A strh \rt, [\rn], \rm
T strh \rt, [\rn]
T add \rn, \rn, \rm
.endm
.macro strh_dpost rt, rn, rm
A strh \rt, [\rn], -\rm
T strh \rt, [\rn]
T sub \rn, \rn, \rm
.endm
#if HAVE_VFP_ARGS #if HAVE_VFP_ARGS
.eabi_attribute 28, 1 .eabi_attribute 28, 1
# define VFP # define VFP
......
...@@ -27,6 +27,7 @@ function ff_dca_lfe_fir_neon, export=1 ...@@ -27,6 +27,7 @@ function ff_dca_lfe_fir_neon, export=1
add r5, r2, #256*4-16 @ cf1 add r5, r2, #256*4-16 @ cf1
sub r1, r1, #12 sub r1, r1, #12
cmp r3, #32 cmp r3, #32
ite eq
moveq r6, #256/32 moveq r6, #256/32
movne r6, #256/64 movne r6, #256/64
NOVFP vldr s0, [sp, #16] @ scale NOVFP vldr s0, [sp, #16] @ scale
......
...@@ -554,10 +554,12 @@ endfunc ...@@ -554,10 +554,12 @@ endfunc
and r9, r5, r14 and r9, r5, r14
and r10, r6, r14 and r10, r6, r14
and r11, r7, r14 and r11, r7, r14
it eq
andeq r14, r14, r14, \rnd #1 andeq r14, r14, r14, \rnd #1
add r8, r8, r10 add r8, r8, r10
add r9, r9, r11 add r9, r9, r11
ldr r12, =0xfcfcfcfc >> 2 ldr r12, =0xfcfcfcfc >> 2
itt eq
addeq r8, r8, r14 addeq r8, r8, r14
addeq r9, r9, r14 addeq r9, r9, r14
and r4, r12, r4, lsr #2 and r4, r12, r4, lsr #2
...@@ -638,8 +640,10 @@ function ff_add_pixels_clamped_arm, export=1 ...@@ -638,8 +640,10 @@ function ff_add_pixels_clamped_arm, export=1
mvn r5, r5 mvn r5, r5
mvn r7, r7 mvn r7, r7
tst r6, #0x100 tst r6, #0x100
it ne
movne r6, r5, lsr #24 movne r6, r5, lsr #24
tst r8, #0x100 tst r8, #0x100
it ne
movne r8, r7, lsr #24 movne r8, r7, lsr #24
mov r9, r6 mov r9, r6
ldrsh r5, [r0, #4] /* moved form [A] */ ldrsh r5, [r0, #4] /* moved form [A] */
...@@ -654,8 +658,10 @@ function ff_add_pixels_clamped_arm, export=1 ...@@ -654,8 +658,10 @@ function ff_add_pixels_clamped_arm, export=1
mvn r5, r5 mvn r5, r5
mvn r7, r7 mvn r7, r7
tst r6, #0x100 tst r6, #0x100
it ne
movne r6, r5, lsr #24 movne r6, r5, lsr #24
tst r8, #0x100 tst r8, #0x100
it ne
movne r8, r7, lsr #24 movne r8, r7, lsr #24
orr r9, r9, r6, lsl #16 orr r9, r9, r6, lsl #16
ldr r4, [r1, #4] /* moved form [B] */ ldr r4, [r1, #4] /* moved form [B] */
...@@ -676,8 +682,10 @@ function ff_add_pixels_clamped_arm, export=1 ...@@ -676,8 +682,10 @@ function ff_add_pixels_clamped_arm, export=1
mvn r5, r5 mvn r5, r5
mvn r7, r7 mvn r7, r7
tst r6, #0x100 tst r6, #0x100
it ne
movne r6, r5, lsr #24 movne r6, r5, lsr #24
tst r8, #0x100 tst r8, #0x100
it ne
movne r8, r7, lsr #24 movne r8, r7, lsr #24
mov r9, r6 mov r9, r6
ldrsh r5, [r0, #12] /* moved from [D] */ ldrsh r5, [r0, #12] /* moved from [D] */
...@@ -692,8 +700,10 @@ function ff_add_pixels_clamped_arm, export=1 ...@@ -692,8 +700,10 @@ function ff_add_pixels_clamped_arm, export=1
mvn r5, r5 mvn r5, r5
mvn r7, r7 mvn r7, r7
tst r6, #0x100 tst r6, #0x100
it ne
movne r6, r5, lsr #24 movne r6, r5, lsr #24
tst r8, #0x100 tst r8, #0x100
it ne
movne r8, r7, lsr #24 movne r8, r7, lsr #24
orr r9, r9, r6, lsl #16 orr r9, r9, r6, lsl #16
add r0, r0, #16 /* moved from [E] */ add r0, r0, #16 /* moved from [E] */
......
...@@ -47,16 +47,16 @@ function ff_put_pixels16_armv6, export=1 ...@@ -47,16 +47,16 @@ function ff_put_pixels16_armv6, export=1
ldr r5, [r1, #4] ldr r5, [r1, #4]
ldr r6, [r1, #8] ldr r6, [r1, #8]
ldr r7, [r1, #12] ldr r7, [r1, #12]
ldr r4, [r1], r2 ldr_post r4, r1, r2
strd r6, r7, [r0, #8] strd r6, r7, [r0, #8]
ldr r9, [r1, #4] ldr r9, [r1, #4]
strd r4, r5, [r0], r2 strd_post r4, r5, r0, r2
ldr r10, [r1, #8] ldr r10, [r1, #8]
ldr r11, [r1, #12] ldr r11, [r1, #12]
ldr r8, [r1], r2 ldr_post r8, r1, r2
strd r10, r11, [r0, #8] strd r10, r11, [r0, #8]
subs r3, r3, #2 subs r3, r3, #2
strd r8, r9, [r0], r2 strd_post r8, r9, r0, r2
bne 1b bne 1b
pop {r4-r11} pop {r4-r11}
...@@ -67,12 +67,12 @@ function ff_put_pixels8_armv6, export=1 ...@@ -67,12 +67,12 @@ function ff_put_pixels8_armv6, export=1
push {r4-r7} push {r4-r7}
1: 1:
ldr r5, [r1, #4] ldr r5, [r1, #4]
ldr r4, [r1], r2 ldr_post r4, r1, r2
ldr r7, [r1, #4] ldr r7, [r1, #4]
strd r4, r5, [r0], r2 strd_post r4, r5, r0, r2
ldr r6, [r1], r2 ldr_post r6, r1, r2
subs r3, r3, #2 subs r3, r3, #2
strd r6, r7, [r0], r2 strd_post r6, r7, r0, r2
bne 1b bne 1b
pop {r4-r7} pop {r4-r7}
...@@ -90,7 +90,7 @@ function ff_put_pixels8_x2_armv6, export=1 ...@@ -90,7 +90,7 @@ function ff_put_pixels8_x2_armv6, export=1
ldr r5, [r1, #4] ldr r5, [r1, #4]
ldr r7, [r1, #5] ldr r7, [r1, #5]
lsr r6, r4, #8 lsr r6, r4, #8
ldr r8, [r1, r2]! ldr_pre r8, r1, r2
orr r6, r6, r5, lsl #24 orr r6, r6, r5, lsl #24
ldr r9, [r1, #4] ldr r9, [r1, #4]
ldr r11, [r1, #5] ldr r11, [r1, #5]
...@@ -112,9 +112,9 @@ function ff_put_pixels8_x2_armv6, export=1 ...@@ -112,9 +112,9 @@ function ff_put_pixels8_x2_armv6, export=1
uhadd8 r9, r9, r11 uhadd8 r9, r9, r11
and r6, r6, r12 and r6, r6, r12
uadd8 r8, r8, r14 uadd8 r8, r8, r14
strd r4, r5, [r0], r2 strd_post r4, r5, r0, r2
uadd8 r9, r9, r6 uadd8 r9, r9, r6
strd r8, r9, [r0], r2 strd_post r8, r9, r0, r2
bne 1b bne 1b
pop {r4-r11, pc} pop {r4-r11, pc}
...@@ -127,7 +127,7 @@ function ff_put_pixels8_y2_armv6, export=1 ...@@ -127,7 +127,7 @@ function ff_put_pixels8_y2_armv6, export=1
orr r12, r12, r12, lsl #16 orr r12, r12, r12, lsl #16
ldr r4, [r1] ldr r4, [r1]
ldr r5, [r1, #4] ldr r5, [r1, #4]
ldr r6, [r1, r2]! ldr_pre r6, r1, r2
ldr r7, [r1, #4] ldr r7, [r1, #4]
1: 1:
subs r3, r3, #2 subs r3, r3, #2
...@@ -136,7 +136,7 @@ function ff_put_pixels8_y2_armv6, export=1 ...@@ -136,7 +136,7 @@ function ff_put_pixels8_y2_armv6, export=1
uhadd8 r9, r5, r7 uhadd8 r9, r5, r7
eor r11, r5, r7 eor r11, r5, r7
and r10, r10, r12 and r10, r10, r12
ldr r4, [r1, r2]! ldr_pre r4, r1, r2
uadd8 r8, r8, r10 uadd8 r8, r8, r10
and r11, r11, r12 and r11, r11, r12
uadd8 r9, r9, r11 uadd8 r9, r9, r11
...@@ -148,11 +148,11 @@ function ff_put_pixels8_y2_armv6, export=1 ...@@ -148,11 +148,11 @@ function ff_put_pixels8_y2_armv6, export=1
eor r7, r5, r7 eor r7, r5, r7
uadd8 r10, r10, r6 uadd8 r10, r10, r6
and r7, r7, r12 and r7, r7, r12
ldr r6, [r1, r2]! ldr_pre r6, r1, r2
uadd8 r11, r11, r7 uadd8 r11, r11, r7
strd r8, r9, [r0], r2 strd_post r8, r9, r0, r2
ldr r7, [r1, #4] ldr r7, [r1, #4]
strd r10, r11, [r0], r2 strd_post r10, r11, r0, r2
bne 1b bne 1b
pop {r4-r11} pop {r4-r11}
...@@ -166,7 +166,7 @@ function ff_put_pixels8_x2_no_rnd_armv6, export=1 ...@@ -166,7 +166,7 @@ function ff_put_pixels8_x2_no_rnd_armv6, export=1
ldr r4, [r1] ldr r4, [r1]
ldr r5, [r1, #4] ldr r5, [r1, #4]
ldr r7, [r1, #5] ldr r7, [r1, #5]
ldr r8, [r1, r2]! ldr_pre r8, r1, r2
ldr r9, [r1, #4] ldr r9, [r1, #4]
ldr r14, [r1, #5] ldr r14, [r1, #5]
add r1, r1, r2 add r1, r1, r2
...@@ -191,16 +191,16 @@ function ff_put_pixels8_y2_no_rnd_armv6, export=1 ...@@ -191,16 +191,16 @@ function ff_put_pixels8_y2_no_rnd_armv6, export=1
push {r4-r9, lr} push {r4-r9, lr}
ldr r4, [r1] ldr r4, [r1]
ldr r5, [r1, #4] ldr r5, [r1, #4]
ldr r6, [r1, r2]! ldr_pre r6, r1, r2
ldr r7, [r1, #4] ldr r7, [r1, #4]
1: 1:
subs r3, r3, #2 subs r3, r3, #2
uhadd8 r8, r4, r6 uhadd8 r8, r4, r6
ldr r4, [r1, r2]! ldr_pre r4, r1, r2
uhadd8 r9, r5, r7 uhadd8 r9, r5, r7
ldr r5, [r1, #4] ldr r5, [r1, #4]
uhadd8 r12, r4, r6 uhadd8 r12, r4, r6
ldr r6, [r1, r2]! ldr_pre r6, r1, r2
uhadd8 r14, r5, r7 uhadd8 r14, r5, r7
ldr r7, [r1, #4] ldr r7, [r1, #4]
stm r0, {r8,r9} stm r0, {r8,r9}
...@@ -220,44 +220,44 @@ function ff_avg_pixels8_armv6, export=1 ...@@ -220,44 +220,44 @@ function ff_avg_pixels8_armv6, export=1
orr lr, lr, lr, lsl #16 orr lr, lr, lr, lsl #16
ldrd r4, r5, [r0] ldrd r4, r5, [r0]
ldr r10, [r1, #4] ldr r10, [r1, #4]
ldr r9, [r1], r2 ldr_post r9, r1, r2
subs r3, r3, #2 subs r3, r3, #2
1: 1:
pld [r1, r2] pld [r1, r2]
eor r8, r4, r9 eor r8, r4, r9
uhadd8 r4, r4, r9 uhadd8 r4, r4, r9
eor r12, r5, r10 eor r12, r5, r10
ldrd r6, r7, [r0, r2] ldrd_reg r6, r7, r0, r2
uhadd8 r5, r5, r10 uhadd8 r5, r5, r10
and r8, r8, lr and r8, r8, lr
ldr r10, [r1, #4] ldr r10, [r1, #4]
and r12, r12, lr and r12, r12, lr
uadd8 r4, r4, r8 uadd8 r4, r4, r8
ldr r9, [r1], r2 ldr_post r9, r1, r2
eor r8, r6, r9 eor r8, r6, r9
uadd8 r5, r5, r12 uadd8 r5, r5, r12
pld [r1, r2, lsl #1] pld [r1, r2, lsl #1]
eor r12, r7, r10 eor r12, r7, r10
uhadd8 r6, r6, r9 uhadd8 r6, r6, r9
strd r4, r5, [r0], r2 strd_post r4, r5, r0, r2
uhadd8 r7, r7, r10 uhadd8 r7, r7, r10
beq 2f beq 2f
and r8, r8, lr and r8, r8, lr
ldrd r4, r5, [r0, r2] ldrd_reg r4, r5, r0, r2
uadd8 r6, r6, r8 uadd8 r6, r6, r8
ldr r10, [r1, #4] ldr r10, [r1, #4]
and r12, r12, lr and r12, r12, lr
subs r3, r3, #2 subs r3, r3, #2
uadd8 r7, r7, r12 uadd8 r7, r7, r12
ldr r9, [r1], r2 ldr_post r9, r1, r2
strd r6, r7, [r0], r2 strd_post r6, r7, r0, r2
b 1b b 1b
2: 2:
and r8, r8, lr and r8, r8, lr
and r12, r12, lr and r12, r12, lr
uadd8 r6, r6, r8 uadd8 r6, r6, r8
uadd8 r7, r7, r12 uadd8 r7, r7, r12
strd r6, r7, [r0], r2 strd_post r6, r7, r0, r2
pop {r4-r10, pc} pop {r4-r10, pc}
endfunc endfunc
...@@ -284,7 +284,7 @@ function ff_add_pixels_clamped_armv6, export=1 ...@@ -284,7 +284,7 @@ function ff_add_pixels_clamped_armv6, export=1
orr r6, r8, r5, lsl #8 orr r6, r8, r5, lsl #8
orr r7, r4, lr, lsl #8 orr r7, r4, lr, lsl #8
subs r3, r3, #1 subs r3, r3, #1
strd r6, r7, [r1], r2 strd_post r6, r7, r1, r2
bgt 1b bgt 1b
pop {r4-r8,pc} pop {r4-r8,pc}
endfunc endfunc
...@@ -294,7 +294,7 @@ function ff_get_pixels_armv6, export=1 ...@@ -294,7 +294,7 @@ function ff_get_pixels_armv6, export=1
push {r4-r8, lr} push {r4-r8, lr}
mov lr, #8 mov lr, #8
1: 1:
ldrd r4, r5, [r1], r2 ldrd_post r4, r5, r1, r2
subs lr, lr, #1 subs lr, lr, #1
uxtb16 r6, r4 uxtb16 r6, r4
uxtb16 r4, r4, ror #8 uxtb16 r4, r4, ror #8
...@@ -317,8 +317,8 @@ function ff_diff_pixels_armv6, export=1 ...@@ -317,8 +317,8 @@ function ff_diff_pixels_armv6, export=1
push {r4-r9, lr} push {r4-r9, lr}
mov lr, #8 mov lr, #8
1: 1:
ldrd r4, r5, [r1], r3 ldrd_post r4, r5, r1, r3
ldrd r6, r7, [r2], r3 ldrd_post r6, r7, r2, r3
uxtb16 r8, r4 uxtb16 r8, r4
uxtb16 r4, r4, ror #8 uxtb16 r4, r4, ror #8
uxtb16 r9, r6 uxtb16 r9, r6
...@@ -492,19 +492,19 @@ function ff_pix_abs8_armv6, export=1 ...@@ -492,19 +492,19 @@ function ff_pix_abs8_armv6, export=1
push {r4-r9, lr} push {r4-r9, lr}
mov r0, #0 mov r0, #0
mov lr, #0 mov lr, #0
ldrd r4, r5, [r1], r3 ldrd_post r4, r5, r1, r3
1: 1:
subs r12, r12, #2 subs r12, r12, #2
ldr r7, [r2, #4] ldr r7, [r2, #4]
ldr r6, [r2], r3 ldr_post r6, r2, r3
ldrd r8, r9, [r1], r3 ldrd_post r8, r9, r1, r3
usada8 r0, r4, r6, r0 usada8 r0, r4, r6, r0
pld [r2, r3] pld [r2, r3]
usada8 lr, r5, r7, lr usada8 lr, r5, r7, lr
ldr r7, [r2, #4] ldr r7, [r2, #4]
ldr r6, [r2], r3 ldr_post r6, r2, r3
beq 2f beq 2f
ldrd r4, r5, [r1], r3 ldrd_post r4, r5, r1, r3
usada8 r0, r8, r6, r0 usada8 r0, r8, r6, r0
pld [r2, r3] pld [r2, r3]
usada8 lr, r9, r7, lr usada8 lr, r9, r7, lr
...@@ -613,7 +613,7 @@ function ff_pix_sum_armv6, export=1 ...@@ -613,7 +613,7 @@ function ff_pix_sum_armv6, export=1
ldr r7, [r0, #12] ldr r7, [r0, #12]
usada8 r2, r6, lr, r2 usada8 r2, r6, lr, r2
beq 2f beq 2f
ldr r4, [r0, r1]! ldr_pre r4, r0, r1
usada8 r3, r7, lr, r3 usada8 r3, r7, lr, r3
bgt 1b bgt 1b
2: 2:
......
...@@ -531,6 +531,7 @@ function ff_vorbis_inverse_coupling_neon, export=1 ...@@ -531,6 +531,7 @@ function ff_vorbis_inverse_coupling_neon, export=1
2: vst1.32 {d2-d3}, [r3, :128]! 2: vst1.32 {d2-d3}, [r3, :128]!
vst1.32 {d0-d1}, [r12,:128]! vst1.32 {d0-d1}, [r12,:128]!
it lt
bxlt lr bxlt lr
3: vld1.32 {d2-d3}, [r1,:128] 3: vld1.32 {d2-d3}, [r1,:128]
...@@ -575,6 +576,7 @@ NOVFP vdup.32 q8, r2 ...@@ -575,6 +576,7 @@ NOVFP vdup.32 q8, r2
2: vst1.32 {q2},[r0,:128]! 2: vst1.32 {q2},[r0,:128]!
vst1.32 {q3},[r0,:128]! vst1.32 {q3},[r0,:128]!
ands len, len, #15 ands len, len, #15
it eq
bxeq lr bxeq lr
3: vld1.32 {q0},[r1,:128]! 3: vld1.32 {q0},[r1,:128]!
vmul.f32 q0, q0, q8 vmul.f32 q0, q0, q8
...@@ -638,6 +640,7 @@ NOVFP ldr r3, [sp] ...@@ -638,6 +640,7 @@ NOVFP ldr r3, [sp]
2: vst1.32 {q8},[r0,:128]! 2: vst1.32 {q8},[r0,:128]!
vst1.32 {q9},[r0,:128]! vst1.32 {q9},[r0,:128]!
ands r3, r3, #7 ands r3, r3, #7
it eq
popeq {pc} popeq {pc}
3: vld1.32 {q0},[r1,:128]! 3: vld1.32 {q0},[r1,:128]!
ldr r12, [r2], #4 ldr r12, [r2], #4
......
...@@ -55,18 +55,23 @@ function ff_vector_fmul_vfp, export=1 ...@@ -55,18 +55,23 @@ function ff_vector_fmul_vfp, export=1
1: 1:
subs r3, r3, #16 subs r3, r3, #16
vmul.f32 s12, s4, s12 vmul.f32 s12, s4, s12
itttt ge
vldmiage r1!, {s16-s19} vldmiage r1!, {s16-s19}
vldmiage r2!, {s24-s27} vldmiage r2!, {s24-s27}
vldmiage r1!, {s20-s23} vldmiage r1!, {s20-s23}
vldmiage r2!, {s28-s31} vldmiage r2!, {s28-s31}
it ge
vmulge.f32 s24, s16, s24 vmulge.f32 s24, s16, s24
vstmia r0!, {s8-s11} vstmia r0!, {s8-s11}
vstmia r0!, {s12-s15} vstmia r0!, {s12-s15}
it ge
vmulge.f32 s28, s20, s28 vmulge.f32 s28, s20, s28
itttt gt
vldmiagt r1!, {s0-s3} vldmiagt r1!, {s0-s3}
vldmiagt r2!, {s8-s11} vldmiagt r2!, {s8-s11}
vldmiagt r1!, {s4-s7} vldmiagt r1!, {s4-s7}
vldmiagt r2!, {s12-s15} vldmiagt r2!, {s12-s15}
ittt ge
vmulge.f32 s8, s0, s8 vmulge.f32 s8, s0, s8
vstmiage r0!, {s24-s27} vstmiage r0!, {s24-s27}
vstmiage r0!, {s28-s31} vstmiage r0!, {s28-s31}
...@@ -97,33 +102,49 @@ function ff_vector_fmul_reverse_vfp, export=1 ...@@ -97,33 +102,49 @@ function ff_vector_fmul_reverse_vfp, export=1
vmul.f32 s11, s0, s11 vmul.f32 s11, s0, s11
1: 1:
subs r3, r3, #16 subs r3, r3, #16
it ge
vldmdbge r2!, {s16-s19} vldmdbge r2!, {s16-s19}
vmul.f32 s12, s7, s12 vmul.f32 s12, s7, s12
it ge
vldmiage r1!, {s24-s27} vldmiage r1!, {s24-s27}
vmul.f32 s13, s6, s13 vmul.f32 s13, s6, s13
it ge
vldmdbge r2!, {s20-s23} vldmdbge r2!, {s20-s23}
vmul.f32 s14, s5, s14 vmul.f32 s14, s5, s14
it ge
vldmiage r1!, {s28-s31} vldmiage r1!, {s28-s31}
vmul.f32 s15, s4, s15 vmul.f32 s15, s4, s15
it ge
vmulge.f32 s24, s19, s24 vmulge.f32 s24, s19, s24
it gt
vldmdbgt r2!, {s0-s3} vldmdbgt r2!, {s0-s3}
it ge
vmulge.f32 s25, s18, s25 vmulge.f32 s25, s18, s25
vstmia r0!, {s8-s13} vstmia r0!, {s8-s13}
it ge
vmulge.f32 s26, s17, s26 vmulge.f32 s26, s17, s26
it gt
vldmiagt r1!, {s8-s11} vldmiagt r1!, {s8-s11}
itt ge
vmulge.f32 s27, s16, s27 vmulge.f32 s27, s16, s27
vmulge.f32 s28, s23, s28 vmulge.f32 s28, s23, s28
it gt
vldmdbgt r2!, {s4-s7} vldmdbgt r2!, {s4-s7}
it ge
vmulge.f32 s29, s22, s29 vmulge.f32 s29, s22, s29
vstmia r0!, {s14-s15} vstmia r0!, {s14-s15}
ittt ge
vmulge.f32 s30, s21, s30 vmulge.f32 s30, s21, s30
vmulge.f32 s31, s20, s31 vmulge.f32 s31, s20, s31
vmulge.f32 s8, s3, s8 vmulge.f32 s8, s3, s8
it gt
vldmiagt r1!, {s12-s15} vldmiagt r1!, {s12-s15}
itttt ge
vmulge.f32 s9, s2, s9 vmulge.f32 s9, s2, s9
vmulge.f32 s10, s1, s10 vmulge.f32 s10, s1, s10
vstmiage r0!, {s24-s27} vstmiage r0!, {s24-s27}
vmulge.f32 s11, s0, s11 vmulge.f32 s11, s0, s11
it ge
vstmiage r0!, {s28-s31} vstmiage r0!, {s28-s31}
bgt 1b bgt 1b
......
...@@ -71,6 +71,7 @@ endfunc ...@@ -71,6 +71,7 @@ endfunc
function ff_float_to_int16_interleave_neon, export=1 function ff_float_to_int16_interleave_neon, export=1
cmp r3, #2 cmp r3, #2
itt lt
ldrlt r1, [r1] ldrlt r1, [r1]
blt ff_float_to_int16_neon blt ff_float_to_int16_neon
bne 4f bne 4f
...@@ -196,6 +197,7 @@ function ff_float_to_int16_interleave_neon, export=1 ...@@ -196,6 +197,7 @@ function ff_float_to_int16_interleave_neon, export=1
vst1.64 {d3}, [r8], ip vst1.64 {d3}, [r8], ip
vst1.64 {d7}, [r8], ip vst1.64 {d7}, [r8], ip
subs r3, r3, #4 subs r3, r3, #4
it eq
popeq {r4-r8,pc} popeq {r4-r8,pc}
cmp r3, #4 cmp r3, #4
add r0, r0, #8 add r0, r0, #8
...@@ -305,6 +307,7 @@ function ff_float_to_int16_interleave_neon, export=1 ...@@ -305,6 +307,7 @@ function ff_float_to_int16_interleave_neon, export=1
vst1.32 {d23[1]}, [r8], ip vst1.32 {d23[1]}, [r8], ip
8: subs r3, r3, #2 8: subs r3, r3, #2
add r0, r0, #4 add r0, r0, #4
it eq
popeq {r4-r8,pc} popeq {r4-r8,pc}
@ 1 channel @ 1 channel
...@@ -354,6 +357,7 @@ function ff_float_to_int16_interleave_neon, export=1 ...@@ -354,6 +357,7 @@ function ff_float_to_int16_interleave_neon, export=1
vst1.16 {d2[3]}, [r5,:16], ip vst1.16 {d2[3]}, [r5,:16], ip
vst1.16 {d3[1]}, [r5,:16], ip vst1.16 {d3[1]}, [r5,:16], ip
vst1.16 {d3[3]}, [r5,:16], ip vst1.16 {d3[3]}, [r5,:16], ip
it eq
popeq {r4-r8,pc} popeq {r4-r8,pc}
vld1.64 {d0-d1}, [r4,:128]! vld1.64 {d0-d1}, [r4,:128]!
vcvt.s32.f32 q0, q0, #16 vcvt.s32.f32 q0, q0, #16
......
...@@ -46,6 +46,7 @@ function ff_float_to_int16_vfp, export=1 ...@@ -46,6 +46,7 @@ function ff_float_to_int16_vfp, export=1
vmov r5, r6, s2, s3 vmov r5, r6, s2, s3
vmov r7, r8, s4, s5 vmov r7, r8, s4, s5
vmov ip, lr, s6, s7 vmov ip, lr, s6, s7
it gt
vldmiagt r1!, {s16-s23} vldmiagt r1!, {s16-s23}
ssat r4, #16, r4 ssat r4, #16, r4
ssat r3, #16, r3 ssat r3, #16, r3
...@@ -53,10 +54,12 @@ function ff_float_to_int16_vfp, export=1 ...@@ -53,10 +54,12 @@ function ff_float_to_int16_vfp, export=1
ssat r5, #16, r5 ssat r5, #16, r5
pkhbt r3, r3, r4, lsl #16 pkhbt r3, r3, r4, lsl #16
pkhbt r4, r5, r6, lsl #16 pkhbt r4, r5, r6, lsl #16
itttt gt
vcvtgt.s32.f32 s0, s16 vcvtgt.s32.f32 s0, s16
vcvtgt.s32.f32 s1, s17 vcvtgt.s32.f32 s1, s17
vcvtgt.s32.f32 s2, s18 vcvtgt.s32.f32 s2, s18
vcvtgt.s32.f32 s3, s19 vcvtgt.s32.f32 s3, s19
itttt gt
vcvtgt.s32.f32 s4, s20 vcvtgt.s32.f32 s4, s20
vcvtgt.s32.f32 s5, s21 vcvtgt.s32.f32 s5, s21
vcvtgt.s32.f32 s6, s22 vcvtgt.s32.f32 s6, s22
......
This diff is collapsed.
...@@ -106,10 +106,12 @@ function ff_h264_idct_add16_neon, export=1 ...@@ -106,10 +106,12 @@ function ff_h264_idct_add16_neon, export=1
blt 2f blt 2f
ldrsh lr, [r1] ldrsh lr, [r1]
add r0, r0, r4 add r0, r0, r4
it ne
movne lr, #0 movne lr, #0
cmp lr, #0 cmp lr, #0
adrne lr, ff_h264_idct_dc_add_neon ite ne
adreq lr, ff_h264_idct_add_neon adrne lr, ff_h264_idct_dc_add_neon + CONFIG_THUMB
adreq lr, ff_h264_idct_add_neon + CONFIG_THUMB
blx lr blx lr
2: subs ip, ip, #1 2: subs ip, ip, #1
add r1, r1, #32 add r1, r1, #32
...@@ -132,8 +134,9 @@ function ff_h264_idct_add16intra_neon, export=1 ...@@ -132,8 +134,9 @@ function ff_h264_idct_add16intra_neon, export=1
add r0, r0, r4 add r0, r0, r4
cmp r8, #0 cmp r8, #0
ldrsh r8, [r1] ldrsh r8, [r1]
adrne lr, ff_h264_idct_add_neon iteet ne
adreq lr, ff_h264_idct_dc_add_neon adrne lr, ff_h264_idct_add_neon + CONFIG_THUMB
adreq lr, ff_h264_idct_dc_add_neon + CONFIG_THUMB
cmpeq r8, #0 cmpeq r8, #0
blxne lr blxne lr
subs ip, ip, #1 subs ip, ip, #1
...@@ -159,12 +162,14 @@ function ff_h264_idct_add8_neon, export=1 ...@@ -159,12 +162,14 @@ function ff_h264_idct_add8_neon, export=1
add r1, r3, r12, lsl #5 add r1, r3, r12, lsl #5
cmp r8, #0 cmp r8, #0
ldrsh r8, [r1] ldrsh r8, [r1]
adrne lr, ff_h264_idct_add_neon iteet ne
adreq lr, ff_h264_idct_dc_add_neon adrne lr, ff_h264_idct_add_neon + CONFIG_THUMB
adreq lr, ff_h264_idct_dc_add_neon + CONFIG_THUMB
cmpeq r8, #0 cmpeq r8, #0
blxne lr blxne lr
add r12, r12, #1 add r12, r12, #1
cmp r12, #4 cmp r12, #4
itt eq
moveq r12, #16 moveq r12, #16
moveq r4, r9 moveq r4, r9
cmp r12, #20 cmp r12, #20
...@@ -365,10 +370,12 @@ function ff_h264_idct8_add4_neon, export=1 ...@@ -365,10 +370,12 @@ function ff_h264_idct8_add4_neon, export=1
blt 2f blt 2f
ldrsh lr, [r1] ldrsh lr, [r1]
add r0, r0, r4 add r0, r0, r4
it ne
movne lr, #0 movne lr, #0
cmp lr, #0 cmp lr, #0
adrne lr, ff_h264_idct8_dc_add_neon ite ne
adreq lr, ff_h264_idct8_add_neon adrne lr, ff_h264_idct8_dc_add_neon + CONFIG_THUMB
adreq lr, ff_h264_idct8_add_neon + CONFIG_THUMB
blx lr blx lr
2: subs r12, r12, #4 2: subs r12, r12, #4
add r1, r1, #128 add r1, r1, #128
......
...@@ -64,11 +64,14 @@ static inline av_const int mid_pred(int a, int b, int c) ...@@ -64,11 +64,14 @@ static inline av_const int mid_pred(int a, int b, int c)
__asm__ ( __asm__ (
"mov %0, %2 \n\t" "mov %0, %2 \n\t"
"cmp %1, %2 \n\t" "cmp %1, %2 \n\t"
"itt gt \n\t"
"movgt %0, %1 \n\t" "movgt %0, %1 \n\t"
"movgt %1, %2 \n\t" "movgt %1, %2 \n\t"
"cmp %1, %3 \n\t" "cmp %1, %3 \n\t"
"it le \n\t"
"movle %1, %3 \n\t" "movle %1, %3 \n\t"
"cmp %0, %1 \n\t" "cmp %0, %1 \n\t"
"it gt \n\t"
"movgt %0, %1 \n\t" "movgt %0, %1 \n\t"
: "=&r"(m), "+r"(a) : "=&r"(m), "+r"(a)
: "r"(b), "r"(c) : "r"(b), "r"(c)
......
...@@ -191,7 +191,9 @@ function ff_mdct_calc_neon, export=1 ...@@ -191,7 +191,9 @@ function ff_mdct_calc_neon, export=1
vadd.f32 d17, d17, d3 @ in2u+in1d -I vadd.f32 d17, d17, d3 @ in2u+in1d -I
1: 1:
vmul.f32 d7, d0, d21 @ I*s vmul.f32 d7, d0, d21 @ I*s
ldr r10, [r3, lr, lsr #1] A ldr r10, [r3, lr, lsr #1]
T lsr r10, lr, #1
T ldr r10, [r3, r10]
vmul.f32 d6, d1, d20 @ -R*c vmul.f32 d6, d1, d20 @ -R*c
ldr r6, [r3, #4]! ldr r6, [r3, #4]!
vmul.f32 d4, d1, d21 @ -R*s vmul.f32 d4, d1, d21 @ -R*s
......
...@@ -75,7 +75,7 @@ function ff_mpadsp_apply_window_fixed_armv6, export=1 ...@@ -75,7 +75,7 @@ function ff_mpadsp_apply_window_fixed_armv6, export=1
sum8 r8, r9, r1, r0, r10, r11, r12, lr sum8 r8, r9, r1, r0, r10, r11, r12, lr
sum8 r8, r9, r1, r2, r10, r11, r12, lr, rsb, 32 sum8 r8, r9, r1, r2, r10, r11, r12, lr, rsb, 32
round r10, r8, r9 round r10, r8, r9
strh r10, [r3], r4 strh_post r10, r3, r4
mov lr, #15 mov lr, #15
1: 1:
...@@ -127,10 +127,10 @@ function ff_mpadsp_apply_window_fixed_armv6, export=1 ...@@ -127,10 +127,10 @@ function ff_mpadsp_apply_window_fixed_armv6, export=1
round r10, r8, r9 round r10, r8, r9
adds r8, r8, r4 adds r8, r8, r4
adc r9, r9, r7 adc r9, r9, r7
strh r10, [r3], r12 strh_post r10, r3, r12
round r11, r8, r9 round r11, r8, r9
subs lr, lr, #1 subs lr, lr, #1
strh r11, [r5], -r12 strh_dpost r11, r5, r12
bgt 1b bgt 1b
sum8 r8, r9, r1, r0, r10, r11, r12, lr, rsb, 33 sum8 r8, r9, r1, r0, r10, r11, r12, lr, rsb, 33
......
...@@ -38,15 +38,21 @@ ...@@ -38,15 +38,21 @@
.macro dequant_t dst, src, mul, add, tmp .macro dequant_t dst, src, mul, add, tmp
rsbs \tmp, ip, \src, asr #16 rsbs \tmp, ip, \src, asr #16
it gt
addgt \tmp, \add, #0 addgt \tmp, \add, #0
it lt
rsblt \tmp, \add, #0 rsblt \tmp, \add, #0
it ne
smlatbne \dst, \src, \mul, \tmp smlatbne \dst, \src, \mul, \tmp
.endm .endm
.macro dequant_b dst, src, mul, add, tmp .macro dequant_b dst, src, mul, add, tmp
rsbs \tmp, ip, \src, lsl #16 rsbs \tmp, ip, \src, lsl #16
it gt
addgt \tmp, \add, #0 addgt \tmp, \add, #0
it lt
rsblt \tmp, \add, #0 rsblt \tmp, \add, #0
it ne
smlabbne \dst, \src, \mul, \tmp smlabbne \dst, \src, \mul, \tmp
.endm .endm
...@@ -80,21 +86,27 @@ function ff_dct_unquantize_h263_armv5te, export=1 ...@@ -80,21 +86,27 @@ function ff_dct_unquantize_h263_armv5te, export=1
strh lr, [r0], #2 strh lr, [r0], #2
subs r3, r3, #8 subs r3, r3, #8
it gt
ldrdgt r4, [r0, #0] /* load data early to avoid load/use pipeline stall */ ldrdgt r4, [r0, #0] /* load data early to avoid load/use pipeline stall */
bgt 1b bgt 1b
adds r3, r3, #2 adds r3, r3, #2
it le
pople {r4-r9,pc} pople {r4-r9,pc}
2: 2:
ldrsh r9, [r0, #0] ldrsh r9, [r0, #0]
ldrsh lr, [r0, #2] ldrsh lr, [r0, #2]
mov r8, r2 mov r8, r2
cmp r9, #0 cmp r9, #0
it lt
rsblt r8, r2, #0 rsblt r8, r2, #0
it ne
smlabbne r9, r9, r1, r8 smlabbne r9, r9, r1, r8
mov r8, r2 mov r8, r2
cmp lr, #0 cmp lr, #0
it lt
rsblt r8, r2, #0 rsblt r8, r2, #0
it ne
smlabbne lr, lr, r1, r8 smlabbne lr, lr, r1, r8
strh r9, [r0], #2 strh r9, [r0], #2
strh lr, [r0], #2 strh lr, [r0], #2
......
...@@ -57,6 +57,7 @@ function ff_dct_unquantize_h263_neon, export=1 ...@@ -57,6 +57,7 @@ function ff_dct_unquantize_h263_neon, export=1
subs r3, r3, #16 subs r3, r3, #16
vst1.16 {q0}, [r1,:128]! vst1.16 {q0}, [r1,:128]!
vst1.16 {q8}, [r1,:128]! vst1.16 {q8}, [r1,:128]!
it le
bxle lr bxle lr
cmp r3, #8 cmp r3, #8
bgt 1b bgt 1b
...@@ -78,6 +79,7 @@ function ff_dct_unquantize_h263_intra_neon, export=1 ...@@ -78,6 +79,7 @@ function ff_dct_unquantize_h263_intra_neon, export=1
ldr r6, [r0, #AC_PRED] ldr r6, [r0, #AC_PRED]
add lr, r0, #INTER_SCANTAB_RASTER_END add lr, r0, #INTER_SCANTAB_RASTER_END
cmp r6, #0 cmp r6, #0
it ne
movne r12, #63 movne r12, #63
bne 1f bne 1f
ldr r12, [r12, r2, lsl #2] ldr r12, [r12, r2, lsl #2]
...@@ -86,9 +88,11 @@ function ff_dct_unquantize_h263_intra_neon, export=1 ...@@ -86,9 +88,11 @@ function ff_dct_unquantize_h263_intra_neon, export=1
ldrsh r4, [r1] ldrsh r4, [r1]
cmp r5, #0 cmp r5, #0
mov r5, r1 mov r5, r1
it ne
movne r2, #0 movne r2, #0
bne 2f bne 2f
cmp r2, #4 cmp r2, #4
it ge
addge r0, r0, #4 addge r0, r0, #4
sub r2, r3, #1 sub r2, r3, #1
ldr r6, [r0, #Y_DC_SCALE] ldr r6, [r0, #Y_DC_SCALE]
......
...@@ -137,6 +137,7 @@ function ff_rdft_calc_neon, export=1 ...@@ -137,6 +137,7 @@ function ff_rdft_calc_neon, export=1
vst1.32 {d22}, [r5,:64] vst1.32 {d22}, [r5,:64]
cmp r6, #0 cmp r6, #0
it eq
popeq {r4-r8,pc} popeq {r4-r8,pc}
vmul.f32 d22, d22, d18 vmul.f32 d22, d22, d18
......
...@@ -121,11 +121,13 @@ __b_evaluation: ...@@ -121,11 +121,13 @@ __b_evaluation:
ldr r11, [r12, #offW7] @ R11=W7 ldr r11, [r12, #offW7] @ R11=W7
mul r5, r10, r7 @ R5=W5*ROWr16[1]=b2 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle) mul r5, r10, r7 @ R5=W5*ROWr16[1]=b2 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
mul r7, r11, r7 @ R7=W7*ROWr16[1]=b3 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle) mul r7, r11, r7 @ R7=W7*ROWr16[1]=b3 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
teq r2, #0 @ if null avoid muls teq r2, #0 @ if null avoid muls
mlane r0, r9, r2, r0 @ R0+=W3*ROWr16[3]=b0 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) itttt ne
mlane r0, r9, r2, r0 @ R0+=W3*ROWr16[3]=b0 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
rsbne r2, r2, #0 @ R2=-ROWr16[3] rsbne r2, r2, #0 @ R2=-ROWr16[3]
mlane r1, r11, r2, r1 @ R1-=W7*ROWr16[3]=b1 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r1, r11, r2, r1 @ R1-=W7*ROWr16[3]=b1 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
mlane r5, r8, r2, r5 @ R5-=W1*ROWr16[3]=b2 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r5, r8, r2, r5 @ R5-=W1*ROWr16[3]=b2 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
it ne
mlane r7, r10, r2, r7 @ R7-=W5*ROWr16[3]=b3 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r7, r10, r2, r7 @ R7-=W5*ROWr16[3]=b3 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
@@ at this point, R0=b0, R1=b1, R2 (free), R3=ROWr32[2], R4=ROWr32[3], @@ at this point, R0=b0, R1=b1, R2 (free), R3=ROWr32[2], R4=ROWr32[3],
...@@ -148,19 +150,23 @@ __b_evaluation: ...@@ -148,19 +150,23 @@ __b_evaluation:
@@ MAC16(b3, -W1, row[7]); @@ MAC16(b3, -W1, row[7]);
@@ MAC16(b1, -W5, row[7]); @@ MAC16(b1, -W5, row[7]);
mov r3, r3, asr #16 @ R3=ROWr16[5] mov r3, r3, asr #16 @ R3=ROWr16[5]
teq r3, #0 @ if null avoid muls teq r3, #0 @ if null avoid muls
it ne
mlane r0, r10, r3, r0 @ R0+=W5*ROWr16[5]=b0 mlane r0, r10, r3, r0 @ R0+=W5*ROWr16[5]=b0
mov r4, r4, asr #16 @ R4=ROWr16[7] mov r4, r4, asr #16 @ R4=ROWr16[7]
itttt ne
mlane r5, r11, r3, r5 @ R5+=W7*ROWr16[5]=b2 mlane r5, r11, r3, r5 @ R5+=W7*ROWr16[5]=b2
mlane r7, r9, r3, r7 @ R7+=W3*ROWr16[5]=b3 mlane r7, r9, r3, r7 @ R7+=W3*ROWr16[5]=b3
rsbne r3, r3, #0 @ R3=-ROWr16[5] rsbne r3, r3, #0 @ R3=-ROWr16[5]
mlane r1, r8, r3, r1 @ R7-=W1*ROWr16[5]=b1 mlane r1, r8, r3, r1 @ R7-=W1*ROWr16[5]=b1
@@ R3 is free now @@ R3 is free now
teq r4, #0 @ if null avoid muls teq r4, #0 @ if null avoid muls
itttt ne
mlane r0, r11, r4, r0 @ R0+=W7*ROWr16[7]=b0 mlane r0, r11, r4, r0 @ R0+=W7*ROWr16[7]=b0
mlane r5, r9, r4, r5 @ R5+=W3*ROWr16[7]=b2 mlane r5, r9, r4, r5 @ R5+=W3*ROWr16[7]=b2
rsbne r4, r4, #0 @ R4=-ROWr16[7] rsbne r4, r4, #0 @ R4=-ROWr16[7]
mlane r7, r8, r4, r7 @ R7-=W1*ROWr16[7]=b3 mlane r7, r8, r4, r7 @ R7-=W1*ROWr16[7]=b3
it ne
mlane r1, r10, r4, r1 @ R1-=W5*ROWr16[7]=b1 mlane r1, r10, r4, r1 @ R1-=W5*ROWr16[7]=b1
@@ R4 is free now @@ R4 is free now
__end_b_evaluation: __end_b_evaluation:
...@@ -204,16 +210,19 @@ __a_evaluation: ...@@ -204,16 +210,19 @@ __a_evaluation:
@@ a2 -= W4*row[4] @@ a2 -= W4*row[4]
@@ a3 += W4*row[4] @@ a3 += W4*row[4]
ldrsh r11, [r14, #8] @ R11=ROWr16[4] ldrsh r11, [r14, #8] @ R11=ROWr16[4]
teq r11, #0 @ if null avoid muls teq r11, #0 @ if null avoid muls
it ne
mulne r11, r9, r11 @ R11=W4*ROWr16[4] mulne r11, r9, r11 @ R11=W4*ROWr16[4]
@@ R9 is free now @@ R9 is free now
ldrsh r9, [r14, #12] @ R9=ROWr16[6] ldrsh r9, [r14, #12] @ R9=ROWr16[6]
itttt ne
addne r6, r6, r11 @ R6+=W4*ROWr16[4] (a0) addne r6, r6, r11 @ R6+=W4*ROWr16[4] (a0)
subne r2, r2, r11 @ R2-=W4*ROWr16[4] (a1) subne r2, r2, r11 @ R2-=W4*ROWr16[4] (a1)
subne r3, r3, r11 @ R3-=W4*ROWr16[4] (a2) subne r3, r3, r11 @ R3-=W4*ROWr16[4] (a2)
addne r4, r4, r11 @ R4+=W4*ROWr16[4] (a3) addne r4, r4, r11 @ R4+=W4*ROWr16[4] (a3)
@@ W6 alone is no more useful, save W2*ROWr16[6] in it instead @@ W6 alone is no more useful, save W2*ROWr16[6] in it instead
teq r9, #0 @ if null avoid muls teq r9, #0 @ if null avoid muls
itttt ne
mulne r11, r10, r9 @ R11=W6*ROWr16[6] mulne r11, r10, r9 @ R11=W6*ROWr16[6]
addne r6, r6, r11 @ R6+=W6*ROWr16[6] (a0) addne r6, r6, r11 @ R6+=W6*ROWr16[6] (a0)
mulne r10, r8, r9 @ R10=W2*ROWr16[6] mulne r10, r8, r9 @ R10=W2*ROWr16[6]
...@@ -222,6 +231,7 @@ __a_evaluation: ...@@ -222,6 +231,7 @@ __a_evaluation:
@@ a1 -= W2*row[6]; @@ a1 -= W2*row[6];
@@ a2 += W2*row[6]; @@ a2 += W2*row[6];
subne r4, r4, r11 @ R4-=W6*ROWr16[6] (a3) subne r4, r4, r11 @ R4-=W6*ROWr16[6] (a3)
itt ne
subne r2, r2, r10 @ R2-=W2*ROWr16[6] (a1) subne r2, r2, r10 @ R2-=W2*ROWr16[6] (a1)
addne r3, r3, r10 @ R3+=W2*ROWr16[6] (a2) addne r3, r3, r10 @ R3+=W2*ROWr16[6] (a2)
...@@ -323,10 +333,12 @@ __b_evaluation2: ...@@ -323,10 +333,12 @@ __b_evaluation2:
ldrsh r2, [r14, #48] ldrsh r2, [r14, #48]
mul r7, r11, r7 @ R7=W7*ROWr16[1]=b3 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle) mul r7, r11, r7 @ R7=W7*ROWr16[1]=b3 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
teq r2, #0 @ if 0, then avoid muls teq r2, #0 @ if 0, then avoid muls
itttt ne
mlane r0, r9, r2, r0 @ R0+=W3*ROWr16[3]=b0 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r0, r9, r2, r0 @ R0+=W3*ROWr16[3]=b0 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
rsbne r2, r2, #0 @ R2=-ROWr16[3] rsbne r2, r2, #0 @ R2=-ROWr16[3]
mlane r1, r11, r2, r1 @ R1-=W7*ROWr16[3]=b1 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r1, r11, r2, r1 @ R1-=W7*ROWr16[3]=b1 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
mlane r5, r8, r2, r5 @ R5-=W1*ROWr16[3]=b2 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r5, r8, r2, r5 @ R5-=W1*ROWr16[3]=b2 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
it ne
mlane r7, r10, r2, r7 @ R7-=W5*ROWr16[3]=b3 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle) mlane r7, r10, r2, r7 @ R7-=W5*ROWr16[3]=b3 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
@@ at this point, R0=b0, R1=b1, R2 (free), R3 (free), R4 (free), @@ at this point, R0=b0, R1=b1, R2 (free), R3 (free), R4 (free),
...@@ -342,18 +354,22 @@ __b_evaluation2: ...@@ -342,18 +354,22 @@ __b_evaluation2:
@@ MAC16(b1, -W5, col[7x8]); @@ MAC16(b1, -W5, col[7x8]);
ldrsh r3, [r14, #80] @ R3=COLr16[5x8] ldrsh r3, [r14, #80] @ R3=COLr16[5x8]
teq r3, #0 @ if 0 then avoid muls teq r3, #0 @ if 0 then avoid muls
itttt ne
mlane r0, r10, r3, r0 @ R0+=W5*ROWr16[5x8]=b0 mlane r0, r10, r3, r0 @ R0+=W5*ROWr16[5x8]=b0
mlane r5, r11, r3, r5 @ R5+=W7*ROWr16[5x8]=b2 mlane r5, r11, r3, r5 @ R5+=W7*ROWr16[5x8]=b2
mlane r7, r9, r3, r7 @ R7+=W3*ROWr16[5x8]=b3 mlane r7, r9, r3, r7 @ R7+=W3*ROWr16[5x8]=b3
rsbne r3, r3, #0 @ R3=-ROWr16[5x8] rsbne r3, r3, #0 @ R3=-ROWr16[5x8]
ldrsh r4, [r14, #112] @ R4=COLr16[7x8] ldrsh r4, [r14, #112] @ R4=COLr16[7x8]
it ne
mlane r1, r8, r3, r1 @ R7-=W1*ROWr16[5x8]=b1 mlane r1, r8, r3, r1 @ R7-=W1*ROWr16[5x8]=b1
@@ R3 is free now @@ R3 is free now
teq r4, #0 @ if 0 then avoid muls teq r4, #0 @ if 0 then avoid muls
itttt ne
mlane r0, r11, r4, r0 @ R0+=W7*ROWr16[7x8]=b0 mlane r0, r11, r4, r0 @ R0+=W7*ROWr16[7x8]=b0
mlane r5, r9, r4, r5 @ R5+=W3*ROWr16[7x8]=b2 mlane r5, r9, r4, r5 @ R5+=W3*ROWr16[7x8]=b2
rsbne r4, r4, #0 @ R4=-ROWr16[7x8] rsbne r4, r4, #0 @ R4=-ROWr16[7x8]
mlane r7, r8, r4, r7 @ R7-=W1*ROWr16[7x8]=b3 mlane r7, r8, r4, r7 @ R7-=W1*ROWr16[7x8]=b3
it ne
mlane r1, r10, r4, r1 @ R1-=W5*ROWr16[7x8]=b1 mlane r1, r10, r4, r1 @ R1-=W5*ROWr16[7x8]=b1
@@ R4 is free now @@ R4 is free now
__end_b_evaluation2: __end_b_evaluation2:
...@@ -390,15 +406,18 @@ __a_evaluation2: ...@@ -390,15 +406,18 @@ __a_evaluation2:
@@ a3 += W4*row[4] @@ a3 += W4*row[4]
ldrsh r11, [r14, #64] @ R11=ROWr16[4] ldrsh r11, [r14, #64] @ R11=ROWr16[4]
teq r11, #0 @ if null avoid muls teq r11, #0 @ if null avoid muls
itttt ne
mulne r11, r9, r11 @ R11=W4*ROWr16[4] mulne r11, r9, r11 @ R11=W4*ROWr16[4]
@@ R9 is free now @@ R9 is free now
addne r6, r6, r11 @ R6+=W4*ROWr16[4] (a0) addne r6, r6, r11 @ R6+=W4*ROWr16[4] (a0)
subne r2, r2, r11 @ R2-=W4*ROWr16[4] (a1) subne r2, r2, r11 @ R2-=W4*ROWr16[4] (a1)
subne r3, r3, r11 @ R3-=W4*ROWr16[4] (a2) subne r3, r3, r11 @ R3-=W4*ROWr16[4] (a2)
ldrsh r9, [r14, #96] @ R9=ROWr16[6] ldrsh r9, [r14, #96] @ R9=ROWr16[6]
it ne
addne r4, r4, r11 @ R4+=W4*ROWr16[4] (a3) addne r4, r4, r11 @ R4+=W4*ROWr16[4] (a3)
@@ W6 alone is no more useful, save W2*ROWr16[6] in it instead @@ W6 alone is no more useful, save W2*ROWr16[6] in it instead
teq r9, #0 @ if null avoid muls teq r9, #0 @ if null avoid muls
itttt ne
mulne r11, r10, r9 @ R11=W6*ROWr16[6] mulne r11, r10, r9 @ R11=W6*ROWr16[6]
addne r6, r6, r11 @ R6+=W6*ROWr16[6] (a0) addne r6, r6, r11 @ R6+=W6*ROWr16[6] (a0)
mulne r10, r8, r9 @ R10=W2*ROWr16[6] mulne r10, r8, r9 @ R10=W2*ROWr16[6]
...@@ -407,6 +426,7 @@ __a_evaluation2: ...@@ -407,6 +426,7 @@ __a_evaluation2:
@@ a1 -= W2*row[6]; @@ a1 -= W2*row[6];
@@ a2 += W2*row[6]; @@ a2 += W2*row[6];
subne r4, r4, r11 @ R4-=W6*ROWr16[6] (a3) subne r4, r4, r11 @ R4-=W6*ROWr16[6] (a3)
itt ne
subne r2, r2, r10 @ R2-=W2*ROWr16[6] (a1) subne r2, r2, r10 @ R2-=W2*ROWr16[6] (a1)
addne r3, r3, r10 @ R3+=W2*ROWr16[6] (a2) addne r3, r3, r10 @ R3+=W2*ROWr16[6] (a2)
__end_a_evaluation2: __end_a_evaluation2:
......
...@@ -49,6 +49,7 @@ function idct_row_armv5te ...@@ -49,6 +49,7 @@ function idct_row_armv5te
ldrd v1, [a1, #8] ldrd v1, [a1, #8]
ldrd a3, [a1] /* a3 = row[1:0], a4 = row[3:2] */ ldrd a3, [a1] /* a3 = row[1:0], a4 = row[3:2] */
orrs v1, v1, v2 orrs v1, v1, v2
itt eq
cmpeq v1, a4 cmpeq v1, a4
cmpeq v1, a3, lsr #16 cmpeq v1, a3, lsr #16
beq row_dc_only beq row_dc_only
...@@ -269,6 +270,7 @@ function idct_col_armv5te ...@@ -269,6 +270,7 @@ function idct_col_armv5te
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
adds a2, a3, v1 adds a2, a3, v1
mov a2, a2, lsr #20 mov a2, a2, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
add ip, a4, v2 add ip, a4, v2
mov ip, ip, asr #20 mov ip, ip, asr #20
...@@ -276,6 +278,7 @@ function idct_col_armv5te ...@@ -276,6 +278,7 @@ function idct_col_armv5te
str a2, [a1] str a2, [a1]
subs a3, a3, v1 subs a3, a3, v1
mov a2, a3, lsr #20 mov a2, a3, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
sub a4, a4, v2 sub a4, a4, v2
mov a4, a4, asr #20 mov a4, a4, asr #20
...@@ -285,6 +288,7 @@ function idct_col_armv5te ...@@ -285,6 +288,7 @@ function idct_col_armv5te
subs a2, a3, v3 subs a2, a3, v3
mov a2, a2, lsr #20 mov a2, a2, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
sub ip, a4, v4 sub ip, a4, v4
mov ip, ip, asr #20 mov ip, ip, asr #20
...@@ -292,6 +296,7 @@ function idct_col_armv5te ...@@ -292,6 +296,7 @@ function idct_col_armv5te
str a2, [a1, #(16*1)] str a2, [a1, #(16*1)]
adds a3, a3, v3 adds a3, a3, v3
mov a2, a3, lsr #20 mov a2, a3, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
add a4, a4, v4 add a4, a4, v4
mov a4, a4, asr #20 mov a4, a4, asr #20
...@@ -301,6 +306,7 @@ function idct_col_armv5te ...@@ -301,6 +306,7 @@ function idct_col_armv5te
adds a2, a3, v5 adds a2, a3, v5
mov a2, a2, lsr #20 mov a2, a2, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
add ip, a4, v6 add ip, a4, v6
mov ip, ip, asr #20 mov ip, ip, asr #20
...@@ -308,6 +314,7 @@ function idct_col_armv5te ...@@ -308,6 +314,7 @@ function idct_col_armv5te
str a2, [a1, #(16*2)] str a2, [a1, #(16*2)]
subs a3, a3, v5 subs a3, a3, v5
mov a2, a3, lsr #20 mov a2, a3, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
sub a4, a4, v6 sub a4, a4, v6
mov a4, a4, asr #20 mov a4, a4, asr #20
...@@ -317,6 +324,7 @@ function idct_col_armv5te ...@@ -317,6 +324,7 @@ function idct_col_armv5te
adds a2, a3, v7 adds a2, a3, v7
mov a2, a2, lsr #20 mov a2, a2, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
add ip, a4, fp add ip, a4, fp
mov ip, ip, asr #20 mov ip, ip, asr #20
...@@ -324,6 +332,7 @@ function idct_col_armv5te ...@@ -324,6 +332,7 @@ function idct_col_armv5te
str a2, [a1, #(16*3)] str a2, [a1, #(16*3)]
subs a3, a3, v7 subs a3, a3, v7
mov a2, a3, lsr #20 mov a2, a3, lsr #20
it mi
orrmi a2, a2, #0xf000 orrmi a2, a2, #0xf000
sub a4, a4, fp sub a4, a4, fp
mov a4, a4, asr #20 mov a4, a4, asr #20
...@@ -335,15 +344,19 @@ endfunc ...@@ -335,15 +344,19 @@ endfunc
.macro clip dst, src:vararg .macro clip dst, src:vararg
movs \dst, \src movs \dst, \src
it mi
movmi \dst, #0 movmi \dst, #0
cmp \dst, #255 cmp \dst, #255
it gt
movgt \dst, #255 movgt \dst, #255
.endm .endm
.macro aclip dst, src:vararg .macro aclip dst, src:vararg
adds \dst, \src adds \dst, \src
it mi
movmi \dst, #0 movmi \dst, #0
cmp \dst, #255 cmp \dst, #255
it gt
movgt \dst, #255 movgt \dst, #255
.endm .endm
...@@ -370,35 +383,35 @@ function idct_col_put_armv5te ...@@ -370,35 +383,35 @@ function idct_col_put_armv5te
orr a2, a3, a4, lsl #8 orr a2, a3, a4, lsl #8
rsb v2, lr, lr, lsl #3 rsb v2, lr, lr, lsl #3
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
strh a2, [v2, v1]! strh_pre a2, v2, v1
sub a2, a3, v3 sub a2, a3, v3
clip a2, a2, asr #20 clip a2, a2, asr #20
sub ip, a4, v4 sub ip, a4, v4
clip ip, ip, asr #20 clip ip, ip, asr #20
orr a2, a2, ip, lsl #8 orr a2, a2, ip, lsl #8
strh a2, [v1, lr]! strh_pre a2, v1, lr
add a3, a3, v3 add a3, a3, v3
clip a2, a3, asr #20 clip a2, a3, asr #20
add a4, a4, v4 add a4, a4, v4
clip a4, a4, asr #20 clip a4, a4, asr #20
orr a2, a2, a4, lsl #8 orr a2, a2, a4, lsl #8
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
strh a2, [v2, -lr]! strh_dpre a2, v2, lr
add a2, a3, v5 add a2, a3, v5
clip a2, a2, asr #20 clip a2, a2, asr #20
add ip, a4, v6 add ip, a4, v6
clip ip, ip, asr #20 clip ip, ip, asr #20
orr a2, a2, ip, lsl #8 orr a2, a2, ip, lsl #8
strh a2, [v1, lr]! strh_pre a2, v1, lr
sub a3, a3, v5 sub a3, a3, v5
clip a2, a3, asr #20 clip a2, a3, asr #20
sub a4, a4, v6 sub a4, a4, v6
clip a4, a4, asr #20 clip a4, a4, asr #20
orr a2, a2, a4, lsl #8 orr a2, a2, a4, lsl #8
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
strh a2, [v2, -lr]! strh_dpre a2, v2, lr
add a2, a3, v7 add a2, a3, v7
clip a2, a2, asr #20 clip a2, a2, asr #20
...@@ -411,7 +424,7 @@ function idct_col_put_armv5te ...@@ -411,7 +424,7 @@ function idct_col_put_armv5te
sub a4, a4, fp sub a4, a4, fp
clip a4, a4, asr #20 clip a4, a4, asr #20
orr a2, a2, a4, lsl #8 orr a2, a2, a4, lsl #8
strh a2, [v2, -lr] strh_dpre a2, v2, lr
ldr pc, [sp], #4 ldr pc, [sp], #4
endfunc endfunc
...@@ -436,7 +449,7 @@ function idct_col_add_armv5te ...@@ -436,7 +449,7 @@ function idct_col_add_armv5te
ldr v1, [sp, #32] ldr v1, [sp, #32]
sub a4, a4, v2 sub a4, a4, v2
rsb v2, v1, v1, lsl #3 rsb v2, v1, v1, lsl #3
ldrh ip, [v2, lr]! ldrh_pre ip, v2, lr
strh a2, [lr] strh a2, [lr]
and a2, ip, #255 and a2, ip, #255
aclip a3, a2, a3, asr #20 aclip a3, a2, a3, asr #20
...@@ -448,7 +461,7 @@ function idct_col_add_armv5te ...@@ -448,7 +461,7 @@ function idct_col_add_armv5te
strh a2, [v2] strh a2, [v2]
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
ldrh ip, [lr, v1]! ldrh_pre ip, lr, v1
sub a2, a3, v3 sub a2, a3, v3
add a3, a3, v3 add a3, a3, v3
and v3, ip, #255 and v3, ip, #255
...@@ -458,7 +471,7 @@ function idct_col_add_armv5te ...@@ -458,7 +471,7 @@ function idct_col_add_armv5te
aclip v3, v3, ip, lsr #8 aclip v3, v3, ip, lsr #8
orr a2, a2, v3, lsl #8 orr a2, a2, v3, lsl #8
add a4, a4, v4 add a4, a4, v4
ldrh ip, [v2, -v1]! ldrh_dpre ip, v2, v1
strh a2, [lr] strh a2, [lr]
and a2, ip, #255 and a2, ip, #255
aclip a3, a2, a3, asr #20 aclip a3, a2, a3, asr #20
...@@ -468,7 +481,7 @@ function idct_col_add_armv5te ...@@ -468,7 +481,7 @@ function idct_col_add_armv5te
strh a2, [v2] strh a2, [v2]
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
ldrh ip, [lr, v1]! ldrh_pre ip, lr, v1
add a2, a3, v5 add a2, a3, v5
sub a3, a3, v5 sub a3, a3, v5
and v3, ip, #255 and v3, ip, #255
...@@ -478,7 +491,7 @@ function idct_col_add_armv5te ...@@ -478,7 +491,7 @@ function idct_col_add_armv5te
aclip v3, v3, ip, lsr #8 aclip v3, v3, ip, lsr #8
orr a2, a2, v3, lsl #8 orr a2, a2, v3, lsl #8
sub a4, a4, v6 sub a4, a4, v6
ldrh ip, [v2, -v1]! ldrh_dpre ip, v2, v1
strh a2, [lr] strh a2, [lr]
and a2, ip, #255 and a2, ip, #255
aclip a3, a2, a3, asr #20 aclip a3, a2, a3, asr #20
...@@ -488,7 +501,7 @@ function idct_col_add_armv5te ...@@ -488,7 +501,7 @@ function idct_col_add_armv5te
strh a2, [v2] strh a2, [v2]
ldmfd sp!, {a3, a4} ldmfd sp!, {a3, a4}
ldrh ip, [lr, v1]! ldrh_pre ip, lr, v1
add a2, a3, v7 add a2, a3, v7
sub a3, a3, v7 sub a3, a3, v7
and v3, ip, #255 and v3, ip, #255
...@@ -498,7 +511,7 @@ function idct_col_add_armv5te ...@@ -498,7 +511,7 @@ function idct_col_add_armv5te
aclip v3, v3, ip, lsr #8 aclip v3, v3, ip, lsr #8
orr a2, a2, v3, lsl #8 orr a2, a2, v3, lsl #8
sub a4, a4, fp sub a4, a4, fp
ldrh ip, [v2, -v1]! ldrh_dpre ip, v2, v1
strh a2, [lr] strh a2, [lr]
and a2, ip, #255 and a2, ip, #255
aclip a3, a2, a3, asr #20 aclip a3, a2, a3, asr #20
......
...@@ -200,6 +200,7 @@ function idct_row_armv6 ...@@ -200,6 +200,7 @@ function idct_row_armv6
ldr r3, [r0, #8] /* r3 = row[3,1] */ ldr r3, [r0, #8] /* r3 = row[3,1] */
ldr r2, [r0] /* r2 = row[2,0] */ ldr r2, [r0] /* r2 = row[2,0] */
orrs lr, lr, ip orrs lr, lr, ip
itt eq
cmpeq lr, r3 cmpeq lr, r3
cmpeq lr, r2, lsr #16 cmpeq lr, r2, lsr #16
beq 1f beq 1f
...@@ -282,14 +283,14 @@ function idct_col_put_armv6 ...@@ -282,14 +283,14 @@ function idct_col_put_armv6
pop {r1, r2} pop {r1, r2}
idct_finish_shift_sat COL_SHIFT idct_finish_shift_sat COL_SHIFT
strb r4, [r1], r2 strb_post r4, r1, r2
strb r5, [r1], r2 strb_post r5, r1, r2
strb r6, [r1], r2 strb_post r6, r1, r2
strb r7, [r1], r2 strb_post r7, r1, r2
strb r11,[r1], r2 strb_post r11,r1, r2
strb r10,[r1], r2 strb_post r10,r1, r2
strb r9, [r1], r2 strb_post r9, r1, r2
strb r8, [r1], r2 strb_post r8, r1, r2
sub r1, r1, r2, lsl #3 sub r1, r1, r2, lsl #3
...@@ -318,16 +319,16 @@ function idct_col_add_armv6 ...@@ -318,16 +319,16 @@ function idct_col_add_armv6
add ip, r3, ip, asr #COL_SHIFT add ip, r3, ip, asr #COL_SHIFT
usat ip, #8, ip usat ip, #8, ip
add r4, r7, r4, asr #COL_SHIFT add r4, r7, r4, asr #COL_SHIFT
strb ip, [r1], r2 strb_post ip, r1, r2
ldrb ip, [r1, r2] ldrb ip, [r1, r2]
usat r4, #8, r4 usat r4, #8, r4
ldrb r11,[r1, r2, lsl #2] ldrb r11,[r1, r2, lsl #2]
add r5, ip, r5, asr #COL_SHIFT add r5, ip, r5, asr #COL_SHIFT
usat r5, #8, r5 usat r5, #8, r5
strb r4, [r1], r2 strb_post r4, r1, r2
ldrb r3, [r1, r2] ldrb r3, [r1, r2]
ldrb ip, [r1, r2, lsl #2] ldrb ip, [r1, r2, lsl #2]
strb r5, [r1], r2 strb_post r5, r1, r2
ldrb r7, [r1, r2] ldrb r7, [r1, r2]
ldrb r4, [r1, r2, lsl #2] ldrb r4, [r1, r2, lsl #2]
add r6, r3, r6, asr #COL_SHIFT add r6, r3, r6, asr #COL_SHIFT
...@@ -340,11 +341,11 @@ function idct_col_add_armv6 ...@@ -340,11 +341,11 @@ function idct_col_add_armv6
usat r8, #8, r8 usat r8, #8, r8
add lr, r4, lr, asr #COL_SHIFT add lr, r4, lr, asr #COL_SHIFT
usat lr, #8, lr usat lr, #8, lr
strb r6, [r1], r2 strb_post r6, r1, r2
strb r10,[r1], r2 strb_post r10,r1, r2
strb r9, [r1], r2 strb_post r9, r1, r2
strb r8, [r1], r2 strb_post r8, r1, r2
strb lr, [r1], r2 strb_post lr, r1, r2
sub r1, r1, r2, lsl #3 sub r1, r1, r2, lsl #3
......
...@@ -71,7 +71,7 @@ function idct_row4_pld_neon ...@@ -71,7 +71,7 @@ function idct_row4_pld_neon
add r3, r0, r1, lsl #2 add r3, r0, r1, lsl #2
pld [r0, r1] pld [r0, r1]
pld [r0, r1, lsl #1] pld [r0, r1, lsl #1]
pld [r3, -r1] A pld [r3, -r1]
pld [r3] pld [r3]
pld [r3, r1] pld [r3, r1]
add r3, r3, r1, lsl #1 add r3, r3, r1, lsl #1
...@@ -164,6 +164,7 @@ function idct_col4_neon ...@@ -164,6 +164,7 @@ function idct_col4_neon
orrs r4, r4, r5 orrs r4, r4, r5
idct_col4_top idct_col4_top
it eq
addeq r2, r2, #16 addeq r2, r2, #16
beq 1f beq 1f
...@@ -176,6 +177,7 @@ function idct_col4_neon ...@@ -176,6 +177,7 @@ function idct_col4_neon
1: orrs r6, r6, r7 1: orrs r6, r6, r7
ldrd r4, [r2, #16] ldrd r4, [r2, #16]
it eq
addeq r2, r2, #16 addeq r2, r2, #16
beq 2f beq 2f
...@@ -187,6 +189,7 @@ function idct_col4_neon ...@@ -187,6 +189,7 @@ function idct_col4_neon
2: orrs r4, r4, r5 2: orrs r4, r4, r5
ldrd r4, [r2, #16] ldrd r4, [r2, #16]
it eq
addeq r2, r2, #16 addeq r2, r2, #16
beq 3f beq 3f
...@@ -199,6 +202,7 @@ function idct_col4_neon ...@@ -199,6 +202,7 @@ function idct_col4_neon
vadd.i32 q13, q13, q8 vadd.i32 q13, q13, q8
3: orrs r4, r4, r5 3: orrs r4, r4, r5
it eq
addeq r2, r2, #16 addeq r2, r2, #16
beq 4f beq 4f
......
...@@ -100,9 +100,11 @@ NOVFP vldr s0, [sp, #12*4] @ scale ...@@ -100,9 +100,11 @@ NOVFP vldr s0, [sp, #12*4] @ scale
vst1.32 {q9}, [r2,:128] vst1.32 {q9}, [r2,:128]
subs r1, r1, #1 subs r1, r1, #1
it eq
popeq {r4-r11,pc} popeq {r4-r11,pc}
cmp r4, #0 cmp r4, #0
itt eq
subeq r8, r8, #512*4 subeq r8, r8, #512*4
subeq r9, r9, #512*4 subeq r9, r9, #512*4
sub r5, r5, #512*4 sub r5, r5, #512*4
......
...@@ -21,6 +21,14 @@ ...@@ -21,6 +21,14 @@
#ifndef AVCODEC_ARM_VP56_ARITH_H #ifndef AVCODEC_ARM_VP56_ARITH_H
#define AVCODEC_ARM_VP56_ARITH_H #define AVCODEC_ARM_VP56_ARITH_H
#if CONFIG_THUMB
# define A(x)
# define T(x) x
#else
# define A(x) x
# define T(x)
#endif
#if HAVE_ARMV6 && HAVE_INLINE_ASM #if HAVE_ARMV6 && HAVE_INLINE_ASM
#define vp56_rac_get_prob vp56_rac_get_prob_armv6 #define vp56_rac_get_prob vp56_rac_get_prob_armv6
...@@ -32,15 +40,21 @@ static inline int vp56_rac_get_prob_armv6(VP56RangeCoder *c, int pr) ...@@ -32,15 +40,21 @@ static inline int vp56_rac_get_prob_armv6(VP56RangeCoder *c, int pr)
unsigned bit; unsigned bit;
__asm__ ("adds %3, %3, %0 \n" __asm__ ("adds %3, %3, %0 \n"
"itt cs \n"
"cmpcs %7, %4 \n" "cmpcs %7, %4 \n"
"ldrcsh %2, [%4], #2 \n" A("ldrcsh %2, [%4], #2 \n")
T("ldrhcs %2, [%4], #2 \n")
"rsb %0, %6, #256 \n" "rsb %0, %6, #256 \n"
"smlabb %0, %5, %6, %0 \n" "smlabb %0, %5, %6, %0 \n"
T("itttt cs \n")
"rev16cs %2, %2 \n" "rev16cs %2, %2 \n"
"orrcs %1, %1, %2, lsl %3 \n" T("lslcs %2, %2, %3 \n")
T("orrcs %1, %1, %2 \n")
A("orrcs %1, %1, %2, lsl %3 \n")
"subcs %3, %3, #16 \n" "subcs %3, %3, #16 \n"
"lsr %0, %0, #8 \n" "lsr %0, %0, #8 \n"
"cmp %1, %0, lsl #16 \n" "cmp %1, %0, lsl #16 \n"
"ittte ge \n"
"subge %1, %1, %0, lsl #16 \n" "subge %1, %1, %0, lsl #16 \n"
"subge %0, %5, %0 \n" "subge %0, %5, %0 \n"
"movge %2, #1 \n" "movge %2, #1 \n"
...@@ -64,12 +78,17 @@ static inline int vp56_rac_get_prob_branchy_armv6(VP56RangeCoder *c, int pr) ...@@ -64,12 +78,17 @@ static inline int vp56_rac_get_prob_branchy_armv6(VP56RangeCoder *c, int pr)
unsigned tmp; unsigned tmp;
__asm__ ("adds %3, %3, %0 \n" __asm__ ("adds %3, %3, %0 \n"
"itt cs \n"
"cmpcs %7, %4 \n" "cmpcs %7, %4 \n"
"ldrcsh %2, [%4], #2 \n" A("ldrcsh %2, [%4], #2 \n")
T("ldrhcs %2, [%4], #2 \n")
"rsb %0, %6, #256 \n" "rsb %0, %6, #256 \n"
"smlabb %0, %5, %6, %0 \n" "smlabb %0, %5, %6, %0 \n"
T("itttt cs \n")
"rev16cs %2, %2 \n" "rev16cs %2, %2 \n"
"orrcs %1, %1, %2, lsl %3 \n" T("lslcs %2, %2, %3 \n")
T("orrcs %1, %1, %2 \n")
A("orrcs %1, %1, %2, lsl %3 \n")
"subcs %3, %3, #16 \n" "subcs %3, %3, #16 \n"
"lsr %0, %0, #8 \n" "lsr %0, %0, #8 \n"
"lsl %2, %0, #16 \n" "lsl %2, %0, #16 \n"
......
...@@ -25,13 +25,18 @@ ...@@ -25,13 +25,18 @@
lsl \cw, \cw, \t0 lsl \cw, \cw, \t0
lsl \t0, \h, \t0 lsl \t0, \h, \t0
rsb \h, \pr, #256 rsb \h, \pr, #256
it cs
ldrhcs \t1, [\buf], #2 ldrhcs \t1, [\buf], #2
smlabb \h, \t0, \pr, \h smlabb \h, \t0, \pr, \h
T itttt cs
rev16cs \t1, \t1 rev16cs \t1, \t1
orrcs \cw, \cw, \t1, lsl \bs A orrcs \cw, \cw, \t1, lsl \bs
T lslcs \t1, \t1, \bs
T orrcs \cw, \cw, \t1
subcs \bs, \bs, #16 subcs \bs, \bs, #16
lsr \h, \h, #8 lsr \h, \h, #8
cmp \cw, \h, lsl #16 cmp \cw, \h, lsl #16
itt ge
subge \cw, \cw, \h, lsl #16 subge \cw, \cw, \h, lsl #16
subge \h, \t0, \h subge \h, \t0, \h
.endm .endm
...@@ -40,14 +45,20 @@ ...@@ -40,14 +45,20 @@
adds \bs, \bs, \t0 adds \bs, \bs, \t0
lsl \cw, \cw, \t0 lsl \cw, \cw, \t0
lsl \t0, \h, \t0 lsl \t0, \h, \t0
it cs
ldrhcs \t1, [\buf], #2 ldrhcs \t1, [\buf], #2
mov \h, #128 mov \h, #128
it cs
rev16cs \t1, \t1 rev16cs \t1, \t1
add \h, \h, \t0, lsl #7 add \h, \h, \t0, lsl #7
orrcs \cw, \cw, \t1, lsl \bs A orrcs \cw, \cw, \t1, lsl \bs
T ittt cs
T lslcs \t1, \t1, \bs
T orrcs \cw, \cw, \t1
subcs \bs, \bs, #16 subcs \bs, \bs, #16
lsr \h, \h, #8 lsr \h, \h, #8
cmp \cw, \h, lsl #16 cmp \cw, \h, lsl #16
itt ge
subge \cw, \cw, \h, lsl #16 subge \cw, \cw, \h, lsl #16
subge \h, \t0, \h subge \h, \t0, \h
.endm .endm
...@@ -59,6 +70,7 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -59,6 +70,7 @@ function ff_decode_block_coeffs_armv6, export=1
cmp r3, #0 cmp r3, #0
ldr r11, [r5] ldr r11, [r5]
ldm r0, {r5-r7} @ high, bits, buf ldm r0, {r5-r7} @ high, bits, buf
it ne
pkhtbne r11, r11, r11, asr #16 pkhtbne r11, r11, r11, asr #16
ldr r8, [r0, #16] @ code_word ldr r8, [r0, #16] @ code_word
0: 0:
...@@ -80,19 +92,26 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -80,19 +92,26 @@ function ff_decode_block_coeffs_armv6, export=1
adds r6, r6, r9 adds r6, r6, r9
add r4, r4, #11 add r4, r4, #11
lsl r8, r8, r9 lsl r8, r8, r9
it cs
ldrhcs r10, [r7], #2 ldrhcs r10, [r7], #2
lsl r9, r5, r9 lsl r9, r5, r9
mov r5, #128 mov r5, #128
it cs
rev16cs r10, r10 rev16cs r10, r10
add r5, r5, r9, lsl #7 add r5, r5, r9, lsl #7
orrcs r8, r8, r10, lsl r6 T ittt cs
T lslcs r10, r10, r6
T orrcs r8, r8, r10
A orrcs r8, r8, r10, lsl r6
subcs r6, r6, #16 subcs r6, r6, #16
lsr r5, r5, #8 lsr r5, r5, #8
cmp r8, r5, lsl #16 cmp r8, r5, lsl #16
movrel r10, zigzag_scan-1 movrel r10, zigzag_scan-1
itt ge
subge r8, r8, r5, lsl #16 subge r8, r8, r5, lsl #16
subge r5, r9, r5 subge r5, r9, r5
ldrb r10, [r10, r3] ldrb r10, [r10, r3]
it ge
rsbge r12, r12, #0 rsbge r12, r12, #0
cmp r3, #16 cmp r3, #16
strh r12, [r1, r10] strh r12, [r1, r10]
...@@ -108,6 +127,7 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -108,6 +127,7 @@ function ff_decode_block_coeffs_armv6, export=1
ldr r0, [sp] ldr r0, [sp]
ldr r9, [r0, #12] ldr r9, [r0, #12]
cmp r7, r9 cmp r7, r9
it hi
movhi r7, r9 movhi r7, r9
stm r0, {r5-r7} @ high, bits, buf stm r0, {r5-r7} @ high, bits, buf
str r8, [r0, #16] @ code_word str r8, [r0, #16] @ code_word
...@@ -131,11 +151,13 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -131,11 +151,13 @@ function ff_decode_block_coeffs_armv6, export=1
mov r12, #2 mov r12, #2
ldrb r0, [r4, #4] ldrb r0, [r4, #4]
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
it ge
addge r12, #1 addge r12, #1
ldrb r9, [lr, r5] ldrb r9, [lr, r5]
blt 4f blt 4f
ldrb r0, [r4, #5] ldrb r0, [r4, #5]
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
it ge
addge r12, #1 addge r12, #1
ldrb r9, [lr, r5] ldrb r9, [lr, r5]
b 4f b 4f
...@@ -153,6 +175,7 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -153,6 +175,7 @@ function ff_decode_block_coeffs_armv6, export=1
mov r12, #5 mov r12, #5
mov r0, #159 mov r0, #159
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
it ge
addge r12, r12, #1 addge r12, r12, #1
ldrb r9, [lr, r5] ldrb r9, [lr, r5]
b 4f b 4f
...@@ -160,23 +183,28 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -160,23 +183,28 @@ function ff_decode_block_coeffs_armv6, export=1
mov r12, #7 mov r12, #7
mov r0, #165 mov r0, #165
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
it ge
addge r12, r12, #2 addge r12, r12, #2
ldrb r9, [lr, r5] ldrb r9, [lr, r5]
mov r0, #145 mov r0, #145
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
it ge
addge r12, r12, #1 addge r12, r12, #1
ldrb r9, [lr, r5] ldrb r9, [lr, r5]
b 4f b 4f
3: 3:
ldrb r0, [r4, #8] ldrb r0, [r4, #8]
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
it ge
addge r4, r4, #1 addge r4, r4, #1
ldrb r9, [lr, r5] ldrb r9, [lr, r5]
ite ge
movge r12, #2 movge r12, #2
movlt r12, #0 movlt r12, #0
ldrb r0, [r4, #9] ldrb r0, [r4, #9]
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
mov r9, #8 mov r9, #8
it ge
addge r12, r12, #1 addge r12, r12, #1
movrel r4, X(ff_vp8_dct_cat_prob) movrel r4, X(ff_vp8_dct_cat_prob)
lsl r9, r9, r12 lsl r9, r9, r12
...@@ -189,6 +217,7 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -189,6 +217,7 @@ function ff_decode_block_coeffs_armv6, export=1
lsl r1, r1, #1 lsl r1, r1, #1
rac_get_prob r5, r6, r7, r8, r0, r9, r10 rac_get_prob r5, r6, r7, r8, r0, r9, r10
ldrb r0, [r4], #1 ldrb r0, [r4], #1
it ge
addge r1, r1, #1 addge r1, r1, #1
cmp r0, #0 cmp r0, #0
bne 1b bne 1b
...@@ -200,6 +229,7 @@ function ff_decode_block_coeffs_armv6, export=1 ...@@ -200,6 +229,7 @@ function ff_decode_block_coeffs_armv6, export=1
add r4, r2, r4 add r4, r2, r4
add r4, r4, #22 add r4, r4, #22
rac_get_128 r5, r6, r7, r8, r9, r10 rac_get_128 r5, r6, r7, r8, r9, r10
it ge
rsbge r12, r12, #0 rsbge r12, r12, #0
smulbb r12, r12, r11 smulbb r12, r12, r11
movrel r9, zigzag_scan-1 movrel r9, zigzag_scan-1
......
...@@ -746,14 +746,14 @@ function ff_put_vp8_pixels4_neon, export=1 ...@@ -746,14 +746,14 @@ function ff_put_vp8_pixels4_neon, export=1
push {r4-r6,lr} push {r4-r6,lr}
1: 1:
subs r12, r12, #4 subs r12, r12, #4
ldr r4, [r2], r3 ldr_post r4, r2, r3
ldr r5, [r2], r3 ldr_post r5, r2, r3
ldr r6, [r2], r3 ldr_post r6, r2, r3
ldr lr, [r2], r3 ldr_post lr, r2, r3
str r4, [r0], r1 str_post r4, r0, r1
str r5, [r0], r1 str_post r5, r0, r1
str r6, [r0], r1 str_post r6, r0, r1
str lr, [r0], r1 str_post lr, r0, r1
bgt 1b bgt 1b
pop {r4-r6,pc} pop {r4-r6,pc}
endfunc endfunc
......
...@@ -3320,7 +3320,7 @@ void av_resample_close(struct AVResampleContext *c); ...@@ -3320,7 +3320,7 @@ void av_resample_close(struct AVResampleContext *c);
/** /**
* Allocate memory for a picture. Call avpicture_free() to free it. * Allocate memory for a picture. Call avpicture_free() to free it.
* *
* \see avpicture_fill() * @see avpicture_fill()
* *
* @param picture the picture to be filled in * @param picture the picture to be filled in
* @param pix_fmt the format of the picture * @param pix_fmt the format of the picture
...@@ -3367,7 +3367,7 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr, ...@@ -3367,7 +3367,7 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr,
* The data is stored compactly, without any gaps for alignment or padding * The data is stored compactly, without any gaps for alignment or padding
* which may be applied by avpicture_fill(). * which may be applied by avpicture_fill().
* *
* \see avpicture_get_size() * @see avpicture_get_size()
* *
* @param[in] src AVPicture containing image data * @param[in] src AVPicture containing image data
* @param[in] pix_fmt The format in which the picture data is stored. * @param[in] pix_fmt The format in which the picture data is stored.
...@@ -3964,7 +3964,7 @@ typedef struct AVCodecParserContext { ...@@ -3964,7 +3964,7 @@ typedef struct AVCodecParserContext {
int64_t offset; ///< byte offset from starting packet start int64_t offset; ///< byte offset from starting packet start
int64_t cur_frame_end[AV_PARSER_PTS_NB]; int64_t cur_frame_end[AV_PARSER_PTS_NB];
/*! /**
* Set by parser to 1 for key frames and 0 for non-key frames. * Set by parser to 1 for key frames and 0 for non-key frames.
* It is initialized to -1, so if the parser doesn't set this flag, * It is initialized to -1, so if the parser doesn't set this flag,
* old-style fallback using AV_PICTURE_TYPE_I picture type as key frames * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames
...@@ -4211,7 +4211,7 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample); ...@@ -4211,7 +4211,7 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample);
* a pointer to an AVClass struct * a pointer to an AVClass struct
* @param[in] msg string containing an optional message, or NULL if no message * @param[in] msg string containing an optional message, or NULL if no message
*/ */
void av_log_ask_for_sample(void *avc, const char *msg, ...); void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3);
/** /**
* Register the hardware accelerator hwaccel. * Register the hardware accelerator hwaccel.
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
* *
* fc_out[n] = sum(i,0,len-1){ fc_in[i] * filter[(len + n - i)%len] } * fc_out[n] = sum(i,0,len-1){ fc_in[i] * filter[(len + n - i)%len] }
* *
* \note fc_in and fc_out should not overlap! * @note fc_in and fc_out should not overlap!
*/ */
void ff_celp_convolve_circ(int16_t *fc_out, const int16_t *fc_in, void ff_celp_convolve_circ(int16_t *fc_out, const int16_t *fc_in,
const int16_t *filter, int len); const int16_t *filter, int len);
......
...@@ -119,7 +119,7 @@ extern COSTABLE_CONST FFTSample* const FFT_NAME(ff_cos_tabs)[17]; ...@@ -119,7 +119,7 @@ extern COSTABLE_CONST FFTSample* const FFT_NAME(ff_cos_tabs)[17];
/** /**
* Initialize the cosine table in ff_cos_tabs[index] * Initialize the cosine table in ff_cos_tabs[index]
* \param index index in ff_cos_tabs array of the table to initialize * @param index index in ff_cos_tabs array of the table to initialize
*/ */
void ff_init_ff_cos_tabs(int index); void ff_init_ff_cos_tabs(int index);
......
...@@ -116,7 +116,7 @@ static const G729FormatDescription format_g729d_6k4 = { ...@@ -116,7 +116,7 @@ static const G729FormatDescription format_g729d_6k4 = {
}; };
/** /**
* \brief pseudo random number generator * @brief pseudo random number generator
*/ */
static inline uint16_t g729_prng(uint16_t value) static inline uint16_t g729_prng(uint16_t value)
{ {
......
...@@ -97,7 +97,7 @@ found: ...@@ -97,7 +97,7 @@ found:
return i-(state&5); return i-(state&5);
} }
/*! /**
* Parse NAL units of found picture and decode some basic information. * Parse NAL units of found picture and decode some basic information.
* *
* @param s parser context. * @param s parser context.
......
...@@ -32,25 +32,25 @@ ...@@ -32,25 +32,25 @@
#include "lagarithrac.h" #include "lagarithrac.h"
enum LagarithFrameType { enum LagarithFrameType {
FRAME_RAW = 1, /*!< uncompressed */ FRAME_RAW = 1, /**< uncompressed */
FRAME_U_RGB24 = 2, /*!< unaligned RGB24 */ FRAME_U_RGB24 = 2, /**< unaligned RGB24 */
FRAME_ARITH_YUY2 = 3, /*!< arithmetic coded YUY2 */ FRAME_ARITH_YUY2 = 3, /**< arithmetic coded YUY2 */
FRAME_ARITH_RGB24 = 4, /*!< arithmetic coded RGB24 */ FRAME_ARITH_RGB24 = 4, /**< arithmetic coded RGB24 */
FRAME_SOLID_GRAY = 5, /*!< solid grayscale color frame */ FRAME_SOLID_GRAY = 5, /**< solid grayscale color frame */
FRAME_SOLID_COLOR = 6, /*!< solid non-grayscale color frame */ FRAME_SOLID_COLOR = 6, /**< solid non-grayscale color frame */
FRAME_OLD_ARITH_RGB = 7, /*!< obsolete arithmetic coded RGB (no longer encoded by upstream since version 1.1.0) */ FRAME_OLD_ARITH_RGB = 7, /**< obsolete arithmetic coded RGB (no longer encoded by upstream since version 1.1.0) */
FRAME_ARITH_RGBA = 8, /*!< arithmetic coded RGBA */ FRAME_ARITH_RGBA = 8, /**< arithmetic coded RGBA */
FRAME_SOLID_RGBA = 9, /*!< solid RGBA color frame */ FRAME_SOLID_RGBA = 9, /**< solid RGBA color frame */
FRAME_ARITH_YV12 = 10, /*!< arithmetic coded YV12 */ FRAME_ARITH_YV12 = 10, /**< arithmetic coded YV12 */
FRAME_REDUCED_RES = 11, /*!< reduced resolution YV12 frame */ FRAME_REDUCED_RES = 11, /**< reduced resolution YV12 frame */
}; };
typedef struct LagarithContext { typedef struct LagarithContext {
AVCodecContext *avctx; AVCodecContext *avctx;
AVFrame picture; AVFrame picture;
DSPContext dsp; DSPContext dsp;
int zeros; /*!< number of consecutive zero bytes encountered */ int zeros; /**< number of consecutive zero bytes encountered */
int zeros_rem; /*!< number of zero bytes remaining to output */ int zeros_rem; /**< number of zero bytes remaining to output */
} LagarithContext; } LagarithContext;
/** /**
......
...@@ -40,15 +40,15 @@ typedef struct lag_rac { ...@@ -40,15 +40,15 @@ typedef struct lag_rac {
AVCodecContext *avctx; AVCodecContext *avctx;
unsigned low; unsigned low;
unsigned range; unsigned range;
unsigned scale; /*!< Number of bits of precision in range. */ unsigned scale; /**< Number of bits of precision in range. */
unsigned hash_shift; /*!< Number of bits to shift to calculate hash for radix search. */ unsigned hash_shift; /**< Number of bits to shift to calculate hash for radix search. */
const uint8_t *bytestream_start; /*!< Start of input bytestream. */ const uint8_t *bytestream_start; /**< Start of input bytestream. */
const uint8_t *bytestream; /*!< Current position in input bytestream. */ const uint8_t *bytestream; /**< Current position in input bytestream. */
const uint8_t *bytestream_end; /*!< End position of input bytestream. */ const uint8_t *bytestream_end; /**< End position of input bytestream. */
uint32_t prob[258]; /*!< Table of cumulative probability for each symbol. */ uint32_t prob[258]; /**< Table of cumulative probability for each symbol. */
uint8_t range_hash[256]; /*!< Hash table mapping upper byte to approximate symbol. */ uint8_t range_hash[256]; /**< Hash table mapping upper byte to approximate symbol. */
} lag_rac; } lag_rac;
void lag_rac_init(lag_rac *l, GetBitContext *gb, int length); void lag_rac_init(lag_rac *l, GetBitContext *gb, int length);
......
...@@ -73,8 +73,8 @@ typedef struct LclDecContext { ...@@ -73,8 +73,8 @@ typedef struct LclDecContext {
/** /**
* \param srcptr compressed source buffer, must be padded with at least 5 extra bytes * @param srcptr compressed source buffer, must be padded with at least 5 extra bytes
* \param destptr must be padded sufficiently for av_memcpy_backptr * @param destptr must be padded sufficiently for av_memcpy_backptr
*/ */
static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsigned char * destptr, unsigned int destsize) static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsigned char * destptr, unsigned int destsize)
{ {
...@@ -119,11 +119,11 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign ...@@ -119,11 +119,11 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign
#if CONFIG_ZLIB_DECODER #if CONFIG_ZLIB_DECODER
/** /**
* \brief decompress a zlib-compressed data block into decomp_buf * @brief decompress a zlib-compressed data block into decomp_buf
* \param src compressed input buffer * @param src compressed input buffer
* \param src_len data length in input buffer * @param src_len data length in input buffer
* \param offset offset in decomp_buf * @param offset offset in decomp_buf
* \param expected expected decompressed length * @param expected expected decompressed length
*/ */
static int zlib_decomp(AVCodecContext *avctx, const uint8_t *src, int src_len, int offset, int expected) static int zlib_decomp(AVCodecContext *avctx, const uint8_t *src, int src_len, int offset, int expected)
{ {
......
...@@ -74,9 +74,9 @@ void ff_acelp_lsf2lspd(double *lsp, const float *lsf, int lp_order) ...@@ -74,9 +74,9 @@ void ff_acelp_lsf2lspd(double *lsp, const float *lsf, int lp_order)
} }
/** /**
* \brief decodes polynomial coefficients from LSP * @brief decodes polynomial coefficients from LSP
* \param f [out] decoded polynomial coefficients (-0x20000000 <= (3.22) <= 0x1fffffff) * @param f [out] decoded polynomial coefficients (-0x20000000 <= (3.22) <= 0x1fffffff)
* \param lsp LSP coefficients (-0x8000 <= (0.15) <= 0x7fff) * @param lsp LSP coefficients (-0x8000 <= (0.15) <= 0x7fff)
*/ */
static void lsp2poly(int* f, const int16_t* lsp, int lp_half_order) static void lsp2poly(int* f, const int16_t* lsp, int lp_half_order)
{ {
......
...@@ -30,12 +30,12 @@ ...@@ -30,12 +30,12 @@
*/ */
/** /**
* \brief ensure a minimum distance between LSFs * @brief ensure a minimum distance between LSFs
* \param[in,out] lsfq LSF to check and adjust * @param[in,out] lsfq LSF to check and adjust
* \param lsfq_min_distance minimum distance between LSFs * @param lsfq_min_distance minimum distance between LSFs
* \param lsfq_min minimum allowed LSF value * @param lsfq_min minimum allowed LSF value
* \param lsfq_max maximum allowed LSF value * @param lsfq_max maximum allowed LSF value
* \param lp_order LP filter order * @param lp_order LP filter order
*/ */
void ff_acelp_reorder_lsf(int16_t* lsfq, int lsfq_min_distance, int lsfq_min, int lsfq_max, int lp_order); void ff_acelp_reorder_lsf(int16_t* lsfq, int lsfq_min_distance, int lsfq_min, int lsfq_max, int lp_order);
...@@ -53,12 +53,12 @@ void ff_acelp_reorder_lsf(int16_t* lsfq, int lsfq_min_distance, int lsfq_min, in ...@@ -53,12 +53,12 @@ void ff_acelp_reorder_lsf(int16_t* lsfq, int lsfq_min_distance, int lsfq_min, in
void ff_set_min_dist_lsf(float *lsf, double min_spacing, int size); void ff_set_min_dist_lsf(float *lsf, double min_spacing, int size);
/** /**
* \brief Convert LSF to LSP * @brief Convert LSF to LSP
* \param[out] lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000) * @param[out] lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
* \param lsf normalized LSF coefficients (0 <= (2.13) < 0x2000 * PI) * @param lsf normalized LSF coefficients (0 <= (2.13) < 0x2000 * PI)
* \param lp_order LP filter order * @param lp_order LP filter order
* *
* \remark It is safe to pass the same array into the lsf and lsp parameters. * @remark It is safe to pass the same array into the lsf and lsp parameters.
*/ */
void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order); void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order);
...@@ -68,10 +68,10 @@ void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order); ...@@ -68,10 +68,10 @@ void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order);
void ff_acelp_lsf2lspd(double *lsp, const float *lsf, int lp_order); void ff_acelp_lsf2lspd(double *lsp, const float *lsf, int lp_order);
/** /**
* \brief LSP to LP conversion (3.2.6 of G.729) * @brief LSP to LP conversion (3.2.6 of G.729)
* \param[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000) * @param[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000)
* \param lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000) * @param lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
* \param lp_half_order LP filter order, divided by 2 * @param lp_half_order LP filter order, divided by 2
*/ */
void ff_acelp_lsp2lpc(int16_t* lp, const int16_t* lsp, int lp_half_order); void ff_acelp_lsp2lpc(int16_t* lp, const int16_t* lsp, int lp_half_order);
...@@ -81,12 +81,12 @@ void ff_acelp_lsp2lpc(int16_t* lp, const int16_t* lsp, int lp_half_order); ...@@ -81,12 +81,12 @@ void ff_acelp_lsp2lpc(int16_t* lp, const int16_t* lsp, int lp_half_order);
void ff_amrwb_lsp2lpc(const double *lsp, float *lp, int lp_order); void ff_amrwb_lsp2lpc(const double *lsp, float *lp, int lp_order);
/** /**
* \brief Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3.2.5 and 3.2.6 of G.729) * @brief Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3.2.5 and 3.2.6 of G.729)
* \param[out] lp_1st decoded LP coefficients for first subframe (-0x8000 <= (3.12) < 0x8000) * @param[out] lp_1st decoded LP coefficients for first subframe (-0x8000 <= (3.12) < 0x8000)
* \param[out] lp_2nd decoded LP coefficients for second subframe (-0x8000 <= (3.12) < 0x8000) * @param[out] lp_2nd decoded LP coefficients for second subframe (-0x8000 <= (3.12) < 0x8000)
* \param lsp_2nd LSP coefficients of the second subframe (-0x8000 <= (0.15) < 0x8000) * @param lsp_2nd LSP coefficients of the second subframe (-0x8000 <= (0.15) < 0x8000)
* \param lsp_prev LSP coefficients from the second subframe of the previous frame (-0x8000 <= (0.15) < 0x8000) * @param lsp_prev LSP coefficients from the second subframe of the previous frame (-0x8000 <= (0.15) < 0x8000)
* \param lp_order LP filter order * @param lp_order LP filter order
*/ */
void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd, const int16_t* lsp_prev, int lp_order); void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd, const int16_t* lsp_prev, int lp_order);
......
...@@ -248,7 +248,7 @@ static int cmp_internal(MpegEncContext *s, const int x, const int y, const int s ...@@ -248,7 +248,7 @@ static int cmp_internal(MpegEncContext *s, const int x, const int y, const int s
} }
} }
/*! \brief compares a block (either a full macroblock or a partition thereof) /** @brief compares a block (either a full macroblock or a partition thereof)
against a proposed motion-compensated prediction of that block against a proposed motion-compensated prediction of that block
*/ */
static av_always_inline int cmp(MpegEncContext *s, const int x, const int y, const int subx, const int suby, static av_always_inline int cmp(MpegEncContext *s, const int x, const int y, const int subx, const int suby,
......
...@@ -992,8 +992,8 @@ static av_always_inline int diamond_search(MpegEncContext * s, int *best, int dm ...@@ -992,8 +992,8 @@ static av_always_inline int diamond_search(MpegEncContext * s, int *best, int dm
return var_diamond_search(s, best, dmin, src_index, ref_index, penalty_factor, size, h, flags); return var_diamond_search(s, best, dmin, src_index, ref_index, penalty_factor, size, h, flags);
} }
/*! /**
\param P[10][2] a list of candidate mvs to check before starting the @param P[10][2] a list of candidate mvs to check before starting the
iterative search. If one of the candidates is close to the optimal mv, then iterative search. If one of the candidates is close to the optimal mv, then
it takes fewer iterations. And it increases the chance that we find the it takes fewer iterations. And it increases the chance that we find the
optimal mv. optimal mv.
...@@ -1003,12 +1003,12 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int ...@@ -1003,12 +1003,12 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int
int ref_mv_scale, int flags, int size, int h) int ref_mv_scale, int flags, int size, int h)
{ {
MotionEstContext * const c= &s->me; MotionEstContext * const c= &s->me;
int best[2]={0, 0}; /*!< x and y coordinates of the best motion vector. int best[2]={0, 0}; /**< x and y coordinates of the best motion vector.
i.e. the difference between the position of the i.e. the difference between the position of the
block currently being encoded and the position of block currently being encoded and the position of
the block chosen to predict it from. */ the block chosen to predict it from. */
int d; ///< the score (cmp + penalty) of any given mv int d; ///< the score (cmp + penalty) of any given mv
int dmin; /*!< the best value of d, i.e. the score int dmin; /**< the best value of d, i.e. the score
corresponding to the mv stored in best[]. */ corresponding to the mv stored in best[]. */
int map_generation; int map_generation;
int penalty_factor; int penalty_factor;
......
...@@ -154,7 +154,7 @@ typedef struct MotionEstContext{ ...@@ -154,7 +154,7 @@ typedef struct MotionEstContext{
uint32_t *score_map; ///< map to store the scores uint32_t *score_map; ///< map to store the scores
int map_generation; int map_generation;
int pre_penalty_factor; int pre_penalty_factor;
int penalty_factor; /*!< an estimate of the bits required to int penalty_factor; /**< an estimate of the bits required to
code a given mv value, e.g. (1,0) takes code a given mv value, e.g. (1,0) takes
more bits than (0,0). We have to more bits than (0,0). We have to
estimate whether any reduction in estimate whether any reduction in
......
...@@ -63,11 +63,11 @@ static const uint8_t fallback_cquant[] = { ...@@ -63,11 +63,11 @@ static const uint8_t fallback_cquant[] = {
}; };
/** /**
* \brief copy frame data from buffer to AVFrame, handling stride. * @brief copy frame data from buffer to AVFrame, handling stride.
* \param f destination AVFrame * @param f destination AVFrame
* \param src source buffer, does not use any line-stride * @param src source buffer, does not use any line-stride
* \param width width of the video frame * @param width width of the video frame
* \param height height of the video frame * @param height height of the video frame
*/ */
static void copy_frame(AVFrame *f, const uint8_t *src, static void copy_frame(AVFrame *f, const uint8_t *src,
int width, int height) { int width, int height) {
...@@ -77,7 +77,7 @@ static void copy_frame(AVFrame *f, const uint8_t *src, ...@@ -77,7 +77,7 @@ static void copy_frame(AVFrame *f, const uint8_t *src,
} }
/** /**
* \brief extract quantization tables from codec data into our context * @brief extract quantization tables from codec data into our context
*/ */
static int get_quant(AVCodecContext *avctx, NuvContext *c, static int get_quant(AVCodecContext *avctx, NuvContext *c,
const uint8_t *buf, int size) { const uint8_t *buf, int size) {
...@@ -94,7 +94,7 @@ static int get_quant(AVCodecContext *avctx, NuvContext *c, ...@@ -94,7 +94,7 @@ static int get_quant(AVCodecContext *avctx, NuvContext *c,
} }
/** /**
* \brief set quantization tables from a quality value * @brief set quantization tables from a quality value
*/ */
static void get_quant_quality(NuvContext *c, int quality) { static void get_quant_quality(NuvContext *c, int quality) {
int i; int i;
......
...@@ -74,9 +74,9 @@ typedef struct { ...@@ -74,9 +74,9 @@ typedef struct {
static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863}; static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863};
typedef struct { typedef struct {
uint8_t index; /*!< index into the QCELPContext structure */ uint8_t index; /**< index into the QCELPContext structure */
uint8_t bitpos; /*!< position of the lowest bit in the value's byte */ uint8_t bitpos; /**< position of the lowest bit in the value's byte */
uint8_t bitlen; /*!< number of bits to read */ uint8_t bitlen; /**< number of bits to read */
} QCELPBitmap; } QCELPBitmap;
#define QCELP_OF(variable, bit, len) {offsetof(QCELPFrame, variable), bit, len} #define QCELP_OF(variable, bit, len) {offsetof(QCELPFrame, variable), bit, len}
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
typedef enum typedef enum
{ {
I_F_Q = -1, /*!< insufficient frame quality */ I_F_Q = -1, /**< insufficient frame quality */
SILENCE, SILENCE,
RATE_OCTAVE, RATE_OCTAVE,
RATE_QUARTER, RATE_QUARTER,
...@@ -58,12 +58,12 @@ typedef struct ...@@ -58,12 +58,12 @@ typedef struct
{ {
GetBitContext gb; GetBitContext gb;
qcelp_packet_rate bitrate; qcelp_packet_rate bitrate;
QCELPFrame frame; /*!< unpacked data frame */ QCELPFrame frame; /**< unpacked data frame */
uint8_t erasure_count; uint8_t erasure_count;
uint8_t octave_count; /*!< count the consecutive RATE_OCTAVE frames */ uint8_t octave_count; /**< count the consecutive RATE_OCTAVE frames */
float prev_lspf[10]; float prev_lspf[10];
float predictor_lspf[10];/*!< LSP predictor for RATE_OCTAVE and I_F_Q */ float predictor_lspf[10];/**< LSP predictor for RATE_OCTAVE and I_F_Q */
float pitch_synthesis_filter_mem[303]; float pitch_synthesis_filter_mem[303];
float pitch_pre_filter_mem[303]; float pitch_pre_filter_mem[303];
float rnd_fir_filter_mem[180]; float rnd_fir_filter_mem[180];
......
...@@ -33,12 +33,12 @@ ...@@ -33,12 +33,12 @@
if (n) {skip_bits(gb, n);} if (n) {skip_bits(gb, n);}
/** /**
* \brief read one block from stream * @brief read one block from stream
* \param gb contains stream data * @param gb contains stream data
* \param block where data is written to * @param block where data is written to
* \param scan array containing the mapping stream address -> block position * @param scan array containing the mapping stream address -> block position
* \param quant quantization factors * @param quant quantization factors
* \return 0 means the block is not coded, < 0 means an error occurred. * @return 0 means the block is not coded, < 0 means an error occurred.
* *
* Note: GetBitContext is used to make the code simpler, since all data is * Note: GetBitContext is used to make the code simpler, since all data is
* aligned this could be done faster in a different way, e.g. as it is done * aligned this could be done faster in a different way, e.g. as it is done
...@@ -96,13 +96,13 @@ static inline int get_block(GetBitContext *gb, DCTELEM *block, const uint8_t *sc ...@@ -96,13 +96,13 @@ static inline int get_block(GetBitContext *gb, DCTELEM *block, const uint8_t *sc
} }
/** /**
* \brief decode one rtjpeg YUV420 frame * @brief decode one rtjpeg YUV420 frame
* \param c context, must be initialized via rtjpeg_decode_init * @param c context, must be initialized via rtjpeg_decode_init
* \param f AVFrame to place decoded frame into. If parts of the frame * @param f AVFrame to place decoded frame into. If parts of the frame
* are not coded they are left unchanged, so consider initializing it * are not coded they are left unchanged, so consider initializing it
* \param buf buffer containing input data * @param buf buffer containing input data
* \param buf_size length of input data in bytes * @param buf_size length of input data in bytes
* \return number of bytes consumed from the input buffer * @return number of bytes consumed from the input buffer
*/ */
int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f, int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f,
const uint8_t *buf, int buf_size) { const uint8_t *buf, int buf_size) {
...@@ -143,15 +143,15 @@ int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f, ...@@ -143,15 +143,15 @@ int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f,
} }
/** /**
* \brief initialize an RTJpegContext, may be called multiple times * @brief initialize an RTJpegContext, may be called multiple times
* \param c context to initialize * @param c context to initialize
* \param dsp specifies the idct to use for decoding * @param dsp specifies the idct to use for decoding
* \param width width of image, will be rounded down to the nearest multiple * @param width width of image, will be rounded down to the nearest multiple
* of 16 for decoding * of 16 for decoding
* \param height height of image, will be rounded down to the nearest multiple * @param height height of image, will be rounded down to the nearest multiple
* of 16 for decoding * of 16 for decoding
* \param lquant luma quantization table to use * @param lquant luma quantization table to use
* \param cquant chroma quantization table to use * @param cquant chroma quantization table to use
*/ */
void rtjpeg_decode_init(RTJpegContext *c, DSPContext *dsp, void rtjpeg_decode_init(RTJpegContext *c, DSPContext *dsp,
int width, int height, int width, int height,
......
...@@ -56,7 +56,7 @@ void write_##type##_2d_array(const void *arg, int len, int len2)\ ...@@ -56,7 +56,7 @@ void write_##type##_2d_array(const void *arg, int len, int len2)\
} }
/** /**
* \defgroup printfuncs Predefined functions for printing tables * @defgroup printfuncs Predefined functions for printing tables
* *
* \{ * \{
*/ */
......
...@@ -411,7 +411,7 @@ static inline float mulawinv(float y, float clip, float mu) ...@@ -411,7 +411,7 @@ static inline float mulawinv(float y, float clip, float mu)
* a*b == 200 and the nearest integer is ill-defined, use a table to emulate * a*b == 200 and the nearest integer is ill-defined, use a table to emulate
* the following broken float-based implementation used by the binary decoder: * the following broken float-based implementation used by the binary decoder:
* *
* \code * @code
* static int very_broken_op(int a, int b) * static int very_broken_op(int a, int b)
* { * {
* static float test; // Ugh, force gcc to do the division first... * static float test; // Ugh, force gcc to do the division first...
...@@ -419,7 +419,7 @@ static inline float mulawinv(float y, float clip, float mu) ...@@ -419,7 +419,7 @@ static inline float mulawinv(float y, float clip, float mu)
* test = a/400.; * test = a/400.;
* return b * test + 0.5; * return b * test + 0.5;
* } * }
* \endcode * @endcode
* *
* @note if this function is replaced by just ROUNDED_DIV(a*b,400.), the stddev * @note if this function is replaced by just ROUNDED_DIV(a*b,400.), the stddev
* between the original file (before encoding with Yamaha encoder) and the * between the original file (before encoding with Yamaha encoder) and the
...@@ -938,14 +938,14 @@ static void permutate_in_line(int16_t *tab, int num_vect, int num_blocks, ...@@ -938,14 +938,14 @@ static void permutate_in_line(int16_t *tab, int num_vect, int num_blocks,
/** /**
* Interpret the input data as in the following table: * Interpret the input data as in the following table:
* *
* \verbatim * @verbatim
* *
* abcdefgh * abcdefgh
* ijklmnop * ijklmnop
* qrstuvw * qrstuvw
* x123456 * x123456
* *
* \endverbatim * @endverbatim
* *
* and transpose it, giving the output * and transpose it, giving the output
* aiqxbjr1cks2dlt3emu4fvn5gow6hp * aiqxbjr1cks2dlt3emu4fvn5gow6hp
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "vaapi_internal.h" #include "vaapi_internal.h"
/** /**
* \addtogroup VAAPI_Decoding * @addtogroup VAAPI_Decoding
* *
* @{ * @{
*/ */
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
#include <stdint.h> #include <stdint.h>
/** /**
* \defgroup VAAPI_Decoding VA API Decoding * @defgroup VAAPI_Decoding VA API Decoding
* \ingroup Decoder * @ingroup Decoder
* @{ * @{
*/ */
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include "mpegvideo.h" #include "mpegvideo.h"
/** /**
* \addtogroup VAAPI_Decoding * @addtogroup VAAPI_Decoding
* *
* @{ * @{
*/ */
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "vdpau_internal.h" #include "vdpau_internal.h"
/** /**
* \addtogroup VDPAU_Decoding * @addtogroup VDPAU_Decoding
* *
* @{ * @{
*/ */
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#define AVCODEC_VDPAU_H #define AVCODEC_VDPAU_H
/** /**
* \defgroup Decoder VDPAU Decoder and Renderer * @defgroup Decoder VDPAU Decoder and Renderer
* *
* VDPAU hardware acceleration has two modules * VDPAU hardware acceleration has two modules
* - VDPAU decoding * - VDPAU decoding
...@@ -38,25 +38,25 @@ ...@@ -38,25 +38,25 @@
* and rendering (API calls) are done as part of the VDPAU * and rendering (API calls) are done as part of the VDPAU
* presentation (vo_vdpau.c) module. * presentation (vo_vdpau.c) module.
* *
* \defgroup VDPAU_Decoding VDPAU Decoding * @defgroup VDPAU_Decoding VDPAU Decoding
* \ingroup Decoder * @ingroup Decoder
* @{ * @{
*/ */
#include <vdpau/vdpau.h> #include <vdpau/vdpau.h>
#include <vdpau/vdpau_x11.h> #include <vdpau/vdpau_x11.h>
/** \brief The videoSurface is used for rendering. */ /** @brief The videoSurface is used for rendering. */
#define FF_VDPAU_STATE_USED_FOR_RENDER 1 #define FF_VDPAU_STATE_USED_FOR_RENDER 1
/** /**
* \brief The videoSurface is needed for reference/prediction. * @brief The videoSurface is needed for reference/prediction.
* The codec manipulates this. * The codec manipulates this.
*/ */
#define FF_VDPAU_STATE_USED_FOR_REFERENCE 2 #define FF_VDPAU_STATE_USED_FOR_REFERENCE 2
/** /**
* \brief This structure is used as a callback between the FFmpeg * @brief This structure is used as a callback between the FFmpeg
* decoder (vd_) and presentation (vo_) module. * decoder (vd_) and presentation (vo_) module.
* This is used for defining a video frame containing surface, * This is used for defining a video frame containing surface,
* picture parameter, bitstream information etc which are passed * picture parameter, bitstream information etc which are passed
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#include "idct_xvid.h" #include "idct_xvid.h"
#include "dsputil_mmx.h" #include "dsputil_mmx.h"
/*! /**
* @file * @file
* @brief SSE2 idct compatible with xvidmmx * @brief SSE2 idct compatible with xvidmmx
*/ */
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
/*! /**
* @file * @file
* header for Xvid IDCT functions * header for Xvid IDCT functions
*/ */
......
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
/** /**
* Encode a single color run. At most 16 bits will be used. * Encode a single color run. At most 16 bits will be used.
* \param len length of the run, values > 255 mean "until end of line", may not be < 0. * @param len length of the run, values > 255 mean "until end of line", may not be < 0.
* \param color color to encode, only the lowest two bits are used and all others must be 0. * @param color color to encode, only the lowest two bits are used and all others must be 0.
*/ */
static void put_xsub_rle(PutBitContext *pb, int len, int color) static void put_xsub_rle(PutBitContext *pb, int len, int color)
{ {
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <alsa/asoundlib.h> #include <alsa/asoundlib.h>
#include "avdevice.h" #include "avdevice.h"
#include "libavutil/avassert.h"
#include "alsa-audio.h" #include "alsa-audio.h"
...@@ -64,7 +65,7 @@ static av_cold snd_pcm_format_t codec_id_to_pcm_format(int codec_id) ...@@ -64,7 +65,7 @@ static av_cold snd_pcm_format_t codec_id_to_pcm_format(int codec_id)
static void alsa_reorder_ ## NAME ## _out_50(const void *in_v, void *out_v, int n) \ static void alsa_reorder_ ## NAME ## _out_50(const void *in_v, void *out_v, int n) \
{ \ { \
const TYPE *in = in_v; \ const TYPE *in = in_v; \
TYPE * out = out_v; \ TYPE *out = out_v; \
\ \
while (n-- > 0) { \ while (n-- > 0) { \
out[0] = in[0]; \ out[0] = in[0]; \
...@@ -81,7 +82,7 @@ static void alsa_reorder_ ## NAME ## _out_50(const void *in_v, void *out_v, int ...@@ -81,7 +82,7 @@ static void alsa_reorder_ ## NAME ## _out_50(const void *in_v, void *out_v, int
static void alsa_reorder_ ## NAME ## _out_51(const void *in_v, void *out_v, int n) \ static void alsa_reorder_ ## NAME ## _out_51(const void *in_v, void *out_v, int n) \
{ \ { \
const TYPE *in = in_v; \ const TYPE *in = in_v; \
TYPE * out = out_v; \ TYPE *out = out_v; \
\ \
while (n-- > 0) { \ while (n-- > 0) { \
out[0] = in[0]; \ out[0] = in[0]; \
...@@ -99,7 +100,7 @@ static void alsa_reorder_ ## NAME ## _out_51(const void *in_v, void *out_v, int ...@@ -99,7 +100,7 @@ static void alsa_reorder_ ## NAME ## _out_51(const void *in_v, void *out_v, int
static void alsa_reorder_ ## NAME ## _out_71(const void *in_v, void *out_v, int n) \ static void alsa_reorder_ ## NAME ## _out_71(const void *in_v, void *out_v, int n) \
{ \ { \
const TYPE *in = in_v; \ const TYPE *in = in_v; \
TYPE * out = out_v; \ TYPE *out = out_v; \
\ \
while (n-- > 0) { \ while (n-- > 0) { \
out[0] = in[0]; \ out[0] = in[0]; \
...@@ -128,57 +129,57 @@ REORDER_OUT_50(f32, float) ...@@ -128,57 +129,57 @@ REORDER_OUT_50(f32, float)
REORDER_OUT_51(f32, float) REORDER_OUT_51(f32, float)
REORDER_OUT_71(f32, float) REORDER_OUT_71(f32, float)
#define REORDER_DUMMY ((void *)1) #define FORMAT_I8 0
#define FORMAT_I16 1
#define FORMAT_I32 2
#define FORMAT_F32 3
#define PICK_REORDER(layout)\
switch(format) {\
case FORMAT_I8: s->reorder_func = alsa_reorder_int8_out_ ##layout; break;\
case FORMAT_I16: s->reorder_func = alsa_reorder_int16_out_ ##layout; break;\
case FORMAT_I32: s->reorder_func = alsa_reorder_int32_out_ ##layout; break;\
case FORMAT_F32: s->reorder_func = alsa_reorder_f32_out_ ##layout; break;\
}
static av_cold ff_reorder_func find_reorder_func(int codec_id, static av_cold int find_reorder_func(AlsaData *s, int codec_id, int64_t layout, int out)
int64_t layout,
int out)
{ {
return int format;
codec_id == CODEC_ID_PCM_U8 || codec_id == CODEC_ID_PCM_S8 ||
codec_id == CODEC_ID_PCM_ALAW || codec_id == CODEC_ID_PCM_MULAW ? /* reordering input is not currently supported */
layout == AV_CH_LAYOUT_QUAD || layout == AV_CH_LAYOUT_2_2 ? if (!out)
REORDER_DUMMY : return AVERROR(ENOSYS);
layout == AV_CH_LAYOUT_5POINT0_BACK || layout == AV_CH_LAYOUT_5POINT0 ?
out ? alsa_reorder_int8_out_50 : NULL : /* reordering is not needed for QUAD or 2_2 layout */
layout == AV_CH_LAYOUT_5POINT1_BACK || layout == AV_CH_LAYOUT_5POINT1 ? if (layout == AV_CH_LAYOUT_QUAD || layout == AV_CH_LAYOUT_2_2)
out ? alsa_reorder_int8_out_51 : NULL : return 0;
layout == AV_CH_LAYOUT_7POINT1 ?
out ? alsa_reorder_int8_out_71 : NULL : switch (codec_id) {
NULL : case CODEC_ID_PCM_S8:
codec_id == CODEC_ID_PCM_U16LE || codec_id == CODEC_ID_PCM_U16BE || case CODEC_ID_PCM_U8:
codec_id == CODEC_ID_PCM_S16LE || codec_id == CODEC_ID_PCM_S16BE ? case CODEC_ID_PCM_ALAW:
layout == AV_CH_LAYOUT_QUAD || layout == AV_CH_LAYOUT_2_2 ? case CODEC_ID_PCM_MULAW: format = FORMAT_I8; break;
REORDER_DUMMY : case CODEC_ID_PCM_S16LE:
layout == AV_CH_LAYOUT_5POINT0_BACK || layout == AV_CH_LAYOUT_5POINT0 ? case CODEC_ID_PCM_S16BE:
out ? alsa_reorder_int16_out_50 : NULL : case CODEC_ID_PCM_U16LE:
layout == AV_CH_LAYOUT_5POINT1_BACK || layout == AV_CH_LAYOUT_5POINT1 ? case CODEC_ID_PCM_U16BE: format = FORMAT_I16; break;
out ? alsa_reorder_int16_out_51 : NULL : case CODEC_ID_PCM_S32LE:
layout == AV_CH_LAYOUT_7POINT1 ? case CODEC_ID_PCM_S32BE:
out ? alsa_reorder_int16_out_71 : NULL : case CODEC_ID_PCM_U32LE:
NULL : case CODEC_ID_PCM_U32BE: format = FORMAT_I32; break;
codec_id == CODEC_ID_PCM_U32LE || codec_id == CODEC_ID_PCM_U32BE || case CODEC_ID_PCM_F32LE:
codec_id == CODEC_ID_PCM_S32LE || codec_id == CODEC_ID_PCM_S32BE ? case CODEC_ID_PCM_F32BE: format = FORMAT_F32; break;
layout == AV_CH_LAYOUT_QUAD || layout == AV_CH_LAYOUT_2_2 ? default: return AVERROR(ENOSYS);
REORDER_DUMMY : }
layout == AV_CH_LAYOUT_5POINT0_BACK || layout == AV_CH_LAYOUT_5POINT0 ?
out ? alsa_reorder_int32_out_50 : NULL : if (layout == AV_CH_LAYOUT_5POINT0_BACK || layout == AV_CH_LAYOUT_5POINT0)
layout == AV_CH_LAYOUT_5POINT1_BACK || layout == AV_CH_LAYOUT_5POINT1 ? PICK_REORDER(50)
out ? alsa_reorder_int32_out_51 : NULL : else if (layout == AV_CH_LAYOUT_5POINT1_BACK || layout == AV_CH_LAYOUT_5POINT1)
layout == AV_CH_LAYOUT_7POINT1 ? PICK_REORDER(51)
out ? alsa_reorder_int32_out_71 : NULL : else if (layout == AV_CH_LAYOUT_7POINT1)
NULL : PICK_REORDER(71)
codec_id == CODEC_ID_PCM_F32LE || codec_id == CODEC_ID_PCM_F32BE ?
layout == AV_CH_LAYOUT_QUAD || layout == AV_CH_LAYOUT_2_2 ? return s->reorder_func ? 0 : AVERROR(ENOSYS);
REORDER_DUMMY :
layout == AV_CH_LAYOUT_5POINT0_BACK || layout == AV_CH_LAYOUT_5POINT0 ?
out ? alsa_reorder_f32_out_50 : NULL :
layout == AV_CH_LAYOUT_5POINT1_BACK || layout == AV_CH_LAYOUT_5POINT1 ?
out ? alsa_reorder_f32_out_51 : NULL :
layout == AV_CH_LAYOUT_7POINT1 ?
out ? alsa_reorder_f32_out_71 : NULL :
NULL :
NULL;
} }
av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode, av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode,
...@@ -286,22 +287,17 @@ av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode, ...@@ -286,22 +287,17 @@ av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode,
snd_pcm_hw_params_free(hw_params); snd_pcm_hw_params_free(hw_params);
if (channels > 2 && layout) { if (channels > 2 && layout) {
s->reorder_func = find_reorder_func(*codec_id, layout, if (find_reorder_func(s, *codec_id, layout, mode == SND_PCM_STREAM_PLAYBACK) < 0) {
mode == SND_PCM_STREAM_PLAYBACK); char name[128];
if (s->reorder_func == REORDER_DUMMY) { av_get_channel_layout_string(name, sizeof(name), channels, layout);
s->reorder_func = NULL; av_log(ctx, AV_LOG_WARNING, "ALSA channel layout unknown or unimplemented for %s %s.\n",
} else if (s->reorder_func) { name, mode == SND_PCM_STREAM_PLAYBACK ? "playback" : "capture");
}
if (s->reorder_func) {
s->reorder_buf_size = buffer_size; s->reorder_buf_size = buffer_size;
s->reorder_buf = av_malloc(s->reorder_buf_size * s->frame_size); s->reorder_buf = av_malloc(s->reorder_buf_size * s->frame_size);
if (!s->reorder_buf) if (!s->reorder_buf)
goto fail1; goto fail1;
} else {
char name[32];
av_get_channel_layout_string(name, sizeof(name), channels, layout);
av_log(ctx, AV_LOG_WARNING,
"ALSA channel layout unknown or unimplemented for %s %s.\n",
name,
mode == SND_PCM_STREAM_PLAYBACK ? "playback" : "capture");
} }
} }
...@@ -350,6 +346,7 @@ int ff_alsa_extend_reorder_buf(AlsaData *s, int min_size) ...@@ -350,6 +346,7 @@ int ff_alsa_extend_reorder_buf(AlsaData *s, int min_size)
int size = s->reorder_buf_size; int size = s->reorder_buf_size;
void *r; void *r;
av_assert0(size != 0);
while (size < min_size) while (size < min_size)
size *= 2; size *= 2;
r = av_realloc(s->reorder_buf, size * s->frame_size); r = av_realloc(s->reorder_buf, size * s->frame_size);
......
...@@ -47,11 +47,11 @@ typedef struct { ...@@ -47,11 +47,11 @@ typedef struct {
snd_pcm_t *h; snd_pcm_t *h;
int frame_size; ///< preferred size for reads and writes int frame_size; ///< preferred size for reads and writes
int period_size; ///< bytes per sample * channels int period_size; ///< bytes per sample * channels
ff_reorder_func reorder_func;
void *reorder_buf;
int reorder_buf_size; ///< in frames
int sample_rate; ///< sample rate set by user int sample_rate; ///< sample rate set by user
int channels; ///< number of channels set by user int channels; ///< number of channels set by user
void (*reorder_func)(const void *, void *, int);
void *reorder_buf;
int reorder_buf_size; ///< in frames
} AlsaData; } AlsaData;
/** /**
......
...@@ -248,7 +248,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -248,7 +248,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
VideoData *s = s1->priv_data; VideoData *s = s1->priv_data;
AVStream *st; AVStream *st;
int width, height; int width, height;
AVRational fps; AVRational framerate;
int ret = 0; int ret = 0;
#if FF_API_FORMAT_PARAMETERS #if FF_API_FORMAT_PARAMETERS
...@@ -263,7 +263,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -263,7 +263,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
#endif #endif
if ((ret = av_parse_video_size(&width, &height, s->video_size)) < 0) { if ((ret = av_parse_video_size(&width, &height, s->video_size)) < 0) {
av_log(s1, AV_LOG_ERROR, "Couldn't parse video size.\n"); av_log(s1, AV_LOG_ERROR, "Could not parse video size '%s'.\n", s->video_size);
goto out; goto out;
} }
...@@ -277,8 +277,8 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -277,8 +277,8 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
ret = AVERROR(EINVAL); ret = AVERROR(EINVAL);
goto out; goto out;
} }
if ((ret = av_parse_video_rate(&fps, s->framerate)) < 0) { if ((ret = av_parse_video_rate(&framerate, s->framerate)) < 0) {
av_log(s1, AV_LOG_ERROR, "Couldn't parse framerate.\n"); av_log(s1, AV_LOG_ERROR, "Could not parse framerate '%s'.\n", s->framerate);
goto out; goto out;
} }
#if FF_API_FORMAT_PARAMETERS #if FF_API_FORMAT_PARAMETERS
...@@ -287,7 +287,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -287,7 +287,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
if (ap->height > 0) if (ap->height > 0)
height = ap->height; height = ap->height;
if (ap->time_base.num) if (ap->time_base.num)
fps = (AVRational){ap->time_base.den, ap->time_base.num}; framerate = (AVRational){ap->time_base.den, ap->time_base.num};
#endif #endif
st = av_new_stream(s1, 0); st = av_new_stream(s1, 0);
...@@ -299,15 +299,15 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -299,15 +299,15 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
s->width = width; s->width = width;
s->height = height; s->height = height;
s->per_frame = ((uint64_t)1000000 * fps.den) / fps.num; s->per_frame = ((uint64_t)1000000 * framerate.den) / framerate.num;
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->codec->pix_fmt = PIX_FMT_YUV420P; st->codec->pix_fmt = PIX_FMT_YUV420P;
st->codec->codec_id = CODEC_ID_RAWVIDEO; st->codec->codec_id = CODEC_ID_RAWVIDEO;
st->codec->width = width; st->codec->width = width;
st->codec->height = height; st->codec->height = height;
st->codec->time_base.den = fps.num; st->codec->time_base.den = framerate.num;
st->codec->time_base.num = fps.den; st->codec->time_base.num = framerate.den;
if (bktr_init(s1->filename, width, height, s->standard, if (bktr_init(s1->filename, width, height, s->standard,
......
...@@ -79,7 +79,7 @@ static enum PixelFormat get_pixfmt_from_fb_varinfo(struct fb_var_screeninfo *var ...@@ -79,7 +79,7 @@ static enum PixelFormat get_pixfmt_from_fb_varinfo(struct fb_var_screeninfo *var
typedef struct { typedef struct {
AVClass *class; ///< class for private options AVClass *class; ///< class for private options
int frame_size; ///< size in bytes of a grabbed frame int frame_size; ///< size in bytes of a grabbed frame
AVRational fps; ///< framerate AVRational framerate_q; ///< framerate
char *framerate; ///< framerate string set by a private option char *framerate; ///< framerate string set by a private option
int64_t time_frame; ///< time for the next frame to output (in 1/1000000 units) int64_t time_frame; ///< time for the next frame to output (in 1/1000000 units)
...@@ -102,14 +102,14 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx, ...@@ -102,14 +102,14 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx,
enum PixelFormat pix_fmt; enum PixelFormat pix_fmt;
int ret, flags = O_RDONLY; int ret, flags = O_RDONLY;
ret = av_parse_video_rate(&fbdev->fps, fbdev->framerate); ret = av_parse_video_rate(&fbdev->framerate_q, fbdev->framerate);
if (ret < 0) { if (ret < 0) {
av_log(avctx, AV_LOG_ERROR, "Couldn't parse framerate.\n"); av_log(avctx, AV_LOG_ERROR, "Could not parse framerate '%s'.\n", fbdev->framerate);
return ret; return ret;
} }
#if FF_API_FORMAT_PARAMETERS #if FF_API_FORMAT_PARAMETERS
if (ap->time_base.num) if (ap->time_base.num)
fbdev->fps = (AVRational){ap->time_base.den, ap->time_base.num}; fbdev->framerate_q = (AVRational){ap->time_base.den, ap->time_base.num};
#endif #endif
if (!(st = av_new_stream(avctx, 0))) if (!(st = av_new_stream(avctx, 0)))
...@@ -168,15 +168,15 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx, ...@@ -168,15 +168,15 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx,
st->codec->width = fbdev->width; st->codec->width = fbdev->width;
st->codec->height = fbdev->heigth; st->codec->height = fbdev->heigth;
st->codec->pix_fmt = pix_fmt; st->codec->pix_fmt = pix_fmt;
st->codec->time_base = (AVRational){fbdev->fps.den, fbdev->fps.num}; st->codec->time_base = (AVRational){fbdev->framerate_q.den, fbdev->framerate_q.num};
st->codec->bit_rate = st->codec->bit_rate =
fbdev->width * fbdev->heigth * fbdev->bytes_per_pixel * av_q2d(fbdev->fps) * 8; fbdev->width * fbdev->heigth * fbdev->bytes_per_pixel * av_q2d(fbdev->framerate_q) * 8;
av_log(avctx, AV_LOG_INFO, av_log(avctx, AV_LOG_INFO,
"w:%d h:%d bpp:%d pixfmt:%s fps:%d/%d bit_rate:%d\n", "w:%d h:%d bpp:%d pixfmt:%s fps:%d/%d bit_rate:%d\n",
fbdev->width, fbdev->heigth, fbdev->varinfo.bits_per_pixel, fbdev->width, fbdev->heigth, fbdev->varinfo.bits_per_pixel,
av_pix_fmt_descriptors[pix_fmt].name, av_pix_fmt_descriptors[pix_fmt].name,
fbdev->fps.num, fbdev->fps.den, fbdev->framerate_q.num, fbdev->framerate_q.den,
st->codec->bit_rate); st->codec->bit_rate);
return 0; return 0;
...@@ -204,7 +204,7 @@ static int fbdev_read_packet(AVFormatContext *avctx, AVPacket *pkt) ...@@ -204,7 +204,7 @@ static int fbdev_read_packet(AVFormatContext *avctx, AVPacket *pkt)
"time_frame:%"PRId64" curtime:%"PRId64" delay:%"PRId64"\n", "time_frame:%"PRId64" curtime:%"PRId64" delay:%"PRId64"\n",
fbdev->time_frame, curtime, delay); fbdev->time_frame, curtime, delay);
if (delay <= 0) { if (delay <= 0) {
fbdev->time_frame += INT64_C(1000000) / av_q2d(fbdev->fps); fbdev->time_frame += INT64_C(1000000) / av_q2d(fbdev->framerate_q);
break; break;
} }
if (avctx->flags & AVFMT_FLAG_NONBLOCK) if (avctx->flags & AVFMT_FLAG_NONBLOCK)
......
...@@ -439,19 +439,19 @@ static int v4l2_set_parameters(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -439,19 +439,19 @@ static int v4l2_set_parameters(AVFormatContext *s1, AVFormatParameters *ap)
struct v4l2_streamparm streamparm = {0}; struct v4l2_streamparm streamparm = {0};
struct v4l2_fract *tpf = &streamparm.parm.capture.timeperframe; struct v4l2_fract *tpf = &streamparm.parm.capture.timeperframe;
int i, ret; int i, ret;
AVRational fps; AVRational framerate_q;
streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (s->framerate && (ret = av_parse_video_rate(&fps, s->framerate)) < 0) { if (s->framerate && (ret = av_parse_video_rate(&framerate_q, s->framerate)) < 0) {
av_log(s1, AV_LOG_ERROR, "Couldn't parse framerate.\n"); av_log(s1, AV_LOG_ERROR, "Could not parse framerate '%s'.\n", s->framerate);
return ret; return ret;
} }
#if FF_API_FORMAT_PARAMETERS #if FF_API_FORMAT_PARAMETERS
if (ap->channel > 0) if (ap->channel > 0)
s->channel = ap->channel; s->channel = ap->channel;
if (ap->time_base.num) if (ap->time_base.num)
fps = (AVRational){ap->time_base.den, ap->time_base.num}; framerate_q = (AVRational){ap->time_base.den, ap->time_base.num};
#endif #endif
/* set tv video input */ /* set tv video input */
...@@ -500,23 +500,23 @@ static int v4l2_set_parameters(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -500,23 +500,23 @@ static int v4l2_set_parameters(AVFormatContext *s1, AVFormatParameters *ap)
} }
} }
if (fps.num && fps.den) { if (framerate_q.num && framerate_q.den) {
av_log(s1, AV_LOG_DEBUG, "Setting time per frame to %d/%d\n", av_log(s1, AV_LOG_DEBUG, "Setting time per frame to %d/%d\n",
fps.den, fps.num); framerate_q.den, framerate_q.num);
tpf->numerator = fps.den; tpf->numerator = framerate_q.den;
tpf->denominator = fps.num; tpf->denominator = framerate_q.num;
if (ioctl(s->fd, VIDIOC_S_PARM, &streamparm) != 0) { if (ioctl(s->fd, VIDIOC_S_PARM, &streamparm) != 0) {
av_log(s1, AV_LOG_ERROR, av_log(s1, AV_LOG_ERROR,
"ioctl set time per frame(%d/%d) failed\n", "ioctl set time per frame(%d/%d) failed\n",
fps.den, fps.num); framerate_q.den, framerate_q.num);
return AVERROR(EIO); return AVERROR(EIO);
} }
if (fps.num != tpf->denominator || if (framerate_q.num != tpf->denominator ||
fps.den != tpf->numerator) { framerate_q.den != tpf->numerator) {
av_log(s1, AV_LOG_INFO, av_log(s1, AV_LOG_INFO,
"The driver changed the time per frame from %d/%d to %d/%d\n", "The driver changed the time per frame from %d/%d to %d/%d\n",
fps.den, fps.num, framerate_q.den, framerate_q.num,
tpf->numerator, tpf->denominator); tpf->numerator, tpf->denominator);
} }
} else { } else {
...@@ -581,7 +581,7 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -581,7 +581,7 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap)
av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */
if (s->video_size && (res = av_parse_video_size(&s->width, &s->height, s->video_size)) < 0) { if (s->video_size && (res = av_parse_video_size(&s->width, &s->height, s->video_size)) < 0) {
av_log(s1, AV_LOG_ERROR, "Couldn't parse video size.\n"); av_log(s1, AV_LOG_ERROR, "Could not parse video size '%s'.\n", s->video_size);
goto out; goto out;
} }
if (s->pixel_format && (pix_fmt = av_get_pix_fmt(s->pixel_format)) == PIX_FMT_NONE) { if (s->pixel_format && (pix_fmt = av_get_pix_fmt(s->pixel_format)) == PIX_FMT_NONE) {
......
...@@ -247,7 +247,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) ...@@ -247,7 +247,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
DWORD biCompression; DWORD biCompression;
WORD biBitCount; WORD biBitCount;
int ret; int ret;
AVRational fps; AVRational framerate_q;
if (!strcmp(s->filename, "list")) { if (!strcmp(s->filename, "list")) {
for (devnum = 0; devnum <= 9; devnum++) { for (devnum = 0; devnum <= 9; devnum++) {
...@@ -267,7 +267,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) ...@@ -267,7 +267,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
#if FF_API_FORMAT_PARAMETERS #if FF_API_FORMAT_PARAMETERS
if (ap->time_base.num) if (ap->time_base.num)
fps = (AVRational){ap->time_base.den, ap->time_base.num}; framerate_q = (AVRational){ap->time_base.den, ap->time_base.num};
#endif #endif
ctx->hwnd = capCreateCaptureWindow(NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, 0); ctx->hwnd = capCreateCaptureWindow(NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, 0);
...@@ -367,7 +367,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) ...@@ -367,7 +367,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
cparms.fYield = 1; // Spawn a background thread cparms.fYield = 1; // Spawn a background thread
cparms.dwRequestMicroSecPerFrame = cparms.dwRequestMicroSecPerFrame =
(fps.den*1000000) / fps.num; (framerate_q.den*1000000) / framerate_q.num;
cparms.fAbortLeftMouse = 0; cparms.fAbortLeftMouse = 0;
cparms.fAbortRightMouse = 0; cparms.fAbortRightMouse = 0;
cparms.fCaptureAudio = 0; cparms.fCaptureAudio = 0;
...@@ -379,7 +379,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) ...@@ -379,7 +379,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
goto fail_io; goto fail_io;
codec = st->codec; codec = st->codec;
codec->time_base = (AVRational){fps.den, fps.num}; codec->time_base = (AVRational){framerate_q.den, framerate_q.num};
codec->codec_type = AVMEDIA_TYPE_VIDEO; codec->codec_type = AVMEDIA_TYPE_VIDEO;
codec->width = bi->bmiHeader.biWidth; codec->width = bi->bmiHeader.biWidth;
codec->height = bi->bmiHeader.biHeight; codec->height = bi->bmiHeader.biHeight;
......
...@@ -28,9 +28,9 @@ ...@@ -28,9 +28,9 @@
#include "asfcrypt.h" #include "asfcrypt.h"
/** /**
* \brief find multiplicative inverse modulo 2 ^ 32 * @brief find multiplicative inverse modulo 2 ^ 32
* \param v number to invert, must be odd! * @param v number to invert, must be odd!
* \return number so that result * v = 1 (mod 2^32) * @return number so that result * v = 1 (mod 2^32)
*/ */
static uint32_t inverse(uint32_t v) { static uint32_t inverse(uint32_t v) {
// v ^ 3 gives the inverse (mod 16), could also be implemented // v ^ 3 gives the inverse (mod 16), could also be implemented
...@@ -45,9 +45,9 @@ static uint32_t inverse(uint32_t v) { ...@@ -45,9 +45,9 @@ static uint32_t inverse(uint32_t v) {
} }
/** /**
* \brief read keys from keybuf into keys * @brief read keys from keybuf into keys
* \param keybuf buffer containing the keys * @param keybuf buffer containing the keys
* \param keys output key array containing the keys for encryption in * @param keys output key array containing the keys for encryption in
* native endianness * native endianness
*/ */
static void multiswap_init(const uint8_t keybuf[48], uint32_t keys[12]) { static void multiswap_init(const uint8_t keybuf[48], uint32_t keys[12]) {
...@@ -57,9 +57,9 @@ static void multiswap_init(const uint8_t keybuf[48], uint32_t keys[12]) { ...@@ -57,9 +57,9 @@ static void multiswap_init(const uint8_t keybuf[48], uint32_t keys[12]) {
} }
/** /**
* \brief invert the keys so that encryption become decryption keys and * @brief invert the keys so that encryption become decryption keys and
* the other way round. * the other way round.
* \param keys key array of ints to invert * @param keys key array of ints to invert
*/ */
static void multiswap_invert_keys(uint32_t keys[12]) { static void multiswap_invert_keys(uint32_t keys[12]) {
int i; int i;
...@@ -92,12 +92,12 @@ static uint32_t multiswap_inv_step(const uint32_t keys[12], uint32_t v) { ...@@ -92,12 +92,12 @@ static uint32_t multiswap_inv_step(const uint32_t keys[12], uint32_t v) {
} }
/** /**
* \brief "MultiSwap" encryption * @brief "MultiSwap" encryption
* \param keys 32 bit numbers in machine endianness, * @param keys 32 bit numbers in machine endianness,
* 0-4 and 6-10 must be inverted from decryption * 0-4 and 6-10 must be inverted from decryption
* \param key another key, this one must be the same for the decryption * @param key another key, this one must be the same for the decryption
* \param data data to encrypt * @param data data to encrypt
* \return encrypted data * @return encrypted data
*/ */
static uint64_t multiswap_enc(const uint32_t keys[12], uint64_t key, uint64_t data) { static uint64_t multiswap_enc(const uint32_t keys[12], uint64_t key, uint64_t data) {
uint32_t a = data; uint32_t a = data;
...@@ -114,12 +114,12 @@ static uint64_t multiswap_enc(const uint32_t keys[12], uint64_t key, uint64_t da ...@@ -114,12 +114,12 @@ static uint64_t multiswap_enc(const uint32_t keys[12], uint64_t key, uint64_t da
} }
/** /**
* \brief "MultiSwap" decryption * @brief "MultiSwap" decryption
* \param keys 32 bit numbers in machine endianness, * @param keys 32 bit numbers in machine endianness,
* 0-4 and 6-10 must be inverted from encryption * 0-4 and 6-10 must be inverted from encryption
* \param key another key, this one must be the same as for the encryption * @param key another key, this one must be the same as for the encryption
* \param data data to decrypt * @param data data to decrypt
* \return decrypted data * @return decrypted data
*/ */
static uint64_t multiswap_dec(const uint32_t keys[12], uint64_t key, uint64_t data) { static uint64_t multiswap_dec(const uint32_t keys[12], uint64_t key, uint64_t data) {
uint32_t a; uint32_t a;
......
...@@ -285,11 +285,7 @@ attribute_deprecated int64_t url_fsize(AVIOContext *s); ...@@ -285,11 +285,7 @@ attribute_deprecated int64_t url_fsize(AVIOContext *s);
#define URL_EOF (-1) #define URL_EOF (-1)
attribute_deprecated int url_fgetc(AVIOContext *s); attribute_deprecated int url_fgetc(AVIOContext *s);
attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size); attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size);
#ifdef __GNUC__ attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
#else
attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...);
#endif
attribute_deprecated void put_flush_packet(AVIOContext *s); attribute_deprecated void put_flush_packet(AVIOContext *s);
attribute_deprecated int url_open_dyn_buf(AVIOContext **s); attribute_deprecated int url_open_dyn_buf(AVIOContext **s);
attribute_deprecated int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size); attribute_deprecated int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
...@@ -463,11 +459,7 @@ int64_t avio_size(AVIOContext *s); ...@@ -463,11 +459,7 @@ int64_t avio_size(AVIOContext *s);
int url_feof(AVIOContext *s); int url_feof(AVIOContext *s);
/** @warning currently size is limited */ /** @warning currently size is limited */
#ifdef __GNUC__ int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
int avio_printf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
#else
int avio_printf(AVIOContext *s, const char *fmt, ...);
#endif
void avio_flush(AVIOContext *s); void avio_flush(AVIOContext *s);
......
...@@ -32,11 +32,11 @@ struct gxf_stream_info { ...@@ -32,11 +32,11 @@ struct gxf_stream_info {
}; };
/** /**
* \brief parses a packet header, extracting type and length * @brief parses a packet header, extracting type and length
* \param pb AVIOContext to read header from * @param pb AVIOContext to read header from
* \param type detected packet type is stored here * @param type detected packet type is stored here
* \param length detected packet length, excluding header is stored here * @param length detected packet length, excluding header is stored here
* \return 0 if header not found or contains invalid data, 1 otherwise * @return 0 if header not found or contains invalid data, 1 otherwise
*/ */
static int parse_packet_header(AVIOContext *pb, GXFPktType *type, int *length) { static int parse_packet_header(AVIOContext *pb, GXFPktType *type, int *length) {
if (avio_rb32(pb)) if (avio_rb32(pb))
...@@ -58,7 +58,7 @@ static int parse_packet_header(AVIOContext *pb, GXFPktType *type, int *length) { ...@@ -58,7 +58,7 @@ static int parse_packet_header(AVIOContext *pb, GXFPktType *type, int *length) {
} }
/** /**
* \brief check if file starts with a PKT_MAP header * @brief check if file starts with a PKT_MAP header
*/ */
static int gxf_probe(AVProbeData *p) { static int gxf_probe(AVProbeData *p) {
static const uint8_t startcode[] = {0, 0, 0, 0, 1, 0xbc}; // start with map packet static const uint8_t startcode[] = {0, 0, 0, 0, 1, 0xbc}; // start with map packet
...@@ -70,10 +70,10 @@ static int gxf_probe(AVProbeData *p) { ...@@ -70,10 +70,10 @@ static int gxf_probe(AVProbeData *p) {
} }
/** /**
* \brief gets the stream index for the track with the specified id, creates new * @brief gets the stream index for the track with the specified id, creates new
* stream if not found * stream if not found
* \param id id of stream to find / add * @param id id of stream to find / add
* \param format stream format identifier * @param format stream format identifier
*/ */
static int get_sindex(AVFormatContext *s, int id, int format) { static int get_sindex(AVFormatContext *s, int id, int format) {
int i; int i;
...@@ -153,9 +153,9 @@ static int get_sindex(AVFormatContext *s, int id, int format) { ...@@ -153,9 +153,9 @@ static int get_sindex(AVFormatContext *s, int id, int format) {
} }
/** /**
* \brief filters out interesting tags from material information. * @brief filters out interesting tags from material information.
* \param len length of tag section, will be adjusted to contain remaining bytes * @param len length of tag section, will be adjusted to contain remaining bytes
* \param si struct to store collected information into * @param si struct to store collected information into
*/ */
static void gxf_material_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si) { static void gxf_material_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si) {
si->first_field = AV_NOPTS_VALUE; si->first_field = AV_NOPTS_VALUE;
...@@ -179,9 +179,9 @@ static void gxf_material_tags(AVIOContext *pb, int *len, struct gxf_stream_info ...@@ -179,9 +179,9 @@ static void gxf_material_tags(AVIOContext *pb, int *len, struct gxf_stream_info
} }
/** /**
* \brief convert fps tag value to AVRational fps * @brief convert fps tag value to AVRational fps
* \param fps fps value from tag * @param fps fps value from tag
* \return fps as AVRational, or 0 / 0 if unknown * @return fps as AVRational, or 0 / 0 if unknown
*/ */
static AVRational fps_tag2avr(int32_t fps) { static AVRational fps_tag2avr(int32_t fps) {
extern const AVRational ff_frame_rate_tab[]; extern const AVRational ff_frame_rate_tab[];
...@@ -190,9 +190,9 @@ static AVRational fps_tag2avr(int32_t fps) { ...@@ -190,9 +190,9 @@ static AVRational fps_tag2avr(int32_t fps) {
} }
/** /**
* \brief convert UMF attributes flags to AVRational fps * @brief convert UMF attributes flags to AVRational fps
* \param flags UMF flags to convert * @param flags UMF flags to convert
* \return fps as AVRational, or 0 / 0 if unknown * @return fps as AVRational, or 0 / 0 if unknown
*/ */
static AVRational fps_umf2avr(uint32_t flags) { static AVRational fps_umf2avr(uint32_t flags) {
static const AVRational map[] = {{50, 1}, {60000, 1001}, {24, 1}, static const AVRational map[] = {{50, 1}, {60000, 1001}, {24, 1},
...@@ -202,9 +202,9 @@ static AVRational fps_umf2avr(uint32_t flags) { ...@@ -202,9 +202,9 @@ static AVRational fps_umf2avr(uint32_t flags) {
} }
/** /**
* \brief filters out interesting tags from track information. * @brief filters out interesting tags from track information.
* \param len length of tag section, will be adjusted to contain remaining bytes * @param len length of tag section, will be adjusted to contain remaining bytes
* \param si struct to store collected information into * @param si struct to store collected information into
*/ */
static void gxf_track_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si) { static void gxf_track_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si) {
si->frames_per_second = (AVRational){0, 0}; si->frames_per_second = (AVRational){0, 0};
...@@ -228,7 +228,7 @@ static void gxf_track_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si ...@@ -228,7 +228,7 @@ static void gxf_track_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si
} }
/** /**
* \brief read index from FLT packet into stream 0 av_index * @brief read index from FLT packet into stream 0 av_index
*/ */
static void gxf_read_index(AVFormatContext *s, int pkt_len) { static void gxf_read_index(AVFormatContext *s, int pkt_len) {
AVIOContext *pb = s->pb; AVIOContext *pb = s->pb;
...@@ -374,11 +374,11 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { ...@@ -374,11 +374,11 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
} }
/** /**
* \brief resync the stream on the next media packet with specified properties * @brief resync the stream on the next media packet with specified properties
* \param max_interval how many bytes to search for matching packet at most * @param max_interval how many bytes to search for matching packet at most
* \param track track id the media packet must belong to, -1 for any * @param track track id the media packet must belong to, -1 for any
* \param timestamp minimum timestamp (== field number) the packet must have, -1 for any * @param timestamp minimum timestamp (== field number) the packet must have, -1 for any
* \return timestamp of packet found * @return timestamp of packet found
*/ */
static int64_t gxf_resync_media(AVFormatContext *s, uint64_t max_interval, int track, int timestamp) { static int64_t gxf_resync_media(AVFormatContext *s, uint64_t max_interval, int track, int timestamp) {
uint32_t tmp; uint32_t tmp;
......
...@@ -106,7 +106,7 @@ uint64_t ff_ntp_time(void); ...@@ -106,7 +106,7 @@ uint64_t ff_ntp_time(void);
*/ */
int ff_url_join(char *str, int size, const char *proto, int ff_url_join(char *str, int size, const char *proto,
const char *authorization, const char *hostname, const char *authorization, const char *hostname,
int port, const char *fmt, ...); int port, const char *fmt, ...) av_printf_format(7, 8);
/** /**
* Append the media-specific SDP fragment for the media stream c * Append the media-specific SDP fragment for the media stream c
......
...@@ -232,11 +232,11 @@ static void set_pcr_pid(AVFormatContext *s, unsigned int programid, unsigned int ...@@ -232,11 +232,11 @@ static void set_pcr_pid(AVFormatContext *s, unsigned int programid, unsigned int
} }
/** /**
* \brief discard_pid() decides if the pid is to be discarded according * @brief discard_pid() decides if the pid is to be discarded according
* to caller's programs selection * to caller's programs selection
* \param ts : - TS context * @param ts : - TS context
* \param pid : - pid * @param pid : - pid
* \return 1 if the pid is only comprised in programs that have .discard=AVDISCARD_ALL * @return 1 if the pid is only comprised in programs that have .discard=AVDISCARD_ALL
* 0 otherwise * 0 otherwise
*/ */
static int discard_pid(MpegTSContext *ts, unsigned int pid) static int discard_pid(MpegTSContext *ts, unsigned int pid)
......
...@@ -49,11 +49,11 @@ static int nuv_probe(AVProbeData *p) { ...@@ -49,11 +49,11 @@ static int nuv_probe(AVProbeData *p) {
#define PKTSIZE(s) (s & 0xffffff) #define PKTSIZE(s) (s & 0xffffff)
/** /**
* \brief read until we found all data needed for decoding * @brief read until we found all data needed for decoding
* \param vst video stream of which to change parameters * @param vst video stream of which to change parameters
* \param ast video stream of which to change parameters * @param ast video stream of which to change parameters
* \param myth set if this is a MythTVVideo format file * @param myth set if this is a MythTVVideo format file
* \return 1 if all required codec data was found * @return 1 if all required codec data was found
*/ */
static int get_codec_data(AVIOContext *pb, AVStream *vst, static int get_codec_data(AVIOContext *pb, AVStream *vst,
AVStream *ast, int myth) { AVStream *ast, int myth) {
......
...@@ -86,7 +86,7 @@ int rtp_set_remote_url(URLContext *h, const char *uri) ...@@ -86,7 +86,7 @@ int rtp_set_remote_url(URLContext *h, const char *uri)
* "http://host:port/path?option1=val1&option2=val2... * "http://host:port/path?option1=val1&option2=val2...
*/ */
static void url_add_option(char *buf, int buf_size, const char *fmt, ...) static av_printf_format(3, 4) void url_add_option(char *buf, int buf_size, const char *fmt, ...)
{ {
char buf1[1024]; char buf1[1024];
va_list ap; va_list ap;
......
...@@ -36,6 +36,7 @@ static av_always_inline av_const int FASTDIV(int a, int b) ...@@ -36,6 +36,7 @@ static av_always_inline av_const int FASTDIV(int a, int b)
int r; int r;
__asm__ ("cmp %2, #2 \n\t" __asm__ ("cmp %2, #2 \n\t"
"ldr %0, [%3, %2, lsl #2] \n\t" "ldr %0, [%3, %2, lsl #2] \n\t"
"ite le \n\t"
"lsrle %0, %1, #1 \n\t" "lsrle %0, %1, #1 \n\t"
"smmulgt %0, %0, %1 \n\t" "smmulgt %0, %0, %1 \n\t"
: "=&r"(r) : "r"(a), "r"(b), "r"(ff_inverse) : "cc"); : "=&r"(r) : "r"(a), "r"(b), "r"(ff_inverse) : "cc");
...@@ -101,6 +102,7 @@ static av_always_inline av_const int32_t av_clipl_int32_arm(int64_t a) ...@@ -101,6 +102,7 @@ static av_always_inline av_const int32_t av_clipl_int32_arm(int64_t a)
{ {
int x, y; int x, y;
__asm__ ("adds %1, %R2, %Q2, lsr #31 \n\t" __asm__ ("adds %1, %R2, %Q2, lsr #31 \n\t"
"itet ne \n\t"
"mvnne %1, #1<<31 \n\t" "mvnne %1, #1<<31 \n\t"
"moveq %0, %Q2 \n\t" "moveq %0, %Q2 \n\t"
"eorne %0, %1, %R2, asr #31 \n\t" "eorne %0, %1, %R2, asr #31 \n\t"
......
...@@ -127,8 +127,10 @@ ...@@ -127,8 +127,10 @@
#ifdef __GNUC__ #ifdef __GNUC__
# define av_builtin_constant_p __builtin_constant_p # define av_builtin_constant_p __builtin_constant_p
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
#else #else
# define av_builtin_constant_p(x) 0 # define av_builtin_constant_p(x) 0
# define av_printf_format(fmtpos, attrpos)
#endif #endif
#endif /* AVUTIL_ATTRIBUTES_H */ #endif /* AVUTIL_ATTRIBUTES_H */
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#define AVUTIL_AVSTRING_H #define AVUTIL_AVSTRING_H
#include <stddef.h> #include <stddef.h>
#include "attributes.h"
/** /**
* Return non-zero if pfx is a prefix of str. If it is, *ptr is set to * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to
...@@ -107,7 +108,7 @@ size_t av_strlcat(char *dst, const char *src, size_t size); ...@@ -107,7 +108,7 @@ size_t av_strlcat(char *dst, const char *src, size_t size);
* @return the length of the string that would have been generated * @return the length of the string that would have been generated
* if enough space had been available * if enough space had been available
*/ */
size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...); size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4);
/** /**
* Convert a number to a av_malloced string. * Convert a number to a av_malloced string.
......
...@@ -40,8 +40,8 @@ ...@@ -40,8 +40,8 @@
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
#define LIBAVUTIL_VERSION_MAJOR 51 #define LIBAVUTIL_VERSION_MAJOR 51
#define LIBAVUTIL_VERSION_MINOR 9 #define LIBAVUTIL_VERSION_MINOR 10
#define LIBAVUTIL_VERSION_MICRO 1 #define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MINOR, \
......
...@@ -270,16 +270,16 @@ static av_always_inline av_const int av_popcount_c(uint32_t x) ...@@ -270,16 +270,16 @@ static av_always_inline av_const int av_popcount_c(uint32_t x)
}\ }\
}\ }\
/*! /**
* \def PUT_UTF8(val, tmp, PUT_BYTE) * @def PUT_UTF8(val, tmp, PUT_BYTE)
* Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
* \param val is an input-only argument and should be of type uint32_t. It holds * @param val is an input-only argument and should be of type uint32_t. It holds
* a UCS-4 encoded Unicode character that is to be converted to UTF-8. If * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
* val is given as a function it is executed only once. * val is given as a function it is executed only once.
* \param tmp is a temporary variable and should be of type uint8_t. It * @param tmp is a temporary variable and should be of type uint8_t. It
* represents an intermediate value during conversion that is to be * represents an intermediate value during conversion that is to be
* output by PUT_BYTE. * output by PUT_BYTE.
* \param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
* It could be a function or a statement, and uses tmp as the input byte. * It could be a function or a statement, and uses tmp as the input byte.
* For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
* executed up to 4 times for values in the valid UTF-8 range and up to * executed up to 4 times for values in the valid UTF-8 range and up to
...@@ -306,16 +306,16 @@ static av_always_inline av_const int av_popcount_c(uint32_t x) ...@@ -306,16 +306,16 @@ static av_always_inline av_const int av_popcount_c(uint32_t x)
}\ }\
} }
/*! /**
* \def PUT_UTF16(val, tmp, PUT_16BIT) * @def PUT_UTF16(val, tmp, PUT_16BIT)
* Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
* \param val is an input-only argument and should be of type uint32_t. It holds * @param val is an input-only argument and should be of type uint32_t. It holds
* a UCS-4 encoded Unicode character that is to be converted to UTF-16. If * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
* val is given as a function it is executed only once. * val is given as a function it is executed only once.
* \param tmp is a temporary variable and should be of type uint16_t. It * @param tmp is a temporary variable and should be of type uint16_t. It
* represents an intermediate value during conversion that is to be * represents an intermediate value during conversion that is to be
* output by PUT_16BIT. * output by PUT_16BIT.
* \param PUT_16BIT writes the converted UTF-16 data to any proper destination * @param PUT_16BIT writes the converted UTF-16 data to any proper destination
* in desired endianness. It could be a function or a statement, and uses tmp * in desired endianness. It could be a function or a statement, and uses tmp
* as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;"
* PUT_BYTE will be executed 1 or 2 times depending on input character. * PUT_BYTE will be executed 1 or 2 times depending on input character.
......
...@@ -240,7 +240,7 @@ static uint32_t f_func(uint32_t r, uint64_t k) { ...@@ -240,7 +240,7 @@ static uint32_t f_func(uint32_t r, uint64_t k) {
} }
/** /**
* \brief rotate the two halves of the expanded 56 bit key each 1 bit left * @brief rotate the two halves of the expanded 56 bit key each 1 bit left
* *
* Note: the specification calls this "shift", so I kept it although * Note: the specification calls this "shift", so I kept it although
* it is confusing. * it is confusing.
......
...@@ -30,22 +30,22 @@ struct AVDES { ...@@ -30,22 +30,22 @@ struct AVDES {
}; };
/** /**
* \brief Initializes an AVDES context. * @brief Initializes an AVDES context.
* *
* \param key_bits must be 64 or 192 * @param key_bits must be 64 or 192
* \param decrypt 0 for encryption, 1 for decryption * @param decrypt 0 for encryption, 1 for decryption
*/ */
int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt);
/** /**
* \brief Encrypts / decrypts using the DES algorithm. * @brief Encrypts / decrypts using the DES algorithm.
* *
* \param count number of 8 byte blocks * @param count number of 8 byte blocks
* \param dst destination array, can be equal to src, must be 8-byte aligned * @param dst destination array, can be equal to src, must be 8-byte aligned
* \param src source array, can be equal to dst, must be 8-byte aligned, may be NULL * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL
* \param iv initialization vector for CBC mode, if NULL then ECB will be used, * @param iv initialization vector for CBC mode, if NULL then ECB will be used,
* must be 8-byte aligned * must be 8-byte aligned
* \param decrypt 0 for encryption, 1 for decryption * @param decrypt 0 for encryption, 1 for decryption
*/ */
void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <stdarg.h> #include <stdarg.h>
#include "avutil.h" #include "avutil.h"
#include "attributes.h"
/** /**
* Describe the class of an AVClass context structure. That is an * Describe the class of an AVClass context structure. That is an
...@@ -129,11 +130,7 @@ typedef struct { ...@@ -129,11 +130,7 @@ typedef struct {
* subsequent arguments are converted to output. * subsequent arguments are converted to output.
* @see av_vlog * @see av_vlog
*/ */
#ifdef __GNUC__ void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
void av_log(void *avcl, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
#else
void av_log(void *avcl, int level, const char *fmt, ...);
#endif
void av_vlog(void *avcl, int level, const char *fmt, va_list); void av_vlog(void *avcl, int level, const char *fmt, va_list);
int av_log_get_level(void); int av_log_get_level(void);
......
...@@ -37,8 +37,8 @@ typedef struct LZOContext { ...@@ -37,8 +37,8 @@ typedef struct LZOContext {
} LZOContext; } LZOContext;
/** /**
* \brief Reads one byte from the input buffer, avoiding an overrun. * @brief Reads one byte from the input buffer, avoiding an overrun.
* \return byte read * @return byte read
*/ */
static inline int get_byte(LZOContext *c) { static inline int get_byte(LZOContext *c) {
if (c->in < c->in_end) if (c->in < c->in_end)
...@@ -54,10 +54,10 @@ static inline int get_byte(LZOContext *c) { ...@@ -54,10 +54,10 @@ static inline int get_byte(LZOContext *c) {
#endif #endif
/** /**
* \brief Decodes a length value in the coding used by lzo. * @brief Decodes a length value in the coding used by lzo.
* \param x previous byte value * @param x previous byte value
* \param mask bits used from x * @param mask bits used from x
* \return decoded length value * @return decoded length value
*/ */
static inline int get_len(LZOContext *c, int x, int mask) { static inline int get_len(LZOContext *c, int x, int mask) {
int cnt = x & mask; int cnt = x & mask;
...@@ -82,8 +82,8 @@ static inline int get_len(LZOContext *c, int x, int mask) { ...@@ -82,8 +82,8 @@ static inline int get_len(LZOContext *c, int x, int mask) {
#endif #endif
/** /**
* \brief Copies bytes from input to output buffer with checking. * @brief Copies bytes from input to output buffer with checking.
* \param cnt number of bytes to copy, must be >= 0 * @param cnt number of bytes to copy, must be >= 0
*/ */
static inline void copy(LZOContext *c, int cnt) { static inline void copy(LZOContext *c, int cnt) {
register const uint8_t *src = c->in; register const uint8_t *src = c->in;
...@@ -111,9 +111,9 @@ static inline void copy(LZOContext *c, int cnt) { ...@@ -111,9 +111,9 @@ static inline void copy(LZOContext *c, int cnt) {
static inline void memcpy_backptr(uint8_t *dst, int back, int cnt); static inline void memcpy_backptr(uint8_t *dst, int back, int cnt);
/** /**
* \brief Copies previously decoded bytes to current position. * @brief Copies previously decoded bytes to current position.
* \param back how many bytes back we start * @param back how many bytes back we start
* \param cnt number of bytes to copy, must be >= 0 * @param cnt number of bytes to copy, must be >= 0
* *
* cnt > back is valid, this will copy the bytes we just copied, * cnt > back is valid, this will copy the bytes we just copied,
* thus creating a repeating pattern with a period length of back. * thus creating a repeating pattern with a period length of back.
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <stdint.h> #include <stdint.h>
/** \defgroup errflags Error flags returned by av_lzo1x_decode /** @defgroup errflags Error flags returned by av_lzo1x_decode
* \{ */ * \{ */
//! end of the input buffer reached before decoding finished //! end of the input buffer reached before decoding finished
#define AV_LZO_INPUT_DEPLETED 1 #define AV_LZO_INPUT_DEPLETED 1
...@@ -40,12 +40,12 @@ ...@@ -40,12 +40,12 @@
#define AV_LZO_OUTPUT_PADDING 12 #define AV_LZO_OUTPUT_PADDING 12
/** /**
* \brief Decodes LZO 1x compressed data. * @brief Decodes LZO 1x compressed data.
* \param out output buffer * @param out output buffer
* \param outlen size of output buffer, number of bytes left are returned here * @param outlen size of output buffer, number of bytes left are returned here
* \param in input buffer * @param in input buffer
* \param inlen size of input buffer, number of bytes left are returned here * @param inlen size of input buffer, number of bytes left are returned here
* \return 0 on success, otherwise a combination of the error flags above * @return 0 on success, otherwise a combination of the error flags above
* *
* Make sure all buffers are appropriately padded, in must provide * Make sure all buffers are appropriately padded, in must provide
* AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes.
...@@ -53,10 +53,10 @@ ...@@ -53,10 +53,10 @@
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
/** /**
* \brief deliberately overlapping memcpy implementation * @brief deliberately overlapping memcpy implementation
* \param dst destination buffer; must be padded with 12 additional bytes * @param dst destination buffer; must be padded with 12 additional bytes
* \param back how many bytes back we start (the initial size of the overlapping window) * @param back how many bytes back we start (the initial size of the overlapping window)
* \param cnt number of bytes to copy, must be >= 0 * @param cnt number of bytes to copy, must be >= 0
* *
* cnt > back is valid, this will copy the bytes we just copied, * cnt > back is valid, this will copy the bytes we just copied,
* thus creating a repeating pattern with a period length of back. * thus creating a repeating pattern with a period length of back.
......
...@@ -29,21 +29,21 @@ struct AVRC4 { ...@@ -29,21 +29,21 @@ struct AVRC4 {
}; };
/** /**
* \brief Initializes an AVRC4 context. * @brief Initializes an AVRC4 context.
* *
* \param key_bits must be a multiple of 8 * @param key_bits must be a multiple of 8
* \param decrypt 0 for encryption, 1 for decryption, currently has no effect * @param decrypt 0 for encryption, 1 for decryption, currently has no effect
*/ */
int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt);
/** /**
* \brief Encrypts / decrypts using the RC4 algorithm. * @brief Encrypts / decrypts using the RC4 algorithm.
* *
* \param count number of bytes * @param count number of bytes
* \param dst destination array, can be equal to src * @param dst destination array, can be equal to src
* \param src source array, can be equal to dst, may be NULL * @param src source array, can be equal to dst, may be NULL
* \param iv not (yet) used for RC4, should be NULL * @param iv not (yet) used for RC4, should be NULL
* \param decrypt 0 for encryption, 1 for decryption, not (yet) used * @param decrypt 0 for encryption, 1 for decryption, not (yet) used
*/ */
void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
......
SRC_DIR := $(SRC_PATH_BARE)/lib$(NAME) SRC_DIR := $(SRC_PATH)/lib$(NAME)
include $(SUBDIR)../common.mak include $(SUBDIR)../common.mak
......
...@@ -41,16 +41,16 @@ tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS) ...@@ -41,16 +41,16 @@ tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS)
tools/lavfi-showfiltfmts$(EXESUF): tools/lavfi-showfiltfmts.o $(FF_DEP_LIBS) tools/lavfi-showfiltfmts$(EXESUF): tools/lavfi-showfiltfmts.o $(FF_DEP_LIBS)
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS) $(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
include $(SRC_PATH_BARE)/tests/fate.mak include $(SRC_PATH)/tests/fate.mak
include $(SRC_PATH_BARE)/tests/fate2.mak include $(SRC_PATH)/tests/fate2.mak
include $(SRC_PATH_BARE)/tests/fate/aac.mak include $(SRC_PATH)/tests/fate/aac.mak
include $(SRC_PATH_BARE)/tests/fate/als.mak include $(SRC_PATH)/tests/fate/als.mak
include $(SRC_PATH_BARE)/tests/fate/fft.mak include $(SRC_PATH)/tests/fate/fft.mak
include $(SRC_PATH_BARE)/tests/fate/h264.mak include $(SRC_PATH)/tests/fate/h264.mak
include $(SRC_PATH_BARE)/tests/fate/mp3.mak include $(SRC_PATH)/tests/fate/mp3.mak
include $(SRC_PATH_BARE)/tests/fate/vorbis.mak include $(SRC_PATH)/tests/fate/vorbis.mak
include $(SRC_PATH_BARE)/tests/fate/vp8.mak include $(SRC_PATH)/tests/fate/vp8.mak
FATE_ACODEC = $(ACODEC_TESTS:%=fate-acodec-%) FATE_ACODEC = $(ACODEC_TESTS:%=fate-acodec-%)
FATE_VSYNTH1 = $(VCODEC_TESTS:%=fate-vsynth1-%) FATE_VSYNTH1 = $(VCODEC_TESTS:%=fate-vsynth1-%)
......
...@@ -3,7 +3,7 @@ VP8_SUITE = 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 ...@@ -3,7 +3,7 @@ VP8_SUITE = 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017
define FATE_VP8_SUITE define FATE_VP8_SUITE
FATE_VP8 += fate-vp8-test-vector$(2)-$(1) FATE_VP8 += fate-vp8-test-vector$(2)-$(1)
fate-vp8-test-vector$(2)-$(1): CMD = framemd5 $(3) -i $(SAMPLES)/vp8-test-vectors-r1/vp80-00-comprehensive-$(1).ivf fate-vp8-test-vector$(2)-$(1): CMD = framemd5 $(3) -i $(SAMPLES)/vp8-test-vectors-r1/vp80-00-comprehensive-$(1).ivf
fate-vp8-test-vector$(2)-$(1): REF = $(SRC_PATH_BARE)/tests/ref/fate/vp8-test-vector-$(1) fate-vp8-test-vector$(2)-$(1): REF = $(SRC_PATH)/tests/ref/fate/vp8-test-vector-$(1)
endef endef
define FATE_VP8_FULL define FATE_VP8_FULL
...@@ -11,7 +11,7 @@ $(foreach N,$(VP8_SUITE),$(eval $(call FATE_VP8_SUITE,$(N),$(1),$(2)))) ...@@ -11,7 +11,7 @@ $(foreach N,$(VP8_SUITE),$(eval $(call FATE_VP8_SUITE,$(N),$(1),$(2))))
FATE_VP8 += fate-vp8-sign-bias$(1) FATE_VP8 += fate-vp8-sign-bias$(1)
fate-vp8-sign-bias$(1): CMD = framemd5 $(2) -i $(SAMPLES)/vp8/sintel-signbias.ivf fate-vp8-sign-bias$(1): CMD = framemd5 $(2) -i $(SAMPLES)/vp8/sintel-signbias.ivf
fate-vp8-sign-bias$(1): REF = $(SRC_PATH_BARE)/tests/ref/fate/vp8-sign-bias fate-vp8-sign-bias$(1): REF = $(SRC_PATH)/tests/ref/fate/vp8-sign-bias
endef endef
$(eval $(call FATE_VP8_FULL)) $(eval $(call FATE_VP8_FULL))
......
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