summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorDavid Conrad <lessen42@gmail.com>2009-08-14 02:38:45 -0400
committerMichael Niedermayer <michaelni@gmx.at>2011-10-27 01:03:22 +0200
commit1c5670dbb204369477ee1b5d967f9e8b4f4a33b8 (patch)
tree2ac2c1cd68e3d339e9e06ea9b9b9fb3eae3fa207 /libavformat
parentfc3203fcf9372b6733ddf89b7c66ca2f8ede8b59 (diff)
Timecode v2 muxer
(cherry picked from commit 79ca161498744330ac940ae773dda3f1796ce955) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/Makefile1
-rw-r--r--libavformat/allformats.c1
-rw-r--r--libavformat/timecode_v2.c53
3 files changed, 55 insertions, 0 deletions
diff --git a/libavformat/Makefile b/libavformat/Makefile
index 47045d321c..61109b729d 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -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_TIMECODE_V2_MUXER) += timecode_v2.o
OBJS-$(CONFIG_TMV_DEMUXER) += tmv.o
OBJS-$(CONFIG_TRUEHD_DEMUXER) += rawdec.o
OBJS-$(CONFIG_TRUEHD_MUXER) += rawenc.o
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index 7e0e9cef52..5ce50806a0 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -217,6 +217,7 @@ void av_register_all(void)
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);
diff --git a/libavformat/timecode_v2.c b/libavformat/timecode_v2.c
new file mode 100644
index 0000000000..f41e6569b9
--- /dev/null
+++ b/libavformat/timecode_v2.c
@@ -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,
+};