Timecode v2 muxer
authorDavid Conrad <lessen42@gmail.com>
Fri, 14 Aug 2009 06:38:45 +0000 (02:38 -0400)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 26 Oct 2011 23:03:22 +0000 (01:03 +0200)
(cherry picked from commit 79ca161498744330ac940ae773dda3f1796ce955)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/Makefile
libavformat/allformats.c
libavformat/timecode_v2.c [new file with mode: 0644]

index 47045d3..61109b7 100644 (file)
@@ -291,6 +291,7 @@ OBJS-$(CONFIG_SWF_DEMUXER)               += swfdec.o
 OBJS-$(CONFIG_SWF_MUXER)                 += swfenc.o
 OBJS-$(CONFIG_THP_DEMUXER)               += thp.o
 OBJS-$(CONFIG_TIERTEXSEQ_DEMUXER)        += tiertexseq.o
 OBJS-$(CONFIG_SWF_MUXER)                 += swfenc.o
 OBJS-$(CONFIG_THP_DEMUXER)               += thp.o
 OBJS-$(CONFIG_TIERTEXSEQ_DEMUXER)        += tiertexseq.o
+OBJS-$(CONFIG_TIMECODE_V2_MUXER)         += timecode_v2.o
 OBJS-$(CONFIG_TMV_DEMUXER)               += tmv.o
 OBJS-$(CONFIG_TRUEHD_DEMUXER)            += rawdec.o
 OBJS-$(CONFIG_TRUEHD_MUXER)              += rawenc.o
 OBJS-$(CONFIG_TMV_DEMUXER)               += tmv.o
 OBJS-$(CONFIG_TRUEHD_DEMUXER)            += rawdec.o
 OBJS-$(CONFIG_TRUEHD_MUXER)              += rawenc.o
index 7e0e9ce..5ce5080 100644 (file)
@@ -217,6 +217,7 @@ void av_register_all(void)
     REGISTER_MUXER    (TGP, tgp);
     REGISTER_DEMUXER  (THP, thp);
     REGISTER_DEMUXER  (TIERTEXSEQ, tiertexseq);
     REGISTER_MUXER    (TGP, tgp);
     REGISTER_DEMUXER  (THP, thp);
     REGISTER_DEMUXER  (TIERTEXSEQ, tiertexseq);
+    REGISTER_MUXER    (TIMECODE_V2, timecode_v2);
     REGISTER_DEMUXER  (TMV, tmv);
     REGISTER_MUXDEMUX (TRUEHD, truehd);
     REGISTER_DEMUXER  (TTA, tta);
     REGISTER_DEMUXER  (TMV, tmv);
     REGISTER_MUXDEMUX (TRUEHD, truehd);
     REGISTER_DEMUXER  (TTA, tta);
diff --git a/libavformat/timecode_v2.c b/libavformat/timecode_v2.c
new file mode 100644 (file)
index 0000000..f41e656
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * extract pts as timecode v2, as defined by mkvtoolnix
+ * Copyright (c) 2009 David Conrad
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "avformat.h"
+
+static int timecode_v2_write_header(AVFormatContext *s)
+{
+    static const char *header = "# timecode format v2\n";
+    put_buffer(s->pb, header, strlen(header));
+    av_set_pts_info(s->streams[0], 64, 1, 1000);
+    return 0;
+}
+
+static int timecode_v2_write_packet(AVFormatContext *s, AVPacket *pkt)
+{
+    char buf[256];
+    if (pkt->stream_index)
+        av_log(s, AV_LOG_WARNING, "More than one stream unsupported\n");
+    snprintf(buf, sizeof(buf), "%" PRId64 "\n", pkt->dts);
+    put_buffer(s->pb, buf, strlen(buf));
+    put_flush_packet(s->pb);
+    return 0;
+}
+
+AVOutputFormat ff_timecode_v2_muxer = {
+    "timecode_v2",
+    NULL_IF_CONFIG_SMALL("timecode format v2"),
+    NULL,
+    "",
+    0,
+    CODEC_ID_NONE,
+    CODEC_ID_RAWVIDEO,
+    timecode_v2_write_header,
+    timecode_v2_write_packet,
+};