On Thu, 15 Dec 2011 13:48:30 -0800, Alex Converse <[email protected]> wrote: > --- > libavformat/avformat.h | 7 +++++++ > libavformat/options.c | 1 + > libavformat/utils.c | 11 +++++++++++ > 3 files changed, 19 insertions(+), 0 deletions(-) > > diff --git a/libavformat/avformat.h b/libavformat/avformat.h > index 89b9eda..b1dcfdf 100644 > --- a/libavformat/avformat.h > +++ b/libavformat/avformat.h > @@ -1161,6 +1161,13 @@ typedef struct AVFormatContext { > /* av_seek_frame() support */ > int64_t data_offset; /**< offset of the first packet */ > #endif > + > + /** > + * Override the input framerate > + * - encoding: unused > + * - decoding: Set by user. > + */ > + char *framerate_override; > } AVFormatContext; > > typedef struct AVPacketList { > diff --git a/libavformat/options.c b/libavformat/options.c > index a9e2c1c..57fd138 100644 > --- a/libavformat/options.c > +++ b/libavformat/options.c > @@ -113,6 +113,7 @@ static const AVOption options[]={ > {"careful", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_ER_CAREFUL }, INT_MIN, > INT_MAX, D, "fer"}, > {"explode", "abort decoding on error recognition", 0, AV_OPT_TYPE_CONST, > {.dbl = FF_ER_EXPLODE }, INT_MIN, INT_MAX, D, "fer"}, > {"fpsprobesize", "number of frames used to probe fps", > OFFSET(fps_probe_size), AV_OPT_TYPE_INT, {.dbl = -1}, -1, INT_MAX-1, D}, > +{"framerate", "", OFFSET(framerate_override), AV_OPT_TYPE_STRING, {.str = > ""}, 0, 0, D }, > {NULL}, > }; > > diff --git a/libavformat/utils.c b/libavformat/utils.c > index f424285..5b3ebdb 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -656,6 +656,17 @@ int avformat_open_input(AVFormatContext **ps, const char > *filename, AVInputForma > if ((ret = s->iformat->read_header(s, &ap)) < 0) > goto fail; > > + if (s->framerate_override && *s->framerate_override) { > + AVRational framerate; > + if ((ret = av_parse_video_rate(&framerate, s->framerate_override)) < > 0) { > + av_log(s, AV_LOG_ERROR, "Could not parse framerate: %s.\n", > s->framerate_override); > + goto fail; > + } > + if (s->streams && s->streams[0]) { > + avpriv_set_pts_info(s->streams[0], 64, framerate.den, > framerate.num); > + } > + } > + > if (s->pb && !s->data_offset) > s->data_offset = avio_tell(s->pb); > > -- > 1.7.3.1 > > I'm not really sure what to do about multiple streams. All I really care about > is y4m, rawvideo and img2.
I don't think it makes much sense to do this on lavf level. You can already do this in avconv with -vf setpts=N/(<fps>*TB), any other calling app can trivially do the same by counting packets. -- Anton Khirnov _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
