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; | |||||
| } | |||||