X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tests%2Fseek_test.c;h=81a7821261c2c12f6d651eb3c1bfff88280e6929;hb=9ad7dfc110de1c7540d5050c1d4f075f57cb9f7a;hp=215c1aec88b3f0c3bbdf7b3e208790e3f925433e;hpb=b929eb50415fe002d60588bb29b4f05e3ce39c69;p=ffmpeg diff --git a/tests/seek_test.c b/tests/seek_test.c index 215c1aec88b..81a7821261c 100644 --- a/tests/seek_test.c +++ b/tests/seek_test.c @@ -18,17 +18,55 @@ * License along with FFmpeg; 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 "libavformat/avformat.h" + +#undef exit +#undef printf +#undef fprintf -#include "avformat.h" +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; + 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(); @@ -41,16 +79,9 @@ int main(int argc, char **argv) filename = argv[1]; - /* allocate the media context */ - ic = av_alloc_format_context(); - if (!ic) { - fprintf(stderr, "Memory error\n"); - exit(1); - } - - ret = av_open_input_file(&ic, filename, NULL, 0, NULL); + ret = av_open_input_file(&ic, filename, NULL, 0, ap); if (ret < 0) { - fprintf(stderr, "cant open %s\n", filename); + fprintf(stderr, "cannot open %s\n", filename); exit(1); } @@ -62,17 +93,22 @@ int main(int argc, char **argv) for(i=0; ; i++){ AVPacket pkt; - AVStream *st; + AVStream *av_uninit(st); + char ts_buf[60]; memset(&pkt, 0, sizeof(pkt)); if(ret>=0){ - ret= av_read_frame(ic, &pkt); - printf("ret:%2d", ret); - if(ret>=0){ - st= ic->streams[pkt.stream_index]; - printf(" st:%2d dts:%f pts:%f pos:%Ld size:%d flags:%d", pkt.stream_index, pkt.dts*av_q2d(st->time_base), pkt.pts*av_q2d(st->time_base), pkt.pos, pkt.size, pkt.flags); - } - printf("\n"); + 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; @@ -83,9 +119,14 @@ int main(int argc, char **argv) st= ic->streams[stream_id]; timestamp= av_rescale_q(timestamp, AV_TIME_BASE_Q, st->time_base); } - ret = av_seek_frame(ic, stream_id, timestamp, (i&1)*AVSEEK_FLAG_BACKWARD); - printf("ret:%2d st:%2d ts:%f flags:%d\n", ret, stream_id, timestamp*(stream_id<0 ? 1.0/AV_TIME_BASE : av_q2d(st->time_base)), i&1); + //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; }