2 #include "libavformat/avformat.h"
5 static uint64_t time_convert(uint64_t time, AVStream *st)
7 if (st->start_time != AV_NOPTS_VALUE) {
9 time -= st->start_time;
11 fprintf(stderr, "%Ld\t%Ld\n", st->start_time, av_rescale_q(st->start_time,
12 st->time_base, AV_TIME_BASE_Q));
15 time = av_rescale_q(time, st->time_base, AV_TIME_BASE_Q);
20 static void time_base_convert(AVPacket *pkt, AVStream *st)
22 if (pkt->pts != AV_NOPTS_VALUE) {
23 pkt->pts = time_convert(pkt->pts, st);
25 if (pkt->dts != AV_NOPTS_VALUE) {
26 pkt->dts = time_convert(pkt->dts, st);
28 if (pkt->duration != 0) {
29 pkt->duration = av_rescale_q(pkt->duration, st->time_base, AV_TIME_BASE_Q);
33 AVFormatContext *open_input_stream(const char *fname)
37 AVFormatParameters param;
40 memset(¶m, 0, sizeof(AVFormatParameters));
41 /* FIXME: Set these!!! */
44 param.pix_fmt = PIX_FMT_YUV420P;
45 param.time_base.den = 25;
46 param.time_base.num = 1;
47 fmt = av_find_input_format("video4linux2");
48 res = av_open_input_file(&s, fname, fmt, 0, ¶m);
50 fprintf(stderr, "Error opening %s: %d\n", fname, res);
55 res = av_find_stream_info(s);
57 fprintf(stderr, "Cannot find codec parameters for %s\n", fname);
62 dump_format(s, 0, fname, 0);
67 void close_input_stream(AVFormatContext *s)
69 av_close_input_file(s);
72 AVPacket *read_input_packet(AVFormatContext *s)
78 res = av_read_frame(s, &pkt);
83 st = s->streams[pkt.stream_index];
84 if (pkt.dts == AV_NOPTS_VALUE) {
85 fprintf(stderr, "WTF??? Unknown DTS???\n");
90 time_base_convert(&pkt, st);