Remaining parts of GSoC MXF muxer by Zhentan Feng.
authorCarl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at>
Tue, 26 Aug 2008 15:58:25 +0000 (15:58 +0000)
committerCarl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at>
Tue, 26 Aug 2008 15:58:25 +0000 (15:58 +0000)
Originally committed as revision 14975 to svn://svn.ffmpeg.org/ffmpeg/trunk

Changelog
libavformat/Makefile
libavformat/allformats.c
libavformat/mxf.h
libavformat/mxfenc.c

index 373394e..f049c02 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -132,6 +132,7 @@ version <next>
 - Apple Lossless Audio Codec (ALAC) encoder
 - AAC decoder
 - floating point PCM encoder/decoder
+- MXF muxer
 
 version 0.4.9-pre1:
 
index 8db975e..6457f66 100644 (file)
@@ -109,6 +109,7 @@ OBJS-$(CONFIG_MSNWC_TCP_DEMUXER)         += msnwc_tcp.o
 OBJS-$(CONFIG_MTV_DEMUXER)               += mtv.o
 OBJS-$(CONFIG_MVI_DEMUXER)               += mvi.o
 OBJS-$(CONFIG_MXF_DEMUXER)               += mxfdec.o mxf.o
+OBJS-$(CONFIG_MXF_MUXER)                 += mxfenc.o mxf.o
 OBJS-$(CONFIG_NSV_DEMUXER)               += nsvdec.o
 OBJS-$(CONFIG_NULL_MUXER)                += raw.o
 OBJS-$(CONFIG_NUT_DEMUXER)               += nutdec.o nut.o riff.o
index bb15212..d207c3b 100644 (file)
@@ -124,7 +124,7 @@ void av_register_all(void)
     REGISTER_DEMUXER  (MSNWC_TCP, msnwc_tcp);
     REGISTER_DEMUXER  (MTV, mtv);
     REGISTER_DEMUXER  (MVI, mvi);
-    REGISTER_DEMUXER  (MXF, mxf);
+    REGISTER_MUXDEMUX (MXF, mxf);
     REGISTER_DEMUXER  (NSV, nsv);
     REGISTER_MUXER    (NULL, null);
     REGISTER_MUXDEMUX (NUT, nut);
index b6ba22a..9d9d036 100644 (file)
@@ -63,7 +63,7 @@ typedef struct {
 
 extern const MXFDataDefinitionUL ff_mxf_data_definition_uls[];
 extern const MXFCodecUL ff_mxf_codec_uls[];
-extern const MXFCodecUL ff_mxf_essence_container_uls[];
+extern const MXFCodecUL ff_mxf_essence_container_uls[6];
 
 #ifdef DEBUG
 #define PRINT_KEY(pc, s, x) dprintf(pc, "%s %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", s, \
index 08f8052..3bcd6a3 100644 (file)
@@ -245,6 +245,42 @@ static const MXFDataDefinitionUL *mxf_get_data_definition_ul(enum CodecType type
     return uls;
 }
 
+static int mxf_write_essence_container_refs(AVFormatContext *s, int write)
+{
+    ByteIOContext *pb = s->pb;
+    AVStream *st;
+    int i, count = 0, j = 0;
+    const MXFCodecUL *codec_ul;
+    int essence_container_ul_sign[sizeof(ff_mxf_essence_container_uls) / sizeof(MXFCodecUL)] = { 0 };
+
+    for (codec_ul = ff_mxf_essence_container_uls; codec_ul->id; codec_ul++) {
+        for (i = 0; i < s->nb_streams; i++) {
+            st = s->streams[i];
+            if (st->codec->codec_id == codec_ul->id) {
+                essence_container_ul_sign[count] = j;
+                count++;
+                break;
+            }
+        }
+        j++;
+        // considering WAV/AES3 frame wrapped, when get the first CODEC_ID_PCM_S16LE, break;
+        // this is a temporary method, when we can get  more information, modofy this.
+        if (codec_ul->id == CODEC_ID_PCM_S16LE)
+            break;
+    }
+
+    if (write) {
+        mxf_write_refs_count(pb, count);
+        for (i = 0; i < count; i++) {
+            put_buffer(pb, ff_mxf_essence_container_uls[essence_container_ul_sign[i]].uid, 16);
+        }
+        av_log(s,AV_LOG_DEBUG, "essence container count:%d\n", count);
+        for (i = 0; i < count; i++)
+            PRINT_KEY(s, "essence container ul:\n", ff_mxf_essence_container_uls[essence_container_ul_sign[i]].uid);
+    }
+    return count;
+}
+
 static void mxf_write_preface(AVFormatContext *s)
 {
     MXFContext *mxf = s->priv_data;