MCPcopy Create free account
hub / github.com/MediaArea/MediaInfoLib / Ttml_str2timecode

Function Ttml_str2timecode

Source/MediaInfo/Text/File_Ttml.cpp:106–165  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

104}
105
106int64u Ttml_str2timecode(const char* Value, float FrameRate=0)
107{
108 size_t Length=strlen(Value);
109 if (Length>=8
110 && Value[0]>='0' && Value[0]<='9'
111 && Value[1]>='0' && Value[1]<='9'
112 && Value[2]==':'
113 && Value[3]>='0' && Value[3]<='9'
114 && Value[4]>='0' && Value[4]<='9'
115 && Value[5]==':'
116 && Value[6]>='0' && Value[6]<='9'
117 && Value[7]>='0' && Value[7]<='9')
118 {
119 int64u ToReturn=(int64u)(Value[0]-'0')*10*60*60*1000000000
120 +(int64u)(Value[1]-'0') *60*60*1000000000
121 +(int64u)(Value[3]-'0') *10*60*1000000000
122 +(int64u)(Value[4]-'0') *60*1000000000
123 +(int64u)(Value[6]-'0') *10*1000000000
124 +(int64u)(Value[7]-'0') *1000000000;
125 if (Length>=9 && (Value[8]=='.' || Value[8]==','))
126 {
127 if (Length>9+9)
128 Length=9+9; //Nanoseconds max
129 const char* Value_End=Value+Length;
130 Value+=9;
131 int64u Multiplier=100000000;
132 while (Value<Value_End)
133 {
134 ToReturn+=(int64u)(*Value-'0')*Multiplier;
135 Multiplier/=10;
136 Value++;
137 }
138 }
139 if (FrameRate && Length>=9 && Value[8]==':')
140 {
141 const char* Value_End=Value+Length;
142 Value+=9;
143 int64u FrameNumber=0;
144 while (Value<Value_End)
145 {
146 FrameNumber*=10;
147 FrameNumber+=(int64u)(*Value-'0');
148 Value++;
149 }
150 ToReturn+=FrameNumber/FrameRate*1000000000;
151 }
152
153 return ToReturn;
154 }
155 else if (Length>=2
156 && Value[Length-1]=='s')
157 {
158 float64 ValueF=to_float64(Value);
159 if (ValueF<0)
160 return 0; //Npt supported
161 return (int64u)float64_int64s(ValueF*1000000000);
162 }
163 else

Callers 1

Read_Buffer_ContinueMethod · 0.85

Calls 1

to_float64Function · 0.85

Tested by

no test coverage detected