From 9de0be61bec565c8ad7ea48c169aed4d55144b5c Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 26 Dec 2007 22:28:22 +0000 Subject: [PATCH] Do not force fps unless the user actually specified one. fixes issue309 Originally committed as revision 11322 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 10 +++++----- libavformat/raw.c | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index 9a990a382f..6d7dfef2e7 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -115,7 +115,7 @@ static int frame_bottomBand = 0; static int frame_leftBand = 0; static int frame_rightBand = 0; static int max_frames[4] = {INT_MAX, INT_MAX, INT_MAX, INT_MAX}; -static AVRational frame_rate = (AVRational) {25,1}; +static AVRational frame_rate = (AVRational) {0,0}; static float video_qscale = 0; static int video_qdiff = 3; static uint16_t *intra_matrix = NULL; @@ -2869,6 +2869,7 @@ static void new_video_stream(AVFormatContext *oc) char *p; int i; AVCodec *codec; + AVRational fps= frame_rate.num ? frame_rate : (AVRational){25,1}; codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, CODEC_TYPE_VIDEO); if (video_codec_name) @@ -2885,15 +2886,14 @@ static void new_video_stream(AVFormatContext *oc) av_set_string(video_enc, opt_names[i], str); } - video_enc->time_base.den = frame_rate.num; - video_enc->time_base.num = frame_rate.den; + video_enc->time_base.den = fps.num; + video_enc->time_base.num = fps.den; if(codec && codec->supported_framerates){ const AVRational *p= codec->supported_framerates; - AVRational req= (AVRational){frame_rate.num, frame_rate.den}; const AVRational *best=NULL; AVRational best_error= (AVRational){INT_MAX, 1}; for(; p->den!=0; p++){ - AVRational error= av_sub_q(req, *p); + AVRational error= av_sub_q(fps, *p); if(error.num <0) error.num *= -1; if(av_cmp_q(error, best_error) < 0){ best_error= error; diff --git a/libavformat/raw.c b/libavformat/raw.c index 08e75c5f59..7efa716a53 100644 --- a/libavformat/raw.c +++ b/libavformat/raw.c @@ -85,7 +85,10 @@ static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap) av_set_pts_info(st, 64, 1, st->codec->sample_rate); break; case CODEC_TYPE_VIDEO: - av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den); + if(ap->time_base.num) + av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den); + else + av_set_pts_info(st, 64, 1, 25); st->codec->width = ap->width; st->codec->height = ap->height; st->codec->pix_fmt = ap->pix_fmt;