From 191c5f8ff33eb995b6dbc5b11af7c1a79f8381f0 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 13 Jul 2011 02:09:19 +0200 Subject: build: move tests/seek_test.c to libavformat and reuse generic build rules --- .gitignore | 1 - libavformat/Makefile | 2 +- libavformat/seek-test.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/Makefile | 6 +-- tests/fate-run.sh | 2 +- tests/seek_test.c | 133 ------------------------------------------------ 6 files changed, 136 insertions(+), 141 deletions(-) create mode 100644 libavformat/seek-test.c delete mode 100644 tests/seek_test.c diff --git a/.gitignore b/.gitignore index 59a0860..bfce23d 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,6 @@ tests/audiogen tests/base64 tests/data tests/rotozoom -tests/seek_test tests/tiny_psnr tests/videogen tests/vsynth1 diff --git a/libavformat/Makefile b/libavformat/Makefile index ca337e0..917b38a 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -334,7 +334,7 @@ OBJS-$(CONFIG_UDP_PROTOCOL) += udp.o OBJS-$(CONFIG_JACK_INDEV) += timefilter.o EXAMPLES = metadata output -TESTPROGS = timefilter +TESTPROGS = seek timefilter TOOLS = pktdumper probetest include $(SRC_PATH)/subdir.mak diff --git a/libavformat/seek-test.c b/libavformat/seek-test.c new file mode 100644 index 0000000..71b2a2d --- /dev/null +++ b/libavformat/seek-test.c @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2003 Fabrice Bellard + * Copyright (c) 2007 Michael Niedermayer + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include + +#include "libavutil/common.h" +#include "libavutil/mathematics.h" +#include "libavformat/avformat.h" + +#undef exit +#undef printf +#undef fprintf + +static char buffer[20]; + +static const char *ret_str(int v) +{ + switch (v) { + case AVERROR_EOF: return "-EOF"; + case AVERROR(EIO): return "-EIO"; + case AVERROR(ENOMEM): return "-ENOMEM"; + case AVERROR(EINVAL): return "-EINVAL"; + default: + snprintf(buffer, sizeof(buffer), "%2d", v); + return buffer; + } +} + +static void ts_str(char buffer[60], int64_t ts, AVRational base) +{ + double tsval; + if (ts == AV_NOPTS_VALUE) { + strcpy(buffer, " NOPTS "); + return; + } + tsval = ts * av_q2d(base); + snprintf(buffer, 60, "%9f", tsval); +} + +int main(int argc, char **argv) +{ + const char *filename; + AVFormatContext *ic = NULL; + int i, ret, stream_id; + int64_t timestamp; + AVFormatParameters params, *ap= ¶ms; + memset(ap, 0, sizeof(params)); + ap->channels=1; + ap->sample_rate= 22050; + + /* initialize libavcodec, and register all codecs and formats */ + av_register_all(); + + if (argc != 2) { + printf("usage: %s input_file\n" + "\n", argv[0]); + exit(1); + } + + filename = argv[1]; + + ret = av_open_input_file(&ic, filename, NULL, 0, ap); + if (ret < 0) { + fprintf(stderr, "cannot open %s\n", filename); + exit(1); + } + + ret = av_find_stream_info(ic); + if (ret < 0) { + fprintf(stderr, "%s: could not find codec parameters\n", filename); + exit(1); + } + + for(i=0; ; i++){ + AVPacket pkt; + AVStream *av_uninit(st); + char ts_buf[60]; + + memset(&pkt, 0, sizeof(pkt)); + if(ret>=0){ + ret= av_read_frame(ic, &pkt); + if(ret>=0){ + char dts_buf[60]; + st= ic->streams[pkt.stream_index]; + ts_str(dts_buf, pkt.dts, st->time_base); + ts_str(ts_buf, pkt.pts, st->time_base); + printf("ret:%-10s st:%2d flags:%d dts:%s pts:%s pos:%7" PRId64 " size:%6d", ret_str(ret), pkt.stream_index, pkt.flags, dts_buf, ts_buf, pkt.pos, pkt.size); + av_free_packet(&pkt); + } else + printf("ret:%s", ret_str(ret)); // necessary to avoid trailing whitespace + printf("\n"); + } + + if(i>25) break; + + stream_id= (i>>1)%(ic->nb_streams+1) - 1; + timestamp= (i*19362894167LL) % (4*AV_TIME_BASE) - AV_TIME_BASE; + if(stream_id>=0){ + st= ic->streams[stream_id]; + timestamp= av_rescale_q(timestamp, AV_TIME_BASE_Q, st->time_base); + } + //FIXME fully test the new seek API + if(i&1) ret = avformat_seek_file(ic, stream_id, INT64_MIN, timestamp, timestamp, 0); + else ret = avformat_seek_file(ic, stream_id, timestamp, timestamp, INT64_MAX, 0); + ts_str(ts_buf, timestamp, stream_id < 0 ? AV_TIME_BASE_Q : st->time_base); + printf("ret:%-10s st:%2d flags:%d ts:%s\n", ret_str(ret), stream_id, i&1, ts_buf); + } + + av_close_input_file(ic); + + return 0; +} diff --git a/tests/Makefile b/tests/Makefile index 35e803d..4739446 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -28,9 +28,6 @@ tests/data/asynth1.sw: tests/audiogen$(HOSTEXESUF) tests/data/asynth1.sw tests/vsynth%/00.pgm: TAG = GEN -tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS) - $(LD) $(LDFLAGS) -o $@ $< $(FF_EXTRALIBS) - include $(SRC_PATH)/tests/fate.mak include $(SRC_PATH)/tests/fate2.mak @@ -64,7 +61,7 @@ $(filter-out %-aref,$(FATE_ACODEC)): $(AREF) $(filter-out %-vref,$(FATE_VCODEC)): $(VREF) $(FATE_LAVF): $(REFS) $(FATE_LAVFI): $(REFS) tools/lavfi-showfiltfmts$(EXESUF) -$(FATE_SEEK): fate-codec fate-lavf tests/seek_test$(EXESUF) +$(FATE_SEEK): fate-codec fate-lavf libavformat/seek-test$(EXESUF) $(FATE_ACODEC): CMD = codectest acodec $(FATE_VSYNTH1): CMD = codectest vsynth1 @@ -107,7 +104,6 @@ clean:: testclean testclean: $(RM) -r tests/vsynth1 tests/vsynth2 tests/data $(RM) $(CLEANSUFFIXES:%=tests/%) - $(RM) tests/seek_test$(EXESUF) tests/seek_test.o $(RM) $(TESTTOOLS:%=tests/%$(HOSTEXESUF)) -include $(wildcard tests/*.d) diff --git a/tests/fate-run.sh b/tests/fate-run.sh index 10497c4..4121035 100755 --- a/tests/fate-run.sh +++ b/tests/fate-run.sh @@ -104,7 +104,7 @@ seektest(){ file=$(echo tests/data/$d/$file) ;; esac - $target_exec $target_path/tests/seek_test $target_path/$file + $target_exec $target_path/libavformat/seek-test $target_path/$file } mkdir -p "$outdir" diff --git a/tests/seek_test.c b/tests/seek_test.c deleted file mode 100644 index 71b2a2d..0000000 --- a/tests/seek_test.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2003 Fabrice Bellard - * Copyright (c) 2007 Michael Niedermayer - * - * This file is part of Libav. - * - * Libav 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. - * - * Libav 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 Libav; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include - -#include "libavutil/common.h" -#include "libavutil/mathematics.h" -#include "libavformat/avformat.h" - -#undef exit -#undef printf -#undef fprintf - -static char buffer[20]; - -static const char *ret_str(int v) -{ - switch (v) { - case AVERROR_EOF: return "-EOF"; - case AVERROR(EIO): return "-EIO"; - case AVERROR(ENOMEM): return "-ENOMEM"; - case AVERROR(EINVAL): return "-EINVAL"; - default: - snprintf(buffer, sizeof(buffer), "%2d", v); - return buffer; - } -} - -static void ts_str(char buffer[60], int64_t ts, AVRational base) -{ - double tsval; - if (ts == AV_NOPTS_VALUE) { - strcpy(buffer, " NOPTS "); - return; - } - tsval = ts * av_q2d(base); - snprintf(buffer, 60, "%9f", tsval); -} - -int main(int argc, char **argv) -{ - const char *filename; - AVFormatContext *ic = NULL; - int i, ret, stream_id; - int64_t timestamp; - AVFormatParameters params, *ap= ¶ms; - memset(ap, 0, sizeof(params)); - ap->channels=1; - ap->sample_rate= 22050; - - /* initialize libavcodec, and register all codecs and formats */ - av_register_all(); - - if (argc != 2) { - printf("usage: %s input_file\n" - "\n", argv[0]); - exit(1); - } - - filename = argv[1]; - - ret = av_open_input_file(&ic, filename, NULL, 0, ap); - if (ret < 0) { - fprintf(stderr, "cannot open %s\n", filename); - exit(1); - } - - ret = av_find_stream_info(ic); - if (ret < 0) { - fprintf(stderr, "%s: could not find codec parameters\n", filename); - exit(1); - } - - for(i=0; ; i++){ - AVPacket pkt; - AVStream *av_uninit(st); - char ts_buf[60]; - - memset(&pkt, 0, sizeof(pkt)); - if(ret>=0){ - ret= av_read_frame(ic, &pkt); - if(ret>=0){ - char dts_buf[60]; - st= ic->streams[pkt.stream_index]; - ts_str(dts_buf, pkt.dts, st->time_base); - ts_str(ts_buf, pkt.pts, st->time_base); - printf("ret:%-10s st:%2d flags:%d dts:%s pts:%s pos:%7" PRId64 " size:%6d", ret_str(ret), pkt.stream_index, pkt.flags, dts_buf, ts_buf, pkt.pos, pkt.size); - av_free_packet(&pkt); - } else - printf("ret:%s", ret_str(ret)); // necessary to avoid trailing whitespace - printf("\n"); - } - - if(i>25) break; - - stream_id= (i>>1)%(ic->nb_streams+1) - 1; - timestamp= (i*19362894167LL) % (4*AV_TIME_BASE) - AV_TIME_BASE; - if(stream_id>=0){ - st= ic->streams[stream_id]; - timestamp= av_rescale_q(timestamp, AV_TIME_BASE_Q, st->time_base); - } - //FIXME fully test the new seek API - if(i&1) ret = avformat_seek_file(ic, stream_id, INT64_MIN, timestamp, timestamp, 0); - else ret = avformat_seek_file(ic, stream_id, timestamp, timestamp, INT64_MAX, 0); - ts_str(ts_buf, timestamp, stream_id < 0 ? AV_TIME_BASE_Q : st->time_base); - printf("ret:%-10s st:%2d flags:%d ts:%s\n", ret_str(ret), stream_id, i&1, ts_buf); - } - - av_close_input_file(ic); - - return 0; -} -- cgit v1.1