File size: 2,159 Bytes
a103028
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

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:
        # No colons - timecode format is in milliseconds
        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))