target regtest-lavfi_pix_fmts. The lavfi_pix_fmts test is disabled, this because there are many tests which are failing, and there are still some output files which cannot be played by NUT/ffplay. Originally committed as revision 23297 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
@@ -261,6 +261,7 @@ LAVFI_TESTS = \ | |||||
vflip \ | vflip \ | ||||
vflip_crop \ | vflip_crop \ | ||||
vflip_vflip \ | vflip_vflip \ | ||||
# lavfi_pix_fmts \ | |||||
ACODEC_TESTS := $(addprefix regtest-, $(ACODEC_TESTS) $(ACODEC_TESTS-yes)) | ACODEC_TESTS := $(addprefix regtest-, $(ACODEC_TESTS) $(ACODEC_TESTS-yes)) | ||||
VCODEC_TESTS := $(addprefix regtest-, $(VCODEC_TESTS) $(VCODEC_TESTS-yes)) | VCODEC_TESTS := $(addprefix regtest-, $(VCODEC_TESTS) $(VCODEC_TESTS-yes)) | ||||
@@ -309,7 +310,7 @@ $(LAVF_TESTS): | |||||
@$(SRC_PATH)/tests/lavf-regression.sh $@ lavf tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)" | @$(SRC_PATH)/tests/lavf-regression.sh $@ lavf tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)" | ||||
@diff -u -w $(call REFFILE,lavf,$@) $(call RESFILE,lavf,$@) | @diff -u -w $(call REFFILE,lavf,$@) $(call RESFILE,lavf,$@) | ||||
$(LAVFI_TESTS): | |||||
$(LAVFI_TESTS): tools/lavfi-showfiltfmts$(EXESUF) | |||||
@echo "TEST LAVFI $(@:regtest-%=%)" | @echo "TEST LAVFI $(@:regtest-%=%)" | ||||
@$(SRC_PATH)/tests/lavfi-regression.sh $@ lavfi tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)" | @$(SRC_PATH)/tests/lavfi-regression.sh $@ lavfi tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)" | ||||
@diff -u -w $(call REFFILE,lavfi,$@) $(call RESFILE,lavfi,$@) | @diff -u -w $(call REFFILE,lavfi,$@) $(call RESFILE,lavfi,$@) | ||||
@@ -14,6 +14,18 @@ eval do_$test=y | |||||
rm -f "$logfile" | rm -f "$logfile" | ||||
rm -f "$benchfile" | rm -f "$benchfile" | ||||
get_common_elements() ( | |||||
l1=$1 | |||||
l2=$2 | |||||
for elt1 in $1; do | |||||
for elt2 in $2; do | |||||
[ $elt1 = $elt2 ] && res="$res $elt1 " | |||||
done | |||||
done | |||||
echo $res | |||||
) | |||||
do_lavfi() { | do_lavfi() { | ||||
test_name=$1 | test_name=$1 | ||||
eval test=\$do_$test_name | eval test=\$do_$test_name | ||||
@@ -35,9 +47,32 @@ do_lavfi "vflip" "vflip" | |||||
do_lavfi "vflip_crop" "vflip,crop=100:100" | do_lavfi "vflip_crop" "vflip,crop=100:100" | ||||
do_lavfi "vflip_vflip" "vflip,vflip" | do_lavfi "vflip_vflip" "vflip,vflip" | ||||
# all these filters have exactly one input and exactly one output | |||||
filters_args=" | |||||
crop=100:100:100:100 | |||||
null | |||||
pad=500:400:20:20 | |||||
scale=200:100 | |||||
vflip | |||||
" | |||||
if [ -n "$do_lavfi_pix_fmts" ]; then | |||||
scale_out_pix_fmts=$(tools/lavfi-showfiltfmts scale | grep "^OUTPUT" | cut -d: -f2) | |||||
for filter_args in $filters_args; do | |||||
filter=$(echo $filter_args | sed -e 's/\([^=]\+\)=.*/\1/') | |||||
in_pix_fmts=$(tools/lavfi-showfiltfmts $filter | grep "^INPUT" | cut -d: -f2) | |||||
pix_fmts=$(get_common_elements "$in_pix_fmts" "$scale_out_pix_fmts") | |||||
for pix_fmt in $pix_fmts; do | |||||
do_video_encoding "${pix_fmt}-${filter}.nut" "" \ | |||||
"-vf slicify=random,format=$pix_fmt,$filter_args -vcodec rawvideo -pix_fmt $pix_fmt" | |||||
done | |||||
done | |||||
fi | |||||
# TODO: add tests for | # TODO: add tests for | ||||
# direct rendering, | # direct rendering, | ||||
# slices | |||||
# chains with feedback loops | # chains with feedback loops | ||||
rm -f "$bench" "$bench2" | rm -f "$bench" "$bench2" |
@@ -0,0 +1,98 @@ | |||||
/* | |||||
* Copyright (c) 2009 Stefano Sabatini | |||||
* | |||||
* This file is part of FFmpeg. | |||||
* | |||||
* FFmpeg is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU Lesser General Public | |||||
* License as published by the Free Software Foundation; either | |||||
* version 2.1 of the License, or (at your option) any later version. | |||||
* | |||||
* FFmpeg is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
* Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public | |||||
* License along with FFmpeg; if not, write to the Free Software | |||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
*/ | |||||
#include "libavformat/avformat.h" | |||||
#include "libavutil/pixdesc.h" | |||||
#include "libavfilter/avfilter.h" | |||||
int main(int argc, char **argv) | |||||
{ | |||||
AVFilter *filter; | |||||
AVFilterContext *filter_ctx; | |||||
const char *filter_name; | |||||
const char *filter_args = NULL; | |||||
int i, j; | |||||
av_log_set_level(AV_LOG_DEBUG); | |||||
if (!argv[1]) { | |||||
fprintf(stderr, "Missing filter name as argument\n"); | |||||
return 1; | |||||
} | |||||
filter_name = argv[1]; | |||||
if (argv[2]) | |||||
filter_args = argv[2]; | |||||
avfilter_register_all(); | |||||
/* get a corresponding filter and open it */ | |||||
if (!(filter = avfilter_get_by_name(filter_name))) { | |||||
fprintf(stderr, "Unrecognized filter with name '%s'\n", filter_name); | |||||
return 1; | |||||
} | |||||
if (!(filter_ctx = avfilter_open(filter, NULL))) { | |||||
fprintf(stderr, "Inpossible to open filter with name '%s'\n", filter_name); | |||||
return 1; | |||||
} | |||||
if (avfilter_init_filter(filter_ctx, filter_args, NULL) < 0) { | |||||
fprintf(stderr, "Impossible to init filter '%s' with arguments '%s'\n", filter_name, filter_args); | |||||
return 1; | |||||
} | |||||
/* create a link for each of the input pads */ | |||||
for (i = 0; i < filter_ctx->input_count; i++) { | |||||
AVFilterLink *link = av_malloc(sizeof(AVFilterLink)); | |||||
filter_ctx->inputs[i] = link; | |||||
} | |||||
for (i = 0; i < filter_ctx->output_count; i++) { | |||||
AVFilterLink *link = av_malloc(sizeof(AVFilterLink)); | |||||
filter_ctx->outputs[i] = link; | |||||
} | |||||
if (filter->query_formats) | |||||
filter->query_formats(filter_ctx); | |||||
else | |||||
avfilter_default_query_formats(filter_ctx); | |||||
/* print the supported formats in input */ | |||||
for (i = 0; i < filter_ctx->input_count; i++) { | |||||
AVFilterFormats *fmts = filter_ctx->inputs[i]->out_formats; | |||||
printf("INPUT[%d] %s: ", i, filter_ctx->filter->inputs[i].name); | |||||
for (j = 0; j < fmts->format_count; j++) | |||||
printf("%s ", av_pix_fmt_descriptors[fmts->formats[j]].name); | |||||
printf("\n"); | |||||
} | |||||
/* print the supported formats in output */ | |||||
for (i = 0; i < filter_ctx->output_count; i++) { | |||||
AVFilterFormats *fmts = filter_ctx->outputs[i]->in_formats; | |||||
printf("OUTPUT[%d] %s: ", i, filter_ctx->filter->outputs[i].name); | |||||
for (j = 0; j < fmts->format_count; j++) | |||||
printf("%s ", av_pix_fmt_descriptors[fmts->formats[j]].name); | |||||
printf("\n"); | |||||
} | |||||
fflush(stdout); | |||||
return 0; | |||||
} |