timecode: string representation can be negative.
Timecode can be specified with a negative value in MOV...
This commit is contained in:

committed by
Clément Bœsch

parent
98aafc5bbf
commit
f1db99166b
@@ -83,15 +83,20 @@ char *avpriv_timecode_to_string(char *buf, const struct ff_timecode *tc, unsigne
|
|||||||
{
|
{
|
||||||
int frame_num = tc->start + frame;
|
int frame_num = tc->start + frame;
|
||||||
int fps = (tc->rate.num + tc->rate.den/2) / tc->rate.den;
|
int fps = (tc->rate.num + tc->rate.den/2) / tc->rate.den;
|
||||||
int hh, mm, ss, ff;
|
int hh, mm, ss, ff, neg = 0;
|
||||||
|
|
||||||
if (tc->drop)
|
if (tc->drop)
|
||||||
frame_num = avpriv_framenum_to_drop_timecode(frame_num);
|
frame_num = avpriv_framenum_to_drop_timecode(frame_num);
|
||||||
|
if (frame_num < 0) {
|
||||||
|
frame_num = -frame_num;
|
||||||
|
neg = 1;
|
||||||
|
}
|
||||||
ff = frame_num % fps;
|
ff = frame_num % fps;
|
||||||
ss = frame_num / fps % 60;
|
ss = frame_num / fps % 60;
|
||||||
mm = frame_num / (fps*60) % 60;
|
mm = frame_num / (fps*60) % 60;
|
||||||
hh = frame_num / (fps*3600) % 24;
|
hh = frame_num / (fps*3600) % 24;
|
||||||
snprintf(buf, 16, "%02d:%02d:%02d%c%02d",
|
snprintf(buf, 16, "%s%02d:%02d:%02d%c%02d",
|
||||||
|
neg ? "-" : "",
|
||||||
hh, mm, ss, tc->drop ? ';' : ':', ff);
|
hh, mm, ss, tc->drop ? ';' : ':', ff);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@@ -67,6 +67,7 @@ uint32_t avpriv_framenum_to_smpte_timecode(unsigned frame, int fps, int drop);
|
|||||||
* @param tc Timecode struct pointer
|
* @param tc Timecode struct pointer
|
||||||
* @param frame Frame id (timecode frame is computed with tc->start+frame)
|
* @param frame Frame id (timecode frame is computed with tc->start+frame)
|
||||||
* @return a pointer to the buf parameter
|
* @return a pointer to the buf parameter
|
||||||
|
* @note timecode representation can be a negative timecode
|
||||||
* @note buf must have enough space to store the timecode representation: 16
|
* @note buf must have enough space to store the timecode representation: 16
|
||||||
* bytes is the minimum required size.
|
* bytes is the minimum required size.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user