]> git.sesse.net Git - vlc/commitdiff
transcode -- round fps to full integer value (eg, 25, 30) for ffmpeg mpeg1/2
authorMark Moriarty <markfm@videolan.org>
Sun, 20 Mar 2005 17:48:27 +0000 (17:48 +0000)
committerMark Moriarty <markfm@videolan.org>
Sun, 20 Mar 2005 17:48:27 +0000 (17:48 +0000)
modules/stream_out/transcode.c

index 16ce9da8eb60fa50fb299b89c8d5653896d9dc12..511f8d86a13e6ec738ff618690438a8ba4195c20 100644 (file)
@@ -672,8 +672,20 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
 
         if( p_sys->f_fps > 0 )
         {
-            id->p_encoder->fmt_out.video.i_frame_rate = nearbyint(p_sys->f_fps * 1000) ;
-            id->p_encoder->fmt_out.video.i_frame_rate_base = 1000;
+            if( id->p_encoder->fmt_out.i_codec == VLC_FOURCC( 'm', 'p', 'g', 'v' ) ||
+                id->p_encoder->fmt_out.i_codec == VLC_FOURCC( 'm', 'p', '1', 'v' ) ||
+                id->p_encoder->fmt_out.i_codec == VLC_FOURCC( 'm', 'p', '2', 'v' ) )
+            { /* ffmpeg mpeg1/2 wants integer, 30 not 29.97, for example */
+                p_sys->f_fps = nearbyint(p_sys->f_fps);
+                id->p_encoder->fmt_out.video.i_frame_rate = p_sys->f_fps;
+                id->p_encoder->fmt_out.video.i_frame_rate_base = 1;
+               }
+            else
+            { /* scale by 1000 so you can get non-integer rates, like 29.97 */
+                id->p_encoder->fmt_out.video.i_frame_rate = 
+                        nearbyint(p_sys->f_fps * 1000) ;
+                id->p_encoder->fmt_out.video.i_frame_rate_base = 1000;
+            }
         }
     }
     else if( p_fmt->i_cat == SPU_ES && (p_sys->i_scodec || p_sys->psz_senc) )