On 05.01.2009 13:31, Artur Skawina wrote: > 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) I'm afraid this isn't feasible. The '+1' is done to make the first frame (at Index 0) have number '1'. With your change it would be numbered '0'. Klaus _______________________________________________ vdr mailing list vdr@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr