Merge remote-tracking branch 'qatar/master'
* qatar/master: rational-test: Add proper main() declaration to fix gcc warnings. configure: Add vdpau and dxva2 to configure results output. Remove unused, never built libavutil/pca.[ch] matroskadec: forward parsing errors to caller. av_find_stream_info: simplify EAGAIN handling. aacenc: Fix determination of Mid/Side Mode. psymodel: Remove the single channel analysis function aacenc: Implement dummy channel group analysis that just calls the single channel analysis for each channel. psymodel: Add channels and channel groups to the psymodel. ARM: remove check for PLD instruction fate: move amr[nw]b test rules into separate files ogg: fix double free when finding length of small chained oggs. swscale: implement >8bit scaling support. build: fix creation of tools dir with make 3.81 build: Mark all-yes Makefile target as phony. pixfmt: fix YUV422/444 wrong endian comment build: create output directories as needed Add new yuv444 pixfmts to avcodec_align_dimensions2 Conflicts: Makefile configure libavutil/pca.c libavutil/pca.h libavutil/pixfmt.h libswscale/swscale.c libswscale/utils.c libswscale/x86/swscale_template.c tests/ref/lavfi/pixdesc tests/ref/lavfi/pixfmts_copy tests/ref/lavfi/pixfmts_null tests/ref/lavfi/pixfmts_scale tests/ref/lavfi/pixfmts_vflip Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
8c0cbb0848
22
Makefile
22
Makefile
@ -16,7 +16,6 @@ PROGS-$(CONFIG_FFSERVER) += ffserver
|
|||||||
PROGS := $(PROGS-yes:%=%$(EXESUF))
|
PROGS := $(PROGS-yes:%=%$(EXESUF))
|
||||||
PROGS_G = $(PROGS-yes:%=%_g$(EXESUF))
|
PROGS_G = $(PROGS-yes:%=%_g$(EXESUF))
|
||||||
OBJS = $(PROGS-yes:%=%.o) cmdutils.o
|
OBJS = $(PROGS-yes:%=%.o) cmdutils.o
|
||||||
TOOLS = $(addprefix tools/, $(addsuffix $(EXESUF), cws2fws graph2dot lavfi-showfiltfmts pktdumper probetest qt-faststart trasher))
|
|
||||||
TESTTOOLS = audiogen videogen rotozoom tiny_psnr base64
|
TESTTOOLS = audiogen videogen rotozoom tiny_psnr base64
|
||||||
HOSTPROGS := $(TESTTOOLS:%=tests/%)
|
HOSTPROGS := $(TESTTOOLS:%=tests/%)
|
||||||
|
|
||||||
@ -82,14 +81,20 @@ ffserver_g$(EXESUF): FF_LDFLAGS += $(FFSERVERLDFLAGS)
|
|||||||
%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
|
%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
|
||||||
$(LD) $(FF_LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
|
$(LD) $(FF_LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
|
||||||
|
|
||||||
|
TOOLS = cws2fws graph2dot lavfi-showfiltfmts pktdumper probetest qt-faststart trasher
|
||||||
|
TOOLOBJS := $(TOOLS:%=tools/%.o)
|
||||||
|
TOOLS := $(TOOLS:%=tools/%$(EXESUF))
|
||||||
|
|
||||||
alltools: $(TOOLS)
|
alltools: $(TOOLS)
|
||||||
|
|
||||||
tools/%$(EXESUF): tools/%.o
|
tools/%$(EXESUF): tools/%.o
|
||||||
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
|
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
|
||||||
|
|
||||||
tools/%.o: tools/%.c
|
$(TOOLOBJS): %.o: %.c | tools
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) -c $(CC_O) $<
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c $(CC_O) $<
|
||||||
|
|
||||||
|
OBJDIRS += tools
|
||||||
|
|
||||||
-include $(wildcard tools/*.d)
|
-include $(wildcard tools/*.d)
|
||||||
|
|
||||||
VERSION_SH = $(SRC_PATH)/version.sh
|
VERSION_SH = $(SRC_PATH)/version.sh
|
||||||
@ -150,5 +155,16 @@ check: test
|
|||||||
include $(SRC_PATH)/doc/Makefile
|
include $(SRC_PATH)/doc/Makefile
|
||||||
include $(SRC_PATH)/tests/Makefile
|
include $(SRC_PATH)/tests/Makefile
|
||||||
|
|
||||||
.PHONY: all alltools *clean check config examples install*
|
$(sort $(OBJDIRS)):
|
||||||
|
$(Q)mkdir -p $@
|
||||||
|
|
||||||
|
# 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 all-yes alltools *clean check config examples install*
|
||||||
.PHONY: testprogs uninstall*
|
.PHONY: testprogs uninstall*
|
||||||
|
@ -91,6 +91,12 @@ $(HOSTOBJS): %.o: %.c
|
|||||||
$(HOSTPROGS): %$(HOSTEXESUF): %.o
|
$(HOSTPROGS): %$(HOSTEXESUF): %.o
|
||||||
$(HOSTCC) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
|
$(HOSTCC) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
|
||||||
|
|
||||||
|
$(OBJS): | $(dir $(OBJS))
|
||||||
|
$(HOSTOBJS): | $(dir $(HOSTOBJS))
|
||||||
|
$(TESTOBJS): | $(dir $(TESTOBJS))
|
||||||
|
|
||||||
|
OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOSTOBJS) $(TESTOBJS))
|
||||||
|
|
||||||
CLEANSUFFIXES = *.d *.o *~ *.ho *.map *.ver
|
CLEANSUFFIXES = *.d *.o *~ *.ho *.map *.ver
|
||||||
DISTCLEANSUFFIXES = *.pc
|
DISTCLEANSUFFIXES = *.pc
|
||||||
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp
|
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp
|
||||||
|
43
configure
vendored
43
configure
vendored
@ -878,9 +878,9 @@ apply(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
cp_if_changed(){
|
cp_if_changed(){
|
||||||
cmp -s "$1" "$2" &&
|
cmp -s "$1" "$2" && echo "$2 is unchanged" && return
|
||||||
echo "$2 is unchanged" ||
|
mkdir -p "$(dirname $2)"
|
||||||
cp -f "$1" "$2"
|
cp -f "$1" "$2"
|
||||||
}
|
}
|
||||||
|
|
||||||
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
|
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
|
||||||
@ -1098,7 +1098,6 @@ HAVE_LIST="
|
|||||||
memalign
|
memalign
|
||||||
mkstemp
|
mkstemp
|
||||||
mmap
|
mmap
|
||||||
pld
|
|
||||||
posix_memalign
|
posix_memalign
|
||||||
round
|
round
|
||||||
roundf
|
roundf
|
||||||
@ -1708,10 +1707,8 @@ DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
|
|||||||
# find source path
|
# find source path
|
||||||
if test -f configure; then
|
if test -f configure; then
|
||||||
source_path=.
|
source_path=.
|
||||||
disable source_path_used
|
|
||||||
else
|
else
|
||||||
source_path=$(cd $(dirname "$0"); pwd)
|
source_path=$(cd $(dirname "$0"); pwd)
|
||||||
enable source_path_used
|
|
||||||
echo "$source_path" | grep -q '[[:blank:]]' &&
|
echo "$source_path" | grep -q '[[:blank:]]' &&
|
||||||
die "Out of tree builds are impossible with whitespace in source path."
|
die "Out of tree builds are impossible with whitespace in source path."
|
||||||
test -e "$source_path/config.h" &&
|
test -e "$source_path/config.h" &&
|
||||||
@ -2646,9 +2643,6 @@ EOF
|
|||||||
warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
|
warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# We have to check if pld is a nop and disable it.
|
|
||||||
check_asm pld '"pld [r0]"'
|
|
||||||
|
|
||||||
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
|
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
|
||||||
enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
|
enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
|
||||||
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
|
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
|
||||||
@ -3202,6 +3196,9 @@ echo "network support ${network-no}"
|
|||||||
echo "threading support ${thread_type-no}"
|
echo "threading support ${thread_type-no}"
|
||||||
echo "SDL support ${sdl-no}"
|
echo "SDL support ${sdl-no}"
|
||||||
echo "Sun medialib support ${mlib-no}"
|
echo "Sun medialib support ${mlib-no}"
|
||||||
|
echo "libdxva2 enabled ${dxva2-no}"
|
||||||
|
echo "libva enabled ${vaapi-no}"
|
||||||
|
echo "libvdpau enabled ${vdpau-no}"
|
||||||
echo "AVISynth enabled ${avisynth-no}"
|
echo "AVISynth enabled ${avisynth-no}"
|
||||||
echo "libcelt enabled ${libcelt-no}"
|
echo "libcelt enabled ${libcelt-no}"
|
||||||
echo "frei0r enabled ${frei0r-no}"
|
echo "frei0r enabled ${frei0r-no}"
|
||||||
@ -3219,7 +3216,6 @@ echo "librtmp enabled ${librtmp-no}"
|
|||||||
echo "libschroedinger enabled ${libschroedinger-no}"
|
echo "libschroedinger enabled ${libschroedinger-no}"
|
||||||
echo "libspeex enabled ${libspeex-no}"
|
echo "libspeex enabled ${libspeex-no}"
|
||||||
echo "libtheora enabled ${libtheora-no}"
|
echo "libtheora enabled ${libtheora-no}"
|
||||||
echo "libva enabled ${vaapi-no}"
|
|
||||||
echo "libvo-aacenc support ${libvo_aacenc-no}"
|
echo "libvo-aacenc support ${libvo_aacenc-no}"
|
||||||
echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
|
echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
|
||||||
echo "libvorbis enabled ${libvorbis-no}"
|
echo "libvorbis enabled ${libvorbis-no}"
|
||||||
@ -3254,31 +3250,7 @@ echo "License: $license"
|
|||||||
|
|
||||||
echo "Creating config.mak and config.h..."
|
echo "Creating config.mak and config.h..."
|
||||||
|
|
||||||
# build tree in object directory if source path is different from current one
|
test -e Makefile || $ln_s "$source_path/Makefile" .
|
||||||
if enabled source_path_used; then
|
|
||||||
DIRS="
|
|
||||||
doc
|
|
||||||
libavcodec
|
|
||||||
libavcodec/$arch
|
|
||||||
libavdevice
|
|
||||||
libavfilter
|
|
||||||
libavfilter/$arch
|
|
||||||
libavfilter/libmpcodecs
|
|
||||||
libavfilter/libmpcodecs/libvo
|
|
||||||
libavformat
|
|
||||||
libavutil
|
|
||||||
libavutil/$arch
|
|
||||||
libpostproc
|
|
||||||
libswscale
|
|
||||||
libswscale/$arch
|
|
||||||
tests
|
|
||||||
tests/fate
|
|
||||||
tools
|
|
||||||
"
|
|
||||||
|
|
||||||
map 'mkdir -p $v' $DIRS;
|
|
||||||
$ln_s "$source_path/Makefile" .
|
|
||||||
fi
|
|
||||||
|
|
||||||
enabled stripping || strip="echo skipping strip"
|
enabled stripping || strip="echo skipping strip"
|
||||||
|
|
||||||
@ -3466,6 +3438,7 @@ version=$3
|
|||||||
libs=$4
|
libs=$4
|
||||||
requires=$5
|
requires=$5
|
||||||
enabled ${name#lib} || return 0
|
enabled ${name#lib} || return 0
|
||||||
|
mkdir -p $name
|
||||||
cat <<EOF > $name/$name.pc
|
cat <<EOF > $name/$name.pc
|
||||||
prefix=$prefix
|
prefix=$prefix
|
||||||
exec_prefix=\${prefix}
|
exec_prefix=\${prefix}
|
||||||
|
@ -24,6 +24,9 @@ doc/%.1: TAG = MAN
|
|||||||
doc/%.1: doc/%.pod
|
doc/%.1: doc/%.pod
|
||||||
$(M)pod2man --section=1 --center=" " --release=" " $< > $@
|
$(M)pod2man --section=1 --center=" " --release=" " $< > $@
|
||||||
|
|
||||||
|
$(DOCS): | doc
|
||||||
|
OBJDIRS += doc
|
||||||
|
|
||||||
install-progs-$(CONFIG_DOC): install-man
|
install-progs-$(CONFIG_DOC): install-man
|
||||||
|
|
||||||
install-man: $(MANPAGES)
|
install-man: $(MANPAGES)
|
||||||
|
@ -346,7 +346,7 @@ static void encode_window_bands_info(AACEncContext *s, SingleChannelElement *sce
|
|||||||
float cost_stay_here, cost_get_here;
|
float cost_stay_here, cost_get_here;
|
||||||
float rd = 0.0f;
|
float rd = 0.0f;
|
||||||
for (w = 0; w < group_len; w++) {
|
for (w = 0; w < group_len; w++) {
|
||||||
FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(win+w)*16+swb];
|
FFPsyBand *band = &s->psy.ch[s->cur_channel].psy_bands[(win+w)*16+swb];
|
||||||
rd += quantize_band_cost(s, sce->coeffs + start + w*128,
|
rd += quantize_band_cost(s, sce->coeffs + start + w*128,
|
||||||
s->scoefs + start + w*128, size,
|
s->scoefs + start + w*128, size,
|
||||||
sce->sf_idx[(win+w)*16+swb], cb,
|
sce->sf_idx[(win+w)*16+swb], cb,
|
||||||
@ -626,7 +626,7 @@ static void search_for_quantizers_anmr(AVCodecContext *avctx, AACEncContext *s,
|
|||||||
qmin = INT_MAX;
|
qmin = INT_MAX;
|
||||||
qmax = 0.0f;
|
qmax = 0.0f;
|
||||||
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
||||||
FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
|
FFPsyBand *band = &s->psy.ch[s->cur_channel].psy_bands[(w+w2)*16+g];
|
||||||
if (band->energy <= band->threshold || band->threshold == 0.0f) {
|
if (band->energy <= band->threshold || band->threshold == 0.0f) {
|
||||||
sce->zeroes[(w+w2)*16+g] = 1;
|
sce->zeroes[(w+w2)*16+g] = 1;
|
||||||
continue;
|
continue;
|
||||||
@ -655,7 +655,7 @@ static void search_for_quantizers_anmr(AVCodecContext *avctx, AACEncContext *s,
|
|||||||
float dist = 0;
|
float dist = 0;
|
||||||
int cb = find_min_book(maxval, sce->sf_idx[w*16+g]);
|
int cb = find_min_book(maxval, sce->sf_idx[w*16+g]);
|
||||||
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
||||||
FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
|
FFPsyBand *band = &s->psy.ch[s->cur_channel].psy_bands[(w+w2)*16+g];
|
||||||
dist += quantize_band_cost(s, coefs + w2*128, s->scoefs + start + w2*128, sce->ics.swb_sizes[g],
|
dist += quantize_band_cost(s, coefs + w2*128, s->scoefs + start + w2*128, sce->ics.swb_sizes[g],
|
||||||
q + q0, cb, lambda / band->threshold, INFINITY, NULL);
|
q + q0, cb, lambda / band->threshold, INFINITY, NULL);
|
||||||
}
|
}
|
||||||
@ -728,7 +728,7 @@ static void search_for_quantizers_twoloop(AVCodecContext *avctx,
|
|||||||
int nz = 0;
|
int nz = 0;
|
||||||
float uplim = 0.0f;
|
float uplim = 0.0f;
|
||||||
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
||||||
FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
|
FFPsyBand *band = &s->psy.ch[s->cur_channel].psy_bands[(w+w2)*16+g];
|
||||||
uplim += band->threshold;
|
uplim += band->threshold;
|
||||||
if (band->energy <= band->threshold || band->threshold == 0.0f) {
|
if (band->energy <= band->threshold || band->threshold == 0.0f) {
|
||||||
sce->zeroes[(w+w2)*16+g] = 1;
|
sce->zeroes[(w+w2)*16+g] = 1;
|
||||||
@ -1028,7 +1028,7 @@ static void search_for_quantizers_fast(AVCodecContext *avctx, AACEncContext *s,
|
|||||||
for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) {
|
for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) {
|
||||||
for (g = 0; g < sce->ics.num_swb; g++) {
|
for (g = 0; g < sce->ics.num_swb; g++) {
|
||||||
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
|
||||||
FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
|
FFPsyBand *band = &s->psy.ch[s->cur_channel].psy_bands[(w+w2)*16+g];
|
||||||
if (band->energy <= band->threshold) {
|
if (band->energy <= band->threshold) {
|
||||||
sce->sf_idx[(w+w2)*16+g] = 218;
|
sce->sf_idx[(w+w2)*16+g] = 218;
|
||||||
sce->zeroes[(w+w2)*16+g] = 1;
|
sce->zeroes[(w+w2)*16+g] = 1;
|
||||||
@ -1066,8 +1066,8 @@ static void search_for_ms(AACEncContext *s, ChannelElement *cpe,
|
|||||||
if (!cpe->ch[0].zeroes[w*16+g] && !cpe->ch[1].zeroes[w*16+g]) {
|
if (!cpe->ch[0].zeroes[w*16+g] && !cpe->ch[1].zeroes[w*16+g]) {
|
||||||
float dist1 = 0.0f, dist2 = 0.0f;
|
float dist1 = 0.0f, dist2 = 0.0f;
|
||||||
for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) {
|
for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) {
|
||||||
FFPsyBand *band0 = &s->psy.psy_bands[(s->cur_channel+0)*PSY_MAX_BANDS+(w+w2)*16+g];
|
FFPsyBand *band0 = &s->psy.ch[s->cur_channel+0].psy_bands[(w+w2)*16+g];
|
||||||
FFPsyBand *band1 = &s->psy.psy_bands[(s->cur_channel+1)*PSY_MAX_BANDS+(w+w2)*16+g];
|
FFPsyBand *band1 = &s->psy.ch[s->cur_channel+1].psy_bands[(w+w2)*16+g];
|
||||||
float minthr = FFMIN(band0->threshold, band1->threshold);
|
float minthr = FFMIN(band0->threshold, band1->threshold);
|
||||||
float maxthr = FFMAX(band0->threshold, band1->threshold);
|
float maxthr = FFMAX(band0->threshold, band1->threshold);
|
||||||
for (i = 0; i < sce0->ics.swb_sizes[g]; i++) {
|
for (i = 0; i < sce0->ics.swb_sizes[g]; i++) {
|
||||||
|
@ -219,7 +219,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
|
|||||||
sizes[1] = swb_size_128[i];
|
sizes[1] = swb_size_128[i];
|
||||||
lengths[0] = ff_aac_num_swb_1024[i];
|
lengths[0] = ff_aac_num_swb_1024[i];
|
||||||
lengths[1] = ff_aac_num_swb_128[i];
|
lengths[1] = ff_aac_num_swb_128[i];
|
||||||
ff_psy_init(&s->psy, avctx, 2, sizes, lengths);
|
ff_psy_init(&s->psy, avctx, 2, sizes, lengths, s->chan_map[0], &s->chan_map[1]);
|
||||||
s->psypp = ff_psy_preprocess_init(avctx);
|
s->psypp = ff_psy_preprocess_init(avctx);
|
||||||
s->coder = &ff_aac_coders[2];
|
s->coder = &ff_aac_coders[2];
|
||||||
|
|
||||||
@ -373,7 +373,7 @@ static void adjust_frame_information(AACEncContext *apc, ChannelElement *cpe, in
|
|||||||
if (msc == 0 || ics0->max_sfb == 0)
|
if (msc == 0 || ics0->max_sfb == 0)
|
||||||
cpe->ms_mode = 0;
|
cpe->ms_mode = 0;
|
||||||
else
|
else
|
||||||
cpe->ms_mode = msc < ics0->max_sfb ? 1 : 2;
|
cpe->ms_mode = msc < ics0->max_sfb * ics0->num_windows ? 1 : 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -582,14 +582,17 @@ static int aac_encode_frame(AVCodecContext *avctx,
|
|||||||
memset(chan_el_counter, 0, sizeof(chan_el_counter));
|
memset(chan_el_counter, 0, sizeof(chan_el_counter));
|
||||||
for (i = 0; i < s->chan_map[0]; i++) {
|
for (i = 0; i < s->chan_map[0]; i++) {
|
||||||
FFPsyWindowInfo* wi = windows + start_ch;
|
FFPsyWindowInfo* wi = windows + start_ch;
|
||||||
|
const float *coeffs[2];
|
||||||
tag = s->chan_map[i+1];
|
tag = s->chan_map[i+1];
|
||||||
chans = tag == TYPE_CPE ? 2 : 1;
|
chans = tag == TYPE_CPE ? 2 : 1;
|
||||||
cpe = &s->cpe[i];
|
cpe = &s->cpe[i];
|
||||||
put_bits(&s->pb, 3, tag);
|
put_bits(&s->pb, 3, tag);
|
||||||
put_bits(&s->pb, 4, chan_el_counter[tag]++);
|
put_bits(&s->pb, 4, chan_el_counter[tag]++);
|
||||||
|
for (ch = 0; ch < chans; ch++)
|
||||||
|
coeffs[ch] = cpe->ch[ch].coeffs;
|
||||||
|
s->psy.model->analyze(&s->psy, start_ch, coeffs, wi);
|
||||||
for (ch = 0; ch < chans; ch++) {
|
for (ch = 0; ch < chans; ch++) {
|
||||||
s->cur_channel = start_ch + ch;
|
s->cur_channel = start_ch * 2 + ch;
|
||||||
s->psy.model->analyze(&s->psy, s->cur_channel, cpe->ch[ch].coeffs, &wi[ch]);
|
|
||||||
s->coder->search_for_quantizers(avctx, s, &cpe->ch[ch], s->lambda);
|
s->coder->search_for_quantizers(avctx, s, &cpe->ch[ch], s->lambda);
|
||||||
}
|
}
|
||||||
cpe->common_window = 0;
|
cpe->common_window = 0;
|
||||||
@ -605,7 +608,7 @@ static int aac_encode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->cur_channel = start_ch;
|
s->cur_channel = start_ch * 2;
|
||||||
if (s->options.stereo_mode && cpe->common_window) {
|
if (s->options.stereo_mode && cpe->common_window) {
|
||||||
if (s->options.stereo_mode > 0) {
|
if (s->options.stereo_mode > 0) {
|
||||||
IndividualChannelStream *ics = &cpe->ch[0].ics;
|
IndividualChannelStream *ics = &cpe->ch[0].ics;
|
||||||
|
@ -557,8 +557,8 @@ static float calc_reduced_thr_3gpp(AacPsyBand *band, float min_snr,
|
|||||||
/**
|
/**
|
||||||
* Calculate band thresholds as suggested in 3GPP TS26.403
|
* Calculate band thresholds as suggested in 3GPP TS26.403
|
||||||
*/
|
*/
|
||||||
static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
|
static void psy_3gpp_analyze_channel(FFPsyContext *ctx, int channel,
|
||||||
const float *coefs, const FFPsyWindowInfo *wi)
|
const float *coefs, const FFPsyWindowInfo *wi)
|
||||||
{
|
{
|
||||||
AacPsyContext *pctx = (AacPsyContext*) ctx->model_priv_data;
|
AacPsyContext *pctx = (AacPsyContext*) ctx->model_priv_data;
|
||||||
AacPsyChannel *pch = &pctx->ch[channel];
|
AacPsyChannel *pch = &pctx->ch[channel];
|
||||||
@ -627,7 +627,7 @@ static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 5.6.1.3.2 "Calculation of the desired perceptual entropy" */
|
/* 5.6.1.3.2 "Calculation of the desired perceptual entropy" */
|
||||||
ctx->pe[channel] = pe;
|
ctx->ch[channel].entropy = pe;
|
||||||
desired_bits = calc_bit_demand(pctx, pe, ctx->bitres.bits, ctx->bitres.size, wi->num_windows == 8);
|
desired_bits = calc_bit_demand(pctx, pe, ctx->bitres.bits, ctx->bitres.size, wi->num_windows == 8);
|
||||||
desired_pe = PSY_3GPP_BITS_TO_PE(desired_bits);
|
desired_pe = PSY_3GPP_BITS_TO_PE(desired_bits);
|
||||||
/* NOTE: PE correction is kept simple. During initial testing it had very
|
/* NOTE: PE correction is kept simple. During initial testing it had very
|
||||||
@ -731,7 +731,7 @@ static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
|
|||||||
for (w = 0; w < wi->num_windows*16; w += 16) {
|
for (w = 0; w < wi->num_windows*16; w += 16) {
|
||||||
for (g = 0; g < num_bands; g++) {
|
for (g = 0; g < num_bands; g++) {
|
||||||
AacPsyBand *band = &pch->band[w+g];
|
AacPsyBand *band = &pch->band[w+g];
|
||||||
FFPsyBand *psy_band = &ctx->psy_bands[channel*PSY_MAX_BANDS+w+g];
|
FFPsyBand *psy_band = &ctx->ch[channel].psy_bands[w+g];
|
||||||
|
|
||||||
psy_band->threshold = band->thr;
|
psy_band->threshold = band->thr;
|
||||||
psy_band->energy = band->energy;
|
psy_band->energy = band->energy;
|
||||||
@ -741,6 +741,16 @@ static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
|
|||||||
memcpy(pch->prev_band, pch->band, sizeof(pch->band));
|
memcpy(pch->prev_band, pch->band, sizeof(pch->band));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
|
||||||
|
const float **coeffs, const FFPsyWindowInfo *wi)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
FFPsyChannelGroup *group = ff_psy_find_group(ctx, channel);
|
||||||
|
|
||||||
|
for (ch = 0; ch < group->num_ch; ch++)
|
||||||
|
psy_3gpp_analyze_channel(ctx, channel + ch, coeffs[ch], &wi[ch]);
|
||||||
|
}
|
||||||
|
|
||||||
static av_cold void psy_3gpp_end(FFPsyContext *apc)
|
static av_cold void psy_3gpp_end(FFPsyContext *apc)
|
||||||
{
|
{
|
||||||
AacPsyContext *pctx = (AacPsyContext*) apc->model_priv_data;
|
AacPsyContext *pctx = (AacPsyContext*) apc->model_priv_data;
|
||||||
|
@ -24,11 +24,6 @@
|
|||||||
|
|
||||||
preserve8
|
preserve8
|
||||||
|
|
||||||
#if !HAVE_PLD
|
|
||||||
.macro pld reg
|
|
||||||
.endm
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HAVE_ARMV5TE
|
#if HAVE_ARMV5TE
|
||||||
function ff_prefetch_arm, export=1
|
function ff_prefetch_arm, export=1
|
||||||
subs r2, r2, #1
|
subs r2, r2, #1
|
||||||
@ -37,6 +32,8 @@ function ff_prefetch_arm, export=1
|
|||||||
bne ff_prefetch_arm
|
bne ff_prefetch_arm
|
||||||
bx lr
|
bx lr
|
||||||
endfunc
|
endfunc
|
||||||
|
#else
|
||||||
|
#define pld @
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.macro ALIGN_QWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
|
.macro ALIGN_QWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
|
||||||
|
@ -25,16 +25,31 @@
|
|||||||
|
|
||||||
extern const FFPsyModel ff_aac_psy_model;
|
extern const FFPsyModel ff_aac_psy_model;
|
||||||
|
|
||||||
av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx,
|
av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx, int num_lens,
|
||||||
int num_lens,
|
const uint8_t **bands, const int* num_bands,
|
||||||
const uint8_t **bands, const int* num_bands)
|
int num_groups, const uint8_t *group_map)
|
||||||
{
|
{
|
||||||
|
int i, j, k = 0;
|
||||||
|
|
||||||
ctx->avctx = avctx;
|
ctx->avctx = avctx;
|
||||||
ctx->psy_bands = av_mallocz(sizeof(FFPsyBand) * PSY_MAX_BANDS * avctx->channels);
|
ctx->ch = av_mallocz(sizeof(ctx->ch[0]) * avctx->channels * 2);
|
||||||
|
ctx->group = av_mallocz(sizeof(ctx->group[0]) * num_groups);
|
||||||
ctx->bands = av_malloc (sizeof(ctx->bands[0]) * num_lens);
|
ctx->bands = av_malloc (sizeof(ctx->bands[0]) * num_lens);
|
||||||
ctx->num_bands = av_malloc (sizeof(ctx->num_bands[0]) * num_lens);
|
ctx->num_bands = av_malloc (sizeof(ctx->num_bands[0]) * num_lens);
|
||||||
memcpy(ctx->bands, bands, sizeof(ctx->bands[0]) * num_lens);
|
memcpy(ctx->bands, bands, sizeof(ctx->bands[0]) * num_lens);
|
||||||
memcpy(ctx->num_bands, num_bands, sizeof(ctx->num_bands[0]) * num_lens);
|
memcpy(ctx->num_bands, num_bands, sizeof(ctx->num_bands[0]) * num_lens);
|
||||||
|
|
||||||
|
/* assign channels to groups (with virtual channels for coupling) */
|
||||||
|
for (i = 0; i < num_groups; i++) {
|
||||||
|
/* NOTE: Add 1 to handle the AAC chan_config without modification.
|
||||||
|
* This has the side effect of allowing an array of 0s to map
|
||||||
|
* to one channel per group.
|
||||||
|
*/
|
||||||
|
ctx->group[i].num_ch = group_map[i] + 1;
|
||||||
|
for (j = 0; j < ctx->group[i].num_ch * 2; j++)
|
||||||
|
ctx->group[i].ch[j] = &ctx->ch[k++];
|
||||||
|
}
|
||||||
|
|
||||||
switch (ctx->avctx->codec_id) {
|
switch (ctx->avctx->codec_id) {
|
||||||
case CODEC_ID_AAC:
|
case CODEC_ID_AAC:
|
||||||
ctx->model = &ff_aac_psy_model;
|
ctx->model = &ff_aac_psy_model;
|
||||||
@ -45,13 +60,24 @@ av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FFPsyChannelGroup *ff_psy_find_group(FFPsyContext *ctx, int channel)
|
||||||
|
{
|
||||||
|
int i = 0, ch = 0;
|
||||||
|
|
||||||
|
while (ch <= channel)
|
||||||
|
ch += ctx->group[i++].num_ch;
|
||||||
|
|
||||||
|
return &ctx->group[i-1];
|
||||||
|
}
|
||||||
|
|
||||||
av_cold void ff_psy_end(FFPsyContext *ctx)
|
av_cold void ff_psy_end(FFPsyContext *ctx)
|
||||||
{
|
{
|
||||||
if (ctx->model->end)
|
if (ctx->model->end)
|
||||||
ctx->model->end(ctx);
|
ctx->model->end(ctx);
|
||||||
av_freep(&ctx->bands);
|
av_freep(&ctx->bands);
|
||||||
av_freep(&ctx->num_bands);
|
av_freep(&ctx->num_bands);
|
||||||
av_freep(&ctx->psy_bands);
|
av_freep(&ctx->group);
|
||||||
|
av_freep(&ctx->ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct FFPsyPreprocessContext{
|
typedef struct FFPsyPreprocessContext{
|
||||||
|
@ -40,6 +40,23 @@ typedef struct FFPsyBand {
|
|||||||
float perceptual_weight;
|
float perceptual_weight;
|
||||||
} FFPsyBand;
|
} FFPsyBand;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* single channel psychoacoustic information
|
||||||
|
*/
|
||||||
|
typedef struct FFPsyChannel {
|
||||||
|
FFPsyBand psy_bands[PSY_MAX_BANDS]; ///< channel bands information
|
||||||
|
float entropy; ///< total PE for this channel
|
||||||
|
} FFPsyChannel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* psychoacoustic information for an arbitrary group of channels
|
||||||
|
*/
|
||||||
|
typedef struct FFPsyChannelGroup {
|
||||||
|
FFPsyChannel *ch[PSY_MAX_CHANS]; ///< pointers to the individual channels in the group
|
||||||
|
uint8_t num_ch; ///< number of channels in this group
|
||||||
|
uint8_t coupling[PSY_MAX_BANDS]; ///< allow coupling for this band in the group
|
||||||
|
} FFPsyChannelGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* windowing related information
|
* windowing related information
|
||||||
*/
|
*/
|
||||||
@ -58,14 +75,14 @@ typedef struct FFPsyContext {
|
|||||||
AVCodecContext *avctx; ///< encoder context
|
AVCodecContext *avctx; ///< encoder context
|
||||||
const struct FFPsyModel *model; ///< encoder-specific model functions
|
const struct FFPsyModel *model; ///< encoder-specific model functions
|
||||||
|
|
||||||
FFPsyBand *psy_bands; ///< frame bands information
|
FFPsyChannel *ch; ///< single channel information
|
||||||
|
FFPsyChannelGroup *group; ///< channel group information
|
||||||
|
int num_groups; ///< number of channel groups
|
||||||
|
|
||||||
uint8_t **bands; ///< scalefactor band sizes for possible frame sizes
|
uint8_t **bands; ///< scalefactor band sizes for possible frame sizes
|
||||||
int *num_bands; ///< number of scalefactor bands for possible frame sizes
|
int *num_bands; ///< number of scalefactor bands for possible frame sizes
|
||||||
int num_lens; ///< number of scalefactor band sets
|
int num_lens; ///< number of scalefactor band sets
|
||||||
|
|
||||||
float pe[PSY_MAX_CHANS]; ///< total PE for each channel in the frame
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
int size; ///< size of the bitresevoir in bits
|
int size; ///< size of the bitresevoir in bits
|
||||||
int bits; ///< number of bits used in the bitresevoir
|
int bits; ///< number of bits used in the bitresevoir
|
||||||
@ -95,14 +112,14 @@ typedef struct FFPsyModel {
|
|||||||
FFPsyWindowInfo (*window)(FFPsyContext *ctx, const int16_t *audio, const int16_t *la, int channel, int prev_type);
|
FFPsyWindowInfo (*window)(FFPsyContext *ctx, const int16_t *audio, const int16_t *la, int channel, int prev_type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform psychoacoustic analysis and set band info (threshold, energy).
|
* Perform psychoacoustic analysis and set band info (threshold, energy) for a group of channels.
|
||||||
*
|
*
|
||||||
* @param ctx model context
|
* @param ctx model context
|
||||||
* @param channel audio channel number
|
* @param channel channel number of the first channel in the group to perform analysis on
|
||||||
* @param coeffs pointer to the transformed coefficients
|
* @param coeffs array of pointers to the transformed coefficients
|
||||||
* @param wi window information
|
* @param wi window information for the channels in the group
|
||||||
*/
|
*/
|
||||||
void (*analyze)(FFPsyContext *ctx, int channel, const float *coeffs, const FFPsyWindowInfo *wi);
|
void (*analyze)(FFPsyContext *ctx, int channel, const float **coeffs, const FFPsyWindowInfo *wi);
|
||||||
|
|
||||||
void (*end) (FFPsyContext *apc);
|
void (*end) (FFPsyContext *apc);
|
||||||
} FFPsyModel;
|
} FFPsyModel;
|
||||||
@ -115,12 +132,24 @@ typedef struct FFPsyModel {
|
|||||||
* @param num_lens number of possible frame lengths
|
* @param num_lens number of possible frame lengths
|
||||||
* @param bands scalefactor band lengths for all frame lengths
|
* @param bands scalefactor band lengths for all frame lengths
|
||||||
* @param num_bands number of scalefactor bands for all frame lengths
|
* @param num_bands number of scalefactor bands for all frame lengths
|
||||||
|
* @param num_groups number of channel groups
|
||||||
|
* @param group_map array with # of channels in group - 1, for each group
|
||||||
*
|
*
|
||||||
* @return zero if successful, a negative value if not
|
* @return zero if successful, a negative value if not
|
||||||
*/
|
*/
|
||||||
av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx,
|
av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx, int num_lens,
|
||||||
int num_lens,
|
const uint8_t **bands, const int* num_bands,
|
||||||
const uint8_t **bands, const int* num_bands);
|
int num_groups, const uint8_t *group_map);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine what group a channel belongs to.
|
||||||
|
*
|
||||||
|
* @param ctx psymodel context
|
||||||
|
* @param channel channel to locate the group for
|
||||||
|
*
|
||||||
|
* @return pointer to the FFPsyChannelGroup this channel belongs to
|
||||||
|
*/
|
||||||
|
FFPsyChannelGroup *ff_psy_find_group(FFPsyContext *ctx, int channel);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleanup model context at the end.
|
* Cleanup model context at the end.
|
||||||
|
@ -141,6 +141,10 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int l
|
|||||||
case PIX_FMT_YUV420P10BE:
|
case PIX_FMT_YUV420P10BE:
|
||||||
case PIX_FMT_YUV422P10LE:
|
case PIX_FMT_YUV422P10LE:
|
||||||
case PIX_FMT_YUV422P10BE:
|
case PIX_FMT_YUV422P10BE:
|
||||||
|
case PIX_FMT_YUV444P9LE:
|
||||||
|
case PIX_FMT_YUV444P9BE:
|
||||||
|
case PIX_FMT_YUV444P10LE:
|
||||||
|
case PIX_FMT_YUV444P10BE:
|
||||||
w_align= 16; //FIXME check for non mpeg style codecs and use less alignment
|
w_align= 16; //FIXME check for non mpeg style codecs and use less alignment
|
||||||
h_align= 16;
|
h_align= 16;
|
||||||
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264)
|
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264)
|
||||||
|
@ -1681,7 +1681,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
|
|||||||
if (size <= 3 || !track || !track->stream) {
|
if (size <= 3 || !track || !track->stream) {
|
||||||
av_log(matroska->ctx, AV_LOG_INFO,
|
av_log(matroska->ctx, AV_LOG_INFO,
|
||||||
"Invalid stream %"PRIu64" or size %u\n", num, size);
|
"Invalid stream %"PRIu64" or size %u\n", num, size);
|
||||||
return res;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
st = track->stream;
|
st = track->stream;
|
||||||
if (st->discard >= AVDISCARD_ALL)
|
if (st->discard >= AVDISCARD_ALL)
|
||||||
@ -1918,7 +1918,7 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
|
|||||||
res = ebml_parse(matroska, matroska_clusters, &cluster);
|
res = ebml_parse(matroska, matroska_clusters, &cluster);
|
||||||
blocks_list = &cluster.blocks;
|
blocks_list = &cluster.blocks;
|
||||||
blocks = blocks_list->elem;
|
blocks = blocks_list->elem;
|
||||||
for (i=0; i<blocks_list->nb_elem; i++)
|
for (i=0; i<blocks_list->nb_elem && !res; i++)
|
||||||
if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
|
if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
|
||||||
int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
|
int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
|
||||||
res=matroska_parse_block(matroska,
|
res=matroska_parse_block(matroska,
|
||||||
@ -1935,14 +1935,15 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
|
|||||||
static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
|
static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
MatroskaDemuxContext *matroska = s->priv_data;
|
MatroskaDemuxContext *matroska = s->priv_data;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
while (matroska_deliver_packet(matroska, pkt)) {
|
while (!ret && matroska_deliver_packet(matroska, pkt)) {
|
||||||
if (matroska->done)
|
if (matroska->done)
|
||||||
return AVERROR_EOF;
|
return AVERROR_EOF;
|
||||||
matroska_parse_cluster(matroska);
|
ret = matroska_parse_cluster(matroska);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int matroska_read_seek(AVFormatContext *s, int stream_index,
|
static int matroska_read_seek(AVFormatContext *s, int stream_index,
|
||||||
|
@ -240,7 +240,8 @@ static int ogg_read_page(AVFormatContext *s, int *str)
|
|||||||
|
|
||||||
for (n = 0; n < ogg->nstreams; n++) {
|
for (n = 0; n < ogg->nstreams; n++) {
|
||||||
av_freep(&ogg->streams[n].buf);
|
av_freep(&ogg->streams[n].buf);
|
||||||
av_freep(&ogg->streams[n].private);
|
if (!ogg->state || ogg->state->streams[n].private != ogg->streams[n].private)
|
||||||
|
av_freep(&ogg->streams[n].private);
|
||||||
}
|
}
|
||||||
ogg->curidx = -1;
|
ogg->curidx = -1;
|
||||||
ogg->nstreams = 0;
|
ogg->nstreams = 0;
|
||||||
|
@ -2345,7 +2345,10 @@ int av_find_stream_info(AVFormatContext *ic)
|
|||||||
/* NOTE: a new stream can be added there if no header in file
|
/* NOTE: a new stream can be added there if no header in file
|
||||||
(AVFMTCTX_NOHEADER) */
|
(AVFMTCTX_NOHEADER) */
|
||||||
ret = av_read_frame_internal(ic, &pkt1);
|
ret = av_read_frame_internal(ic, &pkt1);
|
||||||
if (ret < 0 && ret != AVERROR(EAGAIN)) {
|
if (ret == AVERROR(EAGAIN))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
/* EOF or error */
|
/* EOF or error */
|
||||||
ret = -1; /* we could not have all the codec parameters before EOF */
|
ret = -1; /* we could not have all the codec parameters before EOF */
|
||||||
for(i=0;i<ic->nb_streams;i++) {
|
for(i=0;i<ic->nb_streams;i++) {
|
||||||
@ -2361,9 +2364,6 @@ int av_find_stream_info(AVFormatContext *ic)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == AVERROR(EAGAIN))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
pkt= add_to_pktbuf(&ic->packet_buffer, &pkt1, &ic->packet_buffer_end);
|
pkt= add_to_pktbuf(&ic->packet_buffer, &pkt1, &ic->packet_buffer_end);
|
||||||
if ((ret = av_dup_packet(pkt)) < 0)
|
if ((ret = av_dup_packet(pkt)) < 0)
|
||||||
goto find_stream_info_err;
|
goto find_stream_info_err;
|
||||||
|
@ -143,13 +143,12 @@ enum PixelFormat {
|
|||||||
PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
|
PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
|
||||||
PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
|
PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
|
||||||
PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
|
PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
|
||||||
PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
|
PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
|
||||||
PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
|
PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
|
||||||
PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
|
PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
|
||||||
PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
|
PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
|
||||||
PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
|
PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
|
||||||
PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
|
PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
|
||||||
|
|
||||||
PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
|
PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -135,7 +135,8 @@ int av_find_nearest_q_idx(AVRational q, const AVRational* q_list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
main(){
|
int main(void)
|
||||||
|
{
|
||||||
AVRational a,b;
|
AVRational a,b;
|
||||||
for(a.num=-2; a.num<=2; a.num++){
|
for(a.num=-2; a.num<=2; a.num++){
|
||||||
for(a.den=-2; a.den<=2; a.den++){
|
for(a.den=-2; a.den<=2; a.den++){
|
||||||
@ -151,5 +152,6 @@ main(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,6 +46,8 @@ include $(SRC_PATH)/tests/fate2.mak
|
|||||||
|
|
||||||
include $(SRC_PATH)/tests/fate/aac.mak
|
include $(SRC_PATH)/tests/fate/aac.mak
|
||||||
include $(SRC_PATH)/tests/fate/als.mak
|
include $(SRC_PATH)/tests/fate/als.mak
|
||||||
|
include $(SRC_PATH)/tests/fate/amrnb.mak
|
||||||
|
include $(SRC_PATH)/tests/fate/amrwb.mak
|
||||||
include $(SRC_PATH)/tests/fate/fft.mak
|
include $(SRC_PATH)/tests/fate/fft.mak
|
||||||
include $(SRC_PATH)/tests/fate/h264.mak
|
include $(SRC_PATH)/tests/fate/h264.mak
|
||||||
include $(SRC_PATH)/tests/fate/mp3.mak
|
include $(SRC_PATH)/tests/fate/mp3.mak
|
||||||
|
47
tests/fate/amrnb.mak
Normal file
47
tests/fate/amrnb.mak
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
FATE_TESTS += fate-amrnb-4k75
|
||||||
|
fate-amrnb-4k75: CMD = pcm -i $(SAMPLES)/amrnb/4.75k.amr
|
||||||
|
fate-amrnb-4k75: CMP = stddev
|
||||||
|
fate-amrnb-4k75: REF = $(SAMPLES)/amrnb/4.75k.pcm
|
||||||
|
fate-amrnb-4k75: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-5k15
|
||||||
|
fate-amrnb-5k15: CMD = pcm -i $(SAMPLES)/amrnb/5.15k.amr
|
||||||
|
fate-amrnb-5k15: CMP = stddev
|
||||||
|
fate-amrnb-5k15: REF = $(SAMPLES)/amrnb/5.15k.pcm
|
||||||
|
fate-amrnb-5k15: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-5k9
|
||||||
|
fate-amrnb-5k9: CMD = pcm -i $(SAMPLES)/amrnb/5.9k.amr
|
||||||
|
fate-amrnb-5k9: CMP = stddev
|
||||||
|
fate-amrnb-5k9: REF = $(SAMPLES)/amrnb/5.9k.pcm
|
||||||
|
fate-amrnb-5k9: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-6k7
|
||||||
|
fate-amrnb-6k7: CMD = pcm -i $(SAMPLES)/amrnb/6.7k.amr
|
||||||
|
fate-amrnb-6k7: CMP = stddev
|
||||||
|
fate-amrnb-6k7: REF = $(SAMPLES)/amrnb/6.7k.pcm
|
||||||
|
fate-amrnb-6k7: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-7k4
|
||||||
|
fate-amrnb-7k4: CMD = pcm -i $(SAMPLES)/amrnb/7.4k.amr
|
||||||
|
fate-amrnb-7k4: CMP = stddev
|
||||||
|
fate-amrnb-7k4: REF = $(SAMPLES)/amrnb/7.4k.pcm
|
||||||
|
fate-amrnb-7k4: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-7k95
|
||||||
|
fate-amrnb-7k95: CMD = pcm -i $(SAMPLES)/amrnb/7.95k.amr
|
||||||
|
fate-amrnb-7k95: CMP = stddev
|
||||||
|
fate-amrnb-7k95: REF = $(SAMPLES)/amrnb/7.95k.pcm
|
||||||
|
fate-amrnb-7k95: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-10k2
|
||||||
|
fate-amrnb-10k2: CMD = pcm -i $(SAMPLES)/amrnb/10.2k.amr
|
||||||
|
fate-amrnb-10k2: CMP = stddev
|
||||||
|
fate-amrnb-10k2: REF = $(SAMPLES)/amrnb/10.2k.pcm
|
||||||
|
fate-amrnb-10k2: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrnb-12k2
|
||||||
|
fate-amrnb-12k2: CMD = pcm -i $(SAMPLES)/amrnb/12.2k.amr
|
||||||
|
fate-amrnb-12k2: CMP = stddev
|
||||||
|
fate-amrnb-12k2: REF = $(SAMPLES)/amrnb/12.2k.pcm
|
||||||
|
fate-amrnb-12k2: FUZZ = 1
|
59
tests/fate/amrwb.mak
Normal file
59
tests/fate/amrwb.mak
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
FATE_TESTS += fate-amrwb-6k60
|
||||||
|
fate-amrwb-6k60: CMD = pcm -i $(SAMPLES)/amrwb/seed-6k60.awb
|
||||||
|
fate-amrwb-6k60: CMP = stddev
|
||||||
|
fate-amrwb-6k60: REF = $(SAMPLES)/amrwb/seed-6k60.pcm
|
||||||
|
fate-amrwb-6k60: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-8k85
|
||||||
|
fate-amrwb-8k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-8k85.awb
|
||||||
|
fate-amrwb-8k85: CMP = stddev
|
||||||
|
fate-amrwb-8k85: REF = $(SAMPLES)/amrwb/seed-8k85.pcm
|
||||||
|
fate-amrwb-8k85: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-12k65
|
||||||
|
fate-amrwb-12k65: CMD = pcm -i $(SAMPLES)/amrwb/seed-12k65.awb
|
||||||
|
fate-amrwb-12k65: CMP = stddev
|
||||||
|
fate-amrwb-12k65: REF = $(SAMPLES)/amrwb/seed-12k65.pcm
|
||||||
|
fate-amrwb-12k65: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-14k25
|
||||||
|
fate-amrwb-14k25: CMD = pcm -i $(SAMPLES)/amrwb/seed-14k25.awb
|
||||||
|
fate-amrwb-14k25: CMP = stddev
|
||||||
|
fate-amrwb-14k25: REF = $(SAMPLES)/amrwb/seed-14k25.pcm
|
||||||
|
fate-amrwb-14k25: FUZZ = 2.6
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-15k85
|
||||||
|
fate-amrwb-15k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-15k85.awb
|
||||||
|
fate-amrwb-15k85: CMP = stddev
|
||||||
|
fate-amrwb-15k85: REF = $(SAMPLES)/amrwb/seed-15k85.pcm
|
||||||
|
fate-amrwb-15k85: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-18k25
|
||||||
|
fate-amrwb-18k25: CMD = pcm -i $(SAMPLES)/amrwb/seed-18k25.awb
|
||||||
|
fate-amrwb-18k25: CMP = stddev
|
||||||
|
fate-amrwb-18k25: REF = $(SAMPLES)/amrwb/seed-18k25.pcm
|
||||||
|
fate-amrwb-18k25: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-19k85
|
||||||
|
fate-amrwb-19k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-19k85.awb
|
||||||
|
fate-amrwb-19k85: CMP = stddev
|
||||||
|
fate-amrwb-19k85: REF = $(SAMPLES)/amrwb/seed-19k85.pcm
|
||||||
|
fate-amrwb-19k85: FUZZ = 1
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-23k05
|
||||||
|
fate-amrwb-23k05: CMD = pcm -i $(SAMPLES)/amrwb/seed-23k05.awb
|
||||||
|
fate-amrwb-23k05: CMP = stddev
|
||||||
|
fate-amrwb-23k05: REF = $(SAMPLES)/amrwb/seed-23k05.pcm
|
||||||
|
fate-amrwb-23k05: FUZZ = 2
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-23k85
|
||||||
|
fate-amrwb-23k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-23k85.awb
|
||||||
|
fate-amrwb-23k85: CMP = stddev
|
||||||
|
fate-amrwb-23k85: REF = $(SAMPLES)/amrwb/seed-23k85.pcm
|
||||||
|
fate-amrwb-23k85: FUZZ = 2
|
||||||
|
|
||||||
|
FATE_TESTS += fate-amrwb-23k85-2
|
||||||
|
fate-amrwb-23k85-2: CMD = pcm -i $(SAMPLES)/amrwb/deus-23k85.awb
|
||||||
|
fate-amrwb-23k85-2: CMP = stddev
|
||||||
|
fate-amrwb-23k85-2: REF = $(SAMPLES)/amrwb/deus-23k85.pcm
|
||||||
|
fate-amrwb-23k85-2: FUZZ = 1
|
108
tests/fate2.mak
108
tests/fate2.mak
@ -222,111 +222,3 @@ fate-musepack7: CMD = pcm -i $(SAMPLES)/musepack/inside-mp7.mpc
|
|||||||
fate-musepack7: CMP = oneoff
|
fate-musepack7: CMP = oneoff
|
||||||
fate-musepack7: REF = $(SAMPLES)/musepack/inside-mp7.pcm
|
fate-musepack7: REF = $(SAMPLES)/musepack/inside-mp7.pcm
|
||||||
fate-musepack7: FUZZ = 1
|
fate-musepack7: FUZZ = 1
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-4k75
|
|
||||||
fate-amrnb-4k75: CMD = pcm -i $(SAMPLES)/amrnb/4.75k.amr
|
|
||||||
fate-amrnb-4k75: CMP = stddev
|
|
||||||
fate-amrnb-4k75: REF = $(SAMPLES)/amrnb/4.75k.pcm
|
|
||||||
fate-amrnb-4k75: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-5k15
|
|
||||||
fate-amrnb-5k15: CMD = pcm -i $(SAMPLES)/amrnb/5.15k.amr
|
|
||||||
fate-amrnb-5k15: CMP = stddev
|
|
||||||
fate-amrnb-5k15: REF = $(SAMPLES)/amrnb/5.15k.pcm
|
|
||||||
fate-amrnb-5k15: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-5k9
|
|
||||||
fate-amrnb-5k9: CMD = pcm -i $(SAMPLES)/amrnb/5.9k.amr
|
|
||||||
fate-amrnb-5k9: CMP = stddev
|
|
||||||
fate-amrnb-5k9: REF = $(SAMPLES)/amrnb/5.9k.pcm
|
|
||||||
fate-amrnb-5k9: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-6k7
|
|
||||||
fate-amrnb-6k7: CMD = pcm -i $(SAMPLES)/amrnb/6.7k.amr
|
|
||||||
fate-amrnb-6k7: CMP = stddev
|
|
||||||
fate-amrnb-6k7: REF = $(SAMPLES)/amrnb/6.7k.pcm
|
|
||||||
fate-amrnb-6k7: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-7k4
|
|
||||||
fate-amrnb-7k4: CMD = pcm -i $(SAMPLES)/amrnb/7.4k.amr
|
|
||||||
fate-amrnb-7k4: CMP = stddev
|
|
||||||
fate-amrnb-7k4: REF = $(SAMPLES)/amrnb/7.4k.pcm
|
|
||||||
fate-amrnb-7k4: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-7k95
|
|
||||||
fate-amrnb-7k95: CMD = pcm -i $(SAMPLES)/amrnb/7.95k.amr
|
|
||||||
fate-amrnb-7k95: CMP = stddev
|
|
||||||
fate-amrnb-7k95: REF = $(SAMPLES)/amrnb/7.95k.pcm
|
|
||||||
fate-amrnb-7k95: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-10k2
|
|
||||||
fate-amrnb-10k2: CMD = pcm -i $(SAMPLES)/amrnb/10.2k.amr
|
|
||||||
fate-amrnb-10k2: CMP = stddev
|
|
||||||
fate-amrnb-10k2: REF = $(SAMPLES)/amrnb/10.2k.pcm
|
|
||||||
fate-amrnb-10k2: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrnb-12k2
|
|
||||||
fate-amrnb-12k2: CMD = pcm -i $(SAMPLES)/amrnb/12.2k.amr
|
|
||||||
fate-amrnb-12k2: CMP = stddev
|
|
||||||
fate-amrnb-12k2: REF = $(SAMPLES)/amrnb/12.2k.pcm
|
|
||||||
fate-amrnb-12k2: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-6k60
|
|
||||||
fate-amrwb-6k60: CMD = pcm -i $(SAMPLES)/amrwb/seed-6k60.awb
|
|
||||||
fate-amrwb-6k60: CMP = stddev
|
|
||||||
fate-amrwb-6k60: REF = $(SAMPLES)/amrwb/seed-6k60.pcm
|
|
||||||
fate-amrwb-6k60: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-8k85
|
|
||||||
fate-amrwb-8k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-8k85.awb
|
|
||||||
fate-amrwb-8k85: CMP = stddev
|
|
||||||
fate-amrwb-8k85: REF = $(SAMPLES)/amrwb/seed-8k85.pcm
|
|
||||||
fate-amrwb-8k85: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-12k65
|
|
||||||
fate-amrwb-12k65: CMD = pcm -i $(SAMPLES)/amrwb/seed-12k65.awb
|
|
||||||
fate-amrwb-12k65: CMP = stddev
|
|
||||||
fate-amrwb-12k65: REF = $(SAMPLES)/amrwb/seed-12k65.pcm
|
|
||||||
fate-amrwb-12k65: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-14k25
|
|
||||||
fate-amrwb-14k25: CMD = pcm -i $(SAMPLES)/amrwb/seed-14k25.awb
|
|
||||||
fate-amrwb-14k25: CMP = stddev
|
|
||||||
fate-amrwb-14k25: REF = $(SAMPLES)/amrwb/seed-14k25.pcm
|
|
||||||
fate-amrwb-14k25: FUZZ = 2.6
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-15k85
|
|
||||||
fate-amrwb-15k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-15k85.awb
|
|
||||||
fate-amrwb-15k85: CMP = stddev
|
|
||||||
fate-amrwb-15k85: REF = $(SAMPLES)/amrwb/seed-15k85.pcm
|
|
||||||
fate-amrwb-15k85: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-18k25
|
|
||||||
fate-amrwb-18k25: CMD = pcm -i $(SAMPLES)/amrwb/seed-18k25.awb
|
|
||||||
fate-amrwb-18k25: CMP = stddev
|
|
||||||
fate-amrwb-18k25: REF = $(SAMPLES)/amrwb/seed-18k25.pcm
|
|
||||||
fate-amrwb-18k25: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-19k85
|
|
||||||
fate-amrwb-19k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-19k85.awb
|
|
||||||
fate-amrwb-19k85: CMP = stddev
|
|
||||||
fate-amrwb-19k85: REF = $(SAMPLES)/amrwb/seed-19k85.pcm
|
|
||||||
fate-amrwb-19k85: FUZZ = 1
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-23k05
|
|
||||||
fate-amrwb-23k05: CMD = pcm -i $(SAMPLES)/amrwb/seed-23k05.awb
|
|
||||||
fate-amrwb-23k05: CMP = stddev
|
|
||||||
fate-amrwb-23k05: REF = $(SAMPLES)/amrwb/seed-23k05.pcm
|
|
||||||
fate-amrwb-23k05: FUZZ = 2
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-23k85
|
|
||||||
fate-amrwb-23k85: CMD = pcm -i $(SAMPLES)/amrwb/seed-23k85.awb
|
|
||||||
fate-amrwb-23k85: CMP = stddev
|
|
||||||
fate-amrwb-23k85: REF = $(SAMPLES)/amrwb/seed-23k85.pcm
|
|
||||||
fate-amrwb-23k85: FUZZ = 2
|
|
||||||
|
|
||||||
FATE_TESTS += fate-amrwb-23k85-2
|
|
||||||
fate-amrwb-23k85-2: CMD = pcm -i $(SAMPLES)/amrwb/deus-23k85.awb
|
|
||||||
fate-amrwb-23k85-2: CMP = stddev
|
|
||||||
fate-amrwb-23k85-2: REF = $(SAMPLES)/amrwb/deus-23k85.pcm
|
|
||||||
fate-amrwb-23k85-2: FUZZ = 1
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user