[vdr] Frames per second PAL vs. NTSC
Artur Skawina
art.08.09 at gmail.com
Mon Jan 5 13:31:54 CET 2009
Klaus Schmidinger wrote:
> Detecting the frame rate is done by looking at the PTS values, so
> it is independent of the actual broadcast system.
>
> Using this code for converting frame numbers into hh:mm:ss.ff...
>
> --------------------------------------------------------
> #include <math.h>
> #include <stdio.h>
>
> int main(void)
> {
> double FramesPerSecond = double(90000) / 3003;
> //FramesPerSecond = 25;
> for (int Index = 0; Index < 10000; Index++) {
> double Seconds;
> int f = round(modf(Index / FramesPerSecond, &Seconds) * FramesPerSecond) + 1;
> int s = int(Seconds);
> int m = s / 60 % 60;
> int h = s / 3600;
> s %= 60;
> printf("%3d ", Index);
> printf("%15.9f ", Index / FramesPerSecond);
> printf("%d:%02d:%02d.%02d", h, m, s, f);
> if (f > 30) printf(" *");
> printf("\n");
> }
> }
> --------------------------------------------------------
>
> ... sometimes results in a 31st frame:
>
> 9978 332.932600000 0:05:32.29
> 9979 332.965966667 0:05:32.30
> 9980 332.999333333 0:05:32.31 *
> 9981 333.032700000 0:05:33.02
> 9982 333.066066667 0:05:33.03
>
>
> Any ideas how to fix this?
eg
- int f = round(modf(Index / FramesPerSecond, &Seconds) * FramesPerSecond) + 1;
+ int f = round(modf(Index / FramesPerSecond, &Seconds) * FramesPerSecond + 0.5 );
note that some 'seconds' will contain only 29 frames. (see index 510 in the original
and 1019 in the fixed version)
artur
More information about the vdr
mailing list