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: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
686959e87e
66
Makefile
66
Makefile
@ -1,13 +1,49 @@
|
|||||||
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)
|
||||||
|
|
||||||
vpath %.c $(SRC_DIR)
|
ifndef V
|
||||||
vpath %.h $(SRC_DIR)
|
Q = @
|
||||||
vpath %.S $(SRC_DIR)
|
ECHO = printf "$(1)\t%s\n" $(2)
|
||||||
vpath %.asm $(SRC_DIR)
|
BRIEF = CC AS YASM AR LD HOSTCC STRIP CP
|
||||||
vpath %.v $(SRC_DIR)
|
SILENT = DEPCC YASMDEP RM RANLIB
|
||||||
vpath %.texi $(SRC_PATH_BARE)
|
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 $<
|
||||||
|
|
||||||
|
%.ver: %.v
|
||||||
|
$(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
|
||||||
|
|
||||||
|
%.c %.h: TAG = GEN
|
||||||
|
|
||||||
|
# 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
|
|||||||
|
|
||||||
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)
|
|||||||
$(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
|
|||||||
|
|
||||||
-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
|
|||||||
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*
|
||||||
|
50
common.mak
50
common.mak
@ -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)
|
||||||
|
10
configure
vendored
10
configure
vendored
@ -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'
|
|||||||
|
|
||||||
# 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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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:
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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 @@
|
|||||||
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(
|
|||||||
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(
|
|||||||
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(
|
|||||||
* 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(
|
|||||||
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(
|
|||||||
*
|
*
|
||||||
* 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,
|
|||||||
"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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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 @@
|
|||||||
# 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
|
|||||||
#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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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]
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
||||||
|
@ -71,7 +71,9 @@ function ff_\type\()_h264_chroma_mc8_neon, export=1
|
|||||||
pld [r1]
|
pld [r1]
|
||||||
pld [r1, r2]
|
pld [r1, r2]
|
||||||
|
|
||||||
muls r7, r4, r5
|
A muls r7, r4, r5
|
||||||
|
T mul r7, r4, r5
|
||||||
|
T cmp r7, #0
|
||||||
rsb r6, r7, r5, lsl #3
|
rsb r6, r7, r5, lsl #3
|
||||||
rsb ip, r7, r4, lsl #3
|
rsb ip, r7, r4, lsl #3
|
||||||
sub r4, r7, r4, lsl #3
|
sub r4, r7, r4, lsl #3
|
||||||
@ -197,7 +199,9 @@ function ff_\type\()_h264_chroma_mc4_neon, export=1
|
|||||||
pld [r1]
|
pld [r1]
|
||||||
pld [r1, r2]
|
pld [r1, r2]
|
||||||
|
|
||||||
muls r7, r4, r5
|
A muls r7, r4, r5
|
||||||
|
T mul r7, r4, r5
|
||||||
|
T cmp r7, #0
|
||||||
rsb r6, r7, r5, lsl #3
|
rsb r6, r7, r5, lsl #3
|
||||||
rsb ip, r7, r4, lsl #3
|
rsb ip, r7, r4, lsl #3
|
||||||
sub r4, r7, r4, lsl #3
|
sub r4, r7, r4, lsl #3
|
||||||
@ -368,10 +372,10 @@ function ff_\type\()_h264_chroma_mc2_neon, export=1
|
|||||||
pop {r4-r6, pc}
|
pop {r4-r6, pc}
|
||||||
2:
|
2:
|
||||||
.ifc \type,put
|
.ifc \type,put
|
||||||
ldrh r5, [r1], r2
|
ldrh_post r5, r1, r2
|
||||||
strh r5, [r0], r2
|
strh_post r5, r0, r2
|
||||||
ldrh r6, [r1], r2
|
ldrh_post r6, r1, r2
|
||||||
strh r6, [r0], r2
|
strh_post r6, r0, r2
|
||||||
.else
|
.else
|
||||||
vld1.16 {d16[0]}, [r1], r2
|
vld1.16 {d16[0]}, [r1], r2
|
||||||
vld1.16 {d16[1]}, [r1], r2
|
vld1.16 {d16[1]}, [r1], r2
|
||||||
@ -404,28 +408,17 @@ endfunc
|
|||||||
ldr ip, [sp]
|
ldr ip, [sp]
|
||||||
tst r2, r2
|
tst r2, r2
|
||||||
ldr ip, [ip]
|
ldr ip, [ip]
|
||||||
|
it ne
|
||||||
tstne r3, r3
|
tstne r3, r3
|
||||||
vmov.32 d24[0], ip
|
vmov.32 d24[0], ip
|
||||||
and ip, ip, ip, lsl #16
|
and ip, ip, ip, lsl #16
|
||||||
|
it eq
|
||||||
bxeq lr
|
bxeq lr
|
||||||
ands ip, ip, ip, lsl #8
|
ands ip, ip, ip, lsl #8
|
||||||
|
it lt
|
||||||
bxlt lr
|
bxlt lr
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro align_push_regs
|
|
||||||
and ip, sp, #15
|
|
||||||
add ip, ip, #32
|
|
||||||
sub sp, sp, ip
|
|
||||||
vst1.64 {d12-d15}, [sp,:128]
|
|
||||||
sub sp, sp, #32
|
|
||||||
vst1.64 {d8-d11}, [sp,:128]
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro align_pop_regs
|
|
||||||
vld1.64 {d8-d11}, [sp,:128]!
|
|
||||||
vld1.64 {d12-d15}, [sp,:128], ip
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro h264_loop_filter_luma
|
.macro h264_loop_filter_luma
|
||||||
vdup.8 q11, r2 @ alpha
|
vdup.8 q11, r2 @ alpha
|
||||||
vmovl.u8 q12, d24
|
vmovl.u8 q12, d24
|
||||||
@ -506,7 +499,7 @@ function ff_h264_v_loop_filter_luma_neon, export=1
|
|||||||
vld1.64 {d18,d19}, [r0,:128], r1
|
vld1.64 {d18,d19}, [r0,:128], r1
|
||||||
vld1.64 {d16,d17}, [r0,:128], r1
|
vld1.64 {d16,d17}, [r0,:128], r1
|
||||||
|
|
||||||
align_push_regs
|
vpush {d8-d15}
|
||||||
|
|
||||||
h264_loop_filter_luma
|
h264_loop_filter_luma
|
||||||
|
|
||||||
@ -516,7 +509,7 @@ function ff_h264_v_loop_filter_luma_neon, export=1
|
|||||||
vst1.64 {d0, d1}, [r0,:128], r1
|
vst1.64 {d0, d1}, [r0,:128], r1
|
||||||
vst1.64 {d10,d11}, [r0,:128]
|
vst1.64 {d10,d11}, [r0,:128]
|
||||||
|
|
||||||
align_pop_regs
|
vpop {d8-d15}
|
||||||
bx lr
|
bx lr
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -543,7 +536,7 @@ function ff_h264_h_loop_filter_luma_neon, export=1
|
|||||||
|
|
||||||
transpose_8x8 q3, q10, q9, q8, q0, q1, q2, q13
|
transpose_8x8 q3, q10, q9, q8, q0, q1, q2, q13
|
||||||
|
|
||||||
align_push_regs
|
vpush {d8-d15}
|
||||||
|
|
||||||
h264_loop_filter_luma
|
h264_loop_filter_luma
|
||||||
|
|
||||||
@ -568,7 +561,7 @@ function ff_h264_h_loop_filter_luma_neon, export=1
|
|||||||
vst1.32 {d1[1]}, [r0], r1
|
vst1.32 {d1[1]}, [r0], r1
|
||||||
vst1.32 {d11[1]}, [r0], r1
|
vst1.32 {d11[1]}, [r0], r1
|
||||||
|
|
||||||
align_pop_regs
|
vpop {d8-d15}
|
||||||
bx lr
|
bx lr
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1116,6 +1109,7 @@ function \type\()_h264_qpel8_hv_lowpass_neon
|
|||||||
vrhadd.u8 d11, d11, d7
|
vrhadd.u8 d11, d11, d7
|
||||||
sub r0, r0, r2, lsl #3
|
sub r0, r0, r2, lsl #3
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
vst1.64 {d12}, [r0,:64], r2
|
vst1.64 {d12}, [r0,:64], r2
|
||||||
vst1.64 {d13}, [r0,:64], r2
|
vst1.64 {d13}, [r0,:64], r2
|
||||||
vst1.64 {d14}, [r0,:64], r2
|
vst1.64 {d14}, [r0,:64], r2
|
||||||
@ -1263,7 +1257,9 @@ function ff_\type\()_h264_qpel8_mc11_neon, export=1
|
|||||||
\type\()_h264_qpel8_mc11:
|
\type\()_h264_qpel8_mc11:
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r0, r11, #15
|
||||||
|
T mov sp, r0
|
||||||
sub sp, sp, #64
|
sub sp, sp, #64
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
@ -1271,14 +1267,14 @@ function ff_\type\()_h264_qpel8_mc11_neon, export=1
|
|||||||
mov ip, #8
|
mov ip, #8
|
||||||
vpush {d8-d15}
|
vpush {d8-d15}
|
||||||
bl put_h264_qpel8_h_lowpass_neon
|
bl put_h264_qpel8_h_lowpass_neon
|
||||||
ldrd r0, [r11]
|
ldrd r0, [r11], #8
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
add ip, sp, #64
|
add ip, sp, #64
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
mov r2, #8
|
mov r2, #8
|
||||||
bl \type\()_h264_qpel8_v_lowpass_l2_neon
|
bl \type\()_h264_qpel8_v_lowpass_l2_neon
|
||||||
vpop {d8-d15}
|
vpop {d8-d15}
|
||||||
add sp, r11, #8
|
mov sp, r11
|
||||||
pop {r11, pc}
|
pop {r11, pc}
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1287,7 +1283,9 @@ function ff_\type\()_h264_qpel8_mc21_neon, export=1
|
|||||||
\type\()_h264_qpel8_mc21:
|
\type\()_h264_qpel8_mc21:
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r0, r11, #15
|
||||||
|
T mov sp, r0
|
||||||
sub sp, sp, #(8*8+16*12)
|
sub sp, sp, #(8*8+16*12)
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r3, #8
|
mov r3, #8
|
||||||
@ -1296,14 +1294,14 @@ function ff_\type\()_h264_qpel8_mc21_neon, export=1
|
|||||||
vpush {d8-d15}
|
vpush {d8-d15}
|
||||||
bl put_h264_qpel8_h_lowpass_neon
|
bl put_h264_qpel8_h_lowpass_neon
|
||||||
mov r4, r0
|
mov r4, r0
|
||||||
ldrd r0, [r11]
|
ldrd r0, [r11], #8
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
sub r2, r4, #64
|
sub r2, r4, #64
|
||||||
bl \type\()_h264_qpel8_hv_lowpass_l2_neon
|
bl \type\()_h264_qpel8_hv_lowpass_l2_neon
|
||||||
vpop {d8-d15}
|
vpop {d8-d15}
|
||||||
add sp, r11, #8
|
mov sp, r11
|
||||||
pop {r4, r10, r11, pc}
|
pop {r4, r10, r11, pc}
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1330,7 +1328,9 @@ function ff_\type\()_h264_qpel8_mc12_neon, export=1
|
|||||||
\type\()_h264_qpel8_mc12:
|
\type\()_h264_qpel8_mc12:
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r0, r11, #15
|
||||||
|
T mov sp, r0
|
||||||
sub sp, sp, #(8*8+16*12)
|
sub sp, sp, #(8*8+16*12)
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
@ -1339,20 +1339,22 @@ function ff_\type\()_h264_qpel8_mc12_neon, export=1
|
|||||||
vpush {d8-d15}
|
vpush {d8-d15}
|
||||||
bl put_h264_qpel8_v_lowpass_neon
|
bl put_h264_qpel8_v_lowpass_neon
|
||||||
mov r4, r0
|
mov r4, r0
|
||||||
ldrd r0, [r11]
|
ldrd r0, [r11], #8
|
||||||
sub r1, r1, r3, lsl #1
|
sub r1, r1, r3, lsl #1
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
sub r2, r4, #64
|
sub r2, r4, #64
|
||||||
bl \type\()_h264_qpel8_hv_lowpass_l2_neon
|
bl \type\()_h264_qpel8_hv_lowpass_l2_neon
|
||||||
vpop {d8-d15}
|
vpop {d8-d15}
|
||||||
add sp, r11, #8
|
mov sp, r11
|
||||||
pop {r4, r10, r11, pc}
|
pop {r4, r10, r11, pc}
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
function ff_\type\()_h264_qpel8_mc22_neon, export=1
|
function ff_\type\()_h264_qpel8_mc22_neon, export=1
|
||||||
push {r4, r10, r11, lr}
|
push {r4, r10, r11, lr}
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r4, r11, #15
|
||||||
|
T mov sp, r4
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
@ -1441,21 +1443,23 @@ function ff_\type\()_h264_qpel16_mc11_neon, export=1
|
|||||||
\type\()_h264_qpel16_mc11:
|
\type\()_h264_qpel16_mc11:
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r0, r11, #15
|
||||||
|
T mov sp, r0
|
||||||
sub sp, sp, #256
|
sub sp, sp, #256
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r3, #16
|
mov r3, #16
|
||||||
vpush {d8-d15}
|
vpush {d8-d15}
|
||||||
bl put_h264_qpel16_h_lowpass_neon
|
bl put_h264_qpel16_h_lowpass_neon
|
||||||
ldrd r0, [r11]
|
ldrd r0, [r11], #8
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
add ip, sp, #64
|
add ip, sp, #64
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
mov r2, #16
|
mov r2, #16
|
||||||
bl \type\()_h264_qpel16_v_lowpass_l2_neon
|
bl \type\()_h264_qpel16_v_lowpass_l2_neon
|
||||||
vpop {d8-d15}
|
vpop {d8-d15}
|
||||||
add sp, r11, #8
|
mov sp, r11
|
||||||
pop {r4, r11, pc}
|
pop {r4, r11, pc}
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1464,20 +1468,22 @@ function ff_\type\()_h264_qpel16_mc21_neon, export=1
|
|||||||
\type\()_h264_qpel16_mc21:
|
\type\()_h264_qpel16_mc21:
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r0, r11, #15
|
||||||
|
T mov sp, r0
|
||||||
sub sp, sp, #(16*16+16*12)
|
sub sp, sp, #(16*16+16*12)
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
vpush {d8-d15}
|
vpush {d8-d15}
|
||||||
bl put_h264_qpel16_h_lowpass_neon_packed
|
bl put_h264_qpel16_h_lowpass_neon_packed
|
||||||
mov r4, r0
|
mov r4, r0
|
||||||
ldrd r0, [r11]
|
ldrd r0, [r11], #8
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
bl \type\()_h264_qpel16_hv_lowpass_l2_neon
|
bl \type\()_h264_qpel16_hv_lowpass_l2_neon
|
||||||
vpop {d8-d15}
|
vpop {d8-d15}
|
||||||
add sp, r11, #8
|
mov sp, r11
|
||||||
pop {r4-r5, r9-r11, pc}
|
pop {r4-r5, r9-r11, pc}
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1504,7 +1510,9 @@ function ff_\type\()_h264_qpel16_mc12_neon, export=1
|
|||||||
\type\()_h264_qpel16_mc12:
|
\type\()_h264_qpel16_mc12:
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r0, r11, #15
|
||||||
|
T mov sp, r0
|
||||||
sub sp, sp, #(16*16+16*12)
|
sub sp, sp, #(16*16+16*12)
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
@ -1512,13 +1520,13 @@ function ff_\type\()_h264_qpel16_mc12_neon, export=1
|
|||||||
vpush {d8-d15}
|
vpush {d8-d15}
|
||||||
bl put_h264_qpel16_v_lowpass_neon_packed
|
bl put_h264_qpel16_v_lowpass_neon_packed
|
||||||
mov r4, r0
|
mov r4, r0
|
||||||
ldrd r0, [r11]
|
ldrd r0, [r11], #8
|
||||||
sub r1, r1, r3, lsl #1
|
sub r1, r1, r3, lsl #1
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r2, r3
|
mov r2, r3
|
||||||
bl \type\()_h264_qpel16_hv_lowpass_l2_neon
|
bl \type\()_h264_qpel16_hv_lowpass_l2_neon
|
||||||
vpop {d8-d15}
|
vpop {d8-d15}
|
||||||
add sp, r11, #8
|
mov sp, r11
|
||||||
pop {r4-r5, r9-r11, pc}
|
pop {r4-r5, r9-r11, pc}
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1526,7 +1534,9 @@ function ff_\type\()_h264_qpel16_mc22_neon, export=1
|
|||||||
push {r4, r9-r11, lr}
|
push {r4, r9-r11, lr}
|
||||||
lowpass_const r3
|
lowpass_const r3
|
||||||
mov r11, sp
|
mov r11, sp
|
||||||
bic sp, sp, #15
|
A bic sp, sp, #15
|
||||||
|
T bic r4, r11, #15
|
||||||
|
T mov sp, r4
|
||||||
sub r1, r1, r2, lsl #1
|
sub r1, r1, r2, lsl #1
|
||||||
sub r1, r1, #2
|
sub r1, r1, #2
|
||||||
mov r3, r2
|
mov r3, r2
|
||||||
|
@ -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
|
|||||||
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
|
|||||||
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
|
|||||||
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)
|
|||||||
__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
|
|||||||
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
|
|||||||
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
|
|||||||
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 @@
|
|||||||
|
|
||||||
.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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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:
|
|||||||
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:
|
|||||||
@@ 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:
|
|||||||
@@ 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:
|
|||||||
@@ 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:
|
|||||||
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:
|
|||||||
@@ 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:
|
|||||||
@@ 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:
|
|||||||
@@ 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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
.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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
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 @@
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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);
|
|||||||
/**
|
/**
|
||||||
* 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,
|
|||||||
* 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 {
|
|||||||
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);
|
|||||||
* 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 @@
|
|||||||
*
|
*
|
||||||
* 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];
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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:
|
|||||||
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 @@
|
|||||||
#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 {
|
|||||||
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 {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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
|
|||||||
|
|
||||||
#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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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
|
|||||||
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);
|
|||||||
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);
|
|||||||
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
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \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
|
|||||||
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
|
|||||||
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{
|
|||||||
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[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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 {
|
|||||||
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 @@
|
|||||||
|
|
||||||
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
|
|||||||
{
|
{
|
||||||
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 @@
|
|||||||
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
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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)\
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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)
|
|||||||
* 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)
|
|||||||
* 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,
|
|||||||
/**
|
/**
|
||||||
* 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 @@
|
|||||||
#include "vaapi_internal.h"
|
#include "vaapi_internal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup VAAPI_Decoding
|
* @addtogroup VAAPI_Decoding
|
||||||
*
|
*
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
@ -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 @@
|
|||||||
#include "mpegvideo.h"
|
#include "mpegvideo.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup VAAPI_Decoding
|
* @addtogroup VAAPI_Decoding
|
||||||
*
|
*
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include "vdpau_internal.h"
|
#include "vdpau_internal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup VDPAU_Decoding
|
* @addtogroup VDPAU_Decoding
|
||||||
*
|
*
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
@ -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 @@
|
|||||||
* 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 @@
|
|||||||
#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 @@
|
|||||||
* 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 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 @@
|
|||||||
|
|
||||||
#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)
|
|||||||
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
|
|||||||
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
|
|||||||
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)
|
|||||||
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
|
||||||
|
|
||||||
static av_cold ff_reorder_func find_reorder_func(int codec_id,
|
#define PICK_REORDER(layout)\
|
||||||
int64_t layout,
|
switch(format) {\
|
||||||
int out)
|
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 int find_reorder_func(AlsaData *s, int codec_id, 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,
|
|||||||
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)
|
|||||||
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 {
|
|||||||
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)
|
|||||||
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)
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
"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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
#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)
|
|||||||
|
|
||||||
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)
|
|||||||
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 @@
|
|||||||
#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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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);
|
|||||||
#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);
|
|||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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);
|
|||||||
*/
|
*/
|
||||||
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
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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) {
|
|||||||
#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)
|
|||||||
* "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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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 @@
|
|||||||
|
|
||||||
#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 @@
|
|||||||
#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);
|
|||||||
* @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 @@
|
|||||||
#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)
|
|||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
|
|
||||||
/*!
|
/**
|
||||||
* \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)
|
|||||||
}\
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/**
|
||||||
* \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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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 @@
|
|||||||
|
|
||||||
#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 {
|
|||||||
* 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 {
|
|||||||
} 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) {
|
|||||||
#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) {
|
|||||||
#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) {
|
|||||||
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 @@
|
|||||||
|
|
||||||
#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 @@
|
|||||||
#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 @@
|
|||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \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);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
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)
|
|||||||
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
|
|||||||
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))))
|
|||||||
|
|
||||||
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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user