[FFmpeg-cvslog] timecode: string representation can be negative.

Clément Bœsch git at videolan.org
Wed Jan 11 18:18:27 CET 2012


ffmpeg | branch: master | Clément Bœsch <clement.boesch at smartjog.com> | Wed Jan  4 17:06:39 2012 +0100| [f1db99166b2eb0f8b005ec43587a02c03a6d0506] | committer: Clément Bœsch

timecode: string representation can be negative.

Timecode can be specified with a negative value in MOV...

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f1db99166b2eb0f8b005ec43587a02c03a6d0506
---

 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 95aed96..8e2e599 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 a2b6b09..076f047 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.
  */



More information about the ffmpeg-cvslog mailing list