timecode: string representation can be negative.
authorClément Bœsch <clement.boesch@smartjog.com>
Wed, 4 Jan 2012 16:06:39 +0000 (17:06 +0100)
committerClément Bœsch <ubitux@gmail.com>
Wed, 11 Jan 2012 17:14:09 +0000 (18:14 +0100)
Timecode can be specified with a negative value in MOV...

libavcodec/timecode.c
libavcodec/timecode.h

index 95aed96..8e2e599 100644 (file)
@@ -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;
 }
index a2b6b09..076f047 100644 (file)
@@ -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.
  */