|
|
|
|
|
from numpy import uint64 |
|
|
from ..common.Common import * |
|
|
|
|
|
def TimeCodeToMillisec(timecode): |
|
|
|
|
|
if timecode == "": |
|
|
log.error("Empty timecode was given to TimeCodeToMillisec function") |
|
|
|
|
|
tokens = timecode.split(":") |
|
|
|
|
|
if len(tokens) == 0: |
|
|
log.error("Splitting of timecode " + timecode + " produced unexpected output") |
|
|
elif len(tokens) == 1: |
|
|
|
|
|
return uint64(timecode) |
|
|
|
|
|
hour = 0 |
|
|
min = 0 |
|
|
sec = 0 |
|
|
msec = 0 |
|
|
|
|
|
if len(tokens) >= 2: |
|
|
hour = uint64(tokens[0]) |
|
|
min = uint64(tokens[1]) |
|
|
|
|
|
if len(tokens) >= 3: |
|
|
sec = uint64(tokens[2]) |
|
|
|
|
|
|
|
|
if len(tokens) >= 4: |
|
|
msec = uint64(tokens[3]) |
|
|
|
|
|
min = min + hour*60 |
|
|
sec = sec + min*60 |
|
|
msec = msec + sec*1000 |
|
|
|
|
|
return uint64(msec) |
|
|
|
|
|
def MillisecToTimeCode(milliSec, use_dot_for_millisec = False): |
|
|
|
|
|
Millisecond = 1 |
|
|
Second = 1000 * Millisecond |
|
|
Minute = 60 * Second |
|
|
Hour = 60 * Minute |
|
|
|
|
|
hour = max(0, int(milliSec / Hour)) |
|
|
milliSec -= hour * Hour |
|
|
|
|
|
min = max(0, int(milliSec / Minute)) |
|
|
milliSec -= min * Minute |
|
|
|
|
|
sec = max(0, int(milliSec / Second)) |
|
|
milliSec -= sec * Second |
|
|
|
|
|
msec = max(0, int(milliSec / Millisecond)) |
|
|
milliSec -= sec * Millisecond |
|
|
|
|
|
if hour < 0 or min < 0 or sec < 0 or msec < 0: |
|
|
log.fatal("Could not construct timecode from millisec %v [hour: %v, min: %v, sec: %v, msec: %v]", milliSec, hour, min, sec, msec) |
|
|
|
|
|
if use_dot_for_millisec: |
|
|
timeCode = "%02d:%02d:%02d.%03d" % (hour, min, sec, msec) |
|
|
else: |
|
|
timeCode = "%02d:%02d:%02d:%03d" % (hour, min, sec, msec) |
|
|
|
|
|
return timeCode |
|
|
|
|
|
def FrameIndexToMillisec(frame_index, frame_rate): |
|
|
return int((frame_index * 1000)/frame_rate) |
|
|
|
|
|
def MillisecToFrameIndex(time_in_millisec, frame_rate): |
|
|
return int((time_in_millisec * frame_rate) / 1000) |
|
|
|
|
|
def TimeCodeToFrameIndex(timecode, frame_rate): |
|
|
return MillisecToFrameIndex(TimeCodeToMillisec(timecode), frame_rate) |
|
|
|
|
|
def FrameIndexToTimeCode(frame_index, frame_rate): |
|
|
return MillisecToTimeCode(FrameIndexToMillisec(frame_index, frame_rate)) |