Thank you, this is exactly the type of clear answer I was hoping for!
A couple follow-up questions:
- I seem to be able to, with the calculation on line 371 linked below, get
frame-inaccurate results, i.e. dropped or added frames. For example, with the
simple timecode "01:01:00.1" at 23.976 fps: I think the un-rounded value should
be 87754.5576, so I'd expect the rounded value to be either 87754 or 87755.
However, it's 87753! [0] I think this may be caused by using "floor" for the
hours and minutes, in combination with the fractional frame rate.
- It seems `lrint` determines its rounding direction depending on values in
the current environment. That seems to mean a user can also lose sample
accuracy if, for example, `lrint` rounds one way on my machine and then a
friend reads my .mlt file with a different rounding direction. Is this true?
Thanks,
Tom
[0] My code:
#include <stdio.h>
#include <math.h>
void main(void) {
double fps = 23.976;
int hours = 1;
int minutes = 1;
double seconds = 0.1;
printf("%f\n", floor( fps * hours * 3600 ) + floor( fps * minutes * 60 ) +
lrint( fps * seconds ));
}
On Sat, Aug 21, 2021 at 02:25:43AM +0000, Brian Matherly wrote:
> > Am I correct that MLT translates from these clock times to frame numbers
> and uses frame numbers for everything internally?
> Yes. "frame number" is often referred to as "position" in the code. I think
> the two terms are used interchangably.
> > How does rounding work?
> The code is
> here:https://github.com/mltframework/mlt/blob/master/src/framework/mlt_property.c#L371
> It uses lrint() for rounding the seconds part.
> ~Brian
>
> On Thursday, August 19, 2021, 11:45:00 PM CDT, amindfv--- via Mlt-devel
> <[email protected]> wrote:
>
> From reading the "time properties" doc
> (https://www.mltframework.org/blog/time_properties), it seems any number with
> a radix is interpreted as a clock time - e.g. "00:00:00.5" means half a
> second.
>
> A couple questions:
>
> - Am I correct that MLT translates from these clock times to frame numbers
> and uses frame numbers for everything internally?
> - How does rounding work? If I'm working at 24fps, frame number 8 has clock
> time 0.3333... and frame 9 has clock time 0.375. If I say "00:00:00.334", is
> that identical to saying "00:00:00.374"? And thus "00:00:00.333" would refer
> to the earlier frame 7? (I.e. the frame number is always rounded down?) Or is
> there some other simple and consistent translation from these clock times to
> frame numbers?
>
> Thanks,
> Tom
>
>
>
> _______________________________________________
> Mlt-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mlt-devel
>
_______________________________________________
Mlt-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mlt-devel