@@ -13,14 +13,8 @@ namespace opentime { namespace OPENTIME_VERSION {
13
13
14
14
RationalTime RationalTime::_invalid_time{ 0 , RationalTime::_invalid_rate };
15
15
16
- static constexpr std::array<double , 4 > dropframe_timecode_rates{ {
17
- // 23.976,
18
- // 23.98,
19
- // 23.97,
20
- // 24000.0/1001.0,
21
- 29.97 ,
16
+ static constexpr std::array<double , 2 > dropframe_timecode_rates{ {
22
17
30000.0 / 1001.0 ,
23
- 59.94 ,
24
18
60000.0 / 1001.0 ,
25
19
} };
26
20
@@ -38,12 +32,9 @@ static constexpr std::array<double, 11> smpte_timecode_rates{
38
32
60.0 }
39
33
};
40
34
41
- static constexpr std::array<double , 16 > valid_timecode_rates{
35
+ static constexpr std::array<double , 12 > valid_timecode_rates{
42
36
{ 1.0 ,
43
37
12.0 ,
44
- 23.97 ,
45
- 23.976 ,
46
- 23.98 ,
47
38
24000.0 / 1001.0 ,
48
39
24.0 ,
49
40
25.0 ,
@@ -52,7 +43,6 @@ static constexpr std::array<double, 16> valid_timecode_rates{
52
43
30.0 ,
53
44
48.0 ,
54
45
50.0 ,
55
- 59.94 ,
56
46
60000.0 / 1001.0 ,
57
47
60.0 }
58
48
};
@@ -460,7 +450,8 @@ RationalTime::to_timecode(
460
450
return std::string ();
461
451
}
462
452
463
- if (!is_valid_timecode_rate (rate))
453
+ double nearest_valid_rate = nearest_valid_timecode_rate (rate);
454
+ if (abs (nearest_valid_rate - rate) > 0.1 )
464
455
{
465
456
if (error_status)
466
457
{
@@ -469,6 +460,9 @@ RationalTime::to_timecode(
469
460
return std::string ();
470
461
}
471
462
463
+ // Let's assume this is the rate instead of the given rate.
464
+ rate = nearest_valid_rate;
465
+
472
466
bool rate_is_dropframe = is_dropframe_rate (rate);
473
467
if (drop_frame == IsDropFrameRate::ForceYes and not rate_is_dropframe)
474
468
{
@@ -504,11 +498,11 @@ RationalTime::to_timecode(
504
498
}
505
499
else
506
500
{
507
- if (( rate == 29.97 ) or (rate == 30000 / 1001.0 ) )
501
+ if (rate == 30000 / 1001.0 )
508
502
{
509
503
dropframes = 2 ;
510
504
}
511
- else if (rate == 59.94 )
505
+ else if (rate == 60000 / 1001.0 )
512
506
{
513
507
dropframes = 4 ;
514
508
}
0 commit comments