From f1db99166b2eb0f8b005ec43587a02c03a6d0506 Mon Sep 17 00:00:00 2001 From: Clément Bœsch Date: Wed, 4 Jan 2012 17:06:39 +0100 Subject: timecode: string representation can be negative. Timecode can be specified with a negative value in MOV... --- libavcodec/timecode.c | 9 +++++++-- libavcodec/timecode.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libavcodec/timecode.c b/libavcodec/timecode.c index 95aed96d9e..8e2e599c21 100644 --- a/libavcodec/timecode.c +++ b/libavcodec/timecode.c @@ -83,15 +83,20 @@ char *avpriv_timecode_to_string(char *buf, const struct ff_timecode *tc, unsigne { int frame_num = tc->start + frame; 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) frame_num = avpriv_framenum_to_drop_timecode(frame_num); + if (frame_num < 0) { + frame_num = -frame_num; + neg = 1; + } ff = frame_num % fps; ss = frame_num / fps % 60; mm = frame_num / (fps*60) % 60; 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); return buf; } diff --git a/libavcodec/timecode.h b/libavcodec/timecode.h index a2b6b0903b..076f04763f 100644 --- a/libavcodec/timecode.h +++ b/libavcodec/timecode.h @@ -67,6 +67,7 @@ uint32_t avpriv_framenum_to_smpte_timecode(unsigned frame, int fps, int drop); * @param tc Timecode struct pointer * @param frame Frame id (timecode frame is computed with tc->start+frame) * @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 * bytes is the minimum required size. */ -- cgit v1.2.3