[MPlayer-dev-eng] Allow framerate detection for avc1 over rtsp with b-frames

Nico Sabbi nicola_sabbi at fastwebnet.it
Sun Jan 21 11:24:41 CET 2007


Carl Eugen Hoyos wrote:

> 
> ------------------------------------------------------------------------
> 
> Index: libmpdemux/demux_rtp_codec.cpp
> ===================================================================
> --- libmpdemux/demux_rtp_codec.cpp	(Revision 21934)
> +++ libmpdemux/demux_rtp_codec.cpp	(Arbeitskopie)
> @@ -4,6 +4,7 @@
>  #include "demux_rtp_internal.h"
>  extern "C" {
>  #include <limits.h>
> +#include <math.h>
>  #include "stheader.h"
>  }
>  
> @@ -247,19 +248,24 @@
>    unsigned char* packetData; unsigned packetDataLen;
>    float lastPTS = 0.0, curPTS;
>    unsigned const maxNumFramesToWaitFor = 300;
> +  int lastfps = 0;
>    for (unsigned i = 0; i < maxNumFramesToWaitFor; ++i) {
>      if (!awaitRTPPacket(demuxer, d_video, packetData, packetDataLen, curPTS)) {
>        break;
>      }
>  
> -    if (curPTS > lastPTS && lastPTS != 0.0) {
> +    if (curPTS != lastPTS && lastPTS != 0.0) {
>        // Use the difference between these two "pts"s to guess the frame rate.
>        // (should really check that there were no missing frames inbetween)#####
>        // Guess the frame rate as an integer.  If it's not, use "-fps" instead.
> -      fps = (int)(1/(curPTS-lastPTS) + 0.5); // rounding
> +      fps = (int)(1/fabs(curPTS-lastPTS) + 0.5); // rounding
> +        if (fps == lastfps) {
>        fprintf(stderr, "demux_rtp: Guessed the video frame rate as %d frames-per-second.\n\t(If this is wrong, use the \"-fps <frame-rate>\" option instead.)\n", fps);
>        sh_video->fps = fps;
> +      sh_video->frametime=1.0f/fps;
>        return;
> +        }
> +      if (fps>lastfps) lastfps = fps;
>      }
>      lastPTS = curPTS;
>    }
> 

looks good to me
-- 
"Without a frontend, mplayer is useless" - someone in mplayer-users



More information about the MPlayer-dev-eng mailing list