[FFmpeg-cvslog] r11322 - in trunk: ffmpeg.c libavformat/raw.c

michael subversion
Wed Dec 26 23:28:22 CET 2007


Author: michael
Date: Wed Dec 26 23:28:22 2007
New Revision: 11322

Log:
Dont force fps unless the user actually specified one.
fixes issue309


Modified:
   trunk/ffmpeg.c
   trunk/libavformat/raw.c

Modified: trunk/ffmpeg.c
==============================================================================
--- trunk/ffmpeg.c	(original)
+++ trunk/ffmpeg.c	Wed Dec 26 23:28:22 2007
@@ -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(AVFormatCon
         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(AVFormatCon
                 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;

Modified: trunk/libavformat/raw.c
==============================================================================
--- trunk/libavformat/raw.c	(original)
+++ trunk/libavformat/raw.c	Wed Dec 26 23:28:22 2007
@@ -85,7 +85,10 @@ static int raw_read_header(AVFormatConte
             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;




More information about the ffmpeg-cvslog mailing list