move TimecodeFormat to libtimecode

provide a way to convert any TimecodeFormat to float frame-rate,
not only the currently active timecode_foramt.

git-svn-id: svn://localhost/ardour2/branches/3.0@13249 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Robin Gareus 2012-10-12 01:08:29 +00:00
parent 9116ea83dd
commit a9abe3b1e1
9 changed files with 133 additions and 111 deletions

View file

@ -423,6 +423,108 @@ hours_floor(Time& timecode)
}
}
float
timecode_to_frames_per_second(TimecodeFormat t)
{
switch (t) {
case timecode_23976:
return (24000.0/1001.0); //23.976;
break;
case timecode_24:
return 24;
break;
case timecode_24976:
return (25000.0/1001.0); //24.976;
break;
case timecode_25:
return 25;
break;
case timecode_2997:
return 29.97;
break;
case timecode_2997drop:
return (30000.0/1001.0); //29.97;
break;
case timecode_30:
return 30;
break;
case timecode_30drop:
return 30;
break;
case timecode_5994:
return (60000.0/1001.0); //59.94;
break;
case timecode_60:
return 60;
break;
default:
//std::cerr << "Editor received unexpected timecode type" << std::endl;
break;
}
return 30.0;
}
bool
timecode_has_drop_frames(TimecodeFormat t)
{
switch (t) {
case timecode_23976:
return false;
break;
case timecode_24:
return false;
break;
case timecode_24976:
return false;
break;
case timecode_25:
return false;
break;
case timecode_2997:
return false;
break;
case timecode_2997drop:
return true;
break;
case timecode_30:
return false;
break;
case timecode_30drop:
return true;
break;
case timecode_5994:
return false;
break;
case timecode_60:
return false;
break;
default:
//error << "Editor received unexpected timecode type" << endmsg;
break;
}
return false;
}
} // namespace Timecode

View file

@ -32,6 +32,19 @@ enum Wrap {
HOURS
};
enum TimecodeFormat {
timecode_23976,
timecode_24,
timecode_24976,
timecode_25,
timecode_2997,
timecode_2997drop,
timecode_30,
timecode_30drop,
timecode_5994,
timecode_60
};
struct Time {
bool negative;
uint32_t hours;
@ -84,6 +97,9 @@ void seconds_floor (Time& timecode);
void minutes_floor (Time& timecode);
void hours_floor (Time& timecode);
float timecode_to_frames_per_second(TimecodeFormat const t);
bool timecode_has_drop_frames(TimecodeFormat const t);
} // namespace Timecode
std::ostream& operator<< (std::ostream& ostr, const Timecode::Time& t);