]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/mxfenc.c
cosmetics, rename nb_frames to nb_fields
[ffmpeg] / libavformat / mxfenc.c
index 0fe162bbc3d6726e52e13409350ffea843e59a97..56d6da34757d593311de2ecb368ce1b266228bc8 100644 (file)
@@ -169,7 +169,6 @@ static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
 typedef struct MXFContext {
     int64_t footer_partition_offset;
     int essence_container_count;
-    uint8_t essence_containers_indices[FF_ARRAY_ELEMS(mxf_essence_container_uls)];
     AVRational time_base;
     int header_written;
     MXFIndexEntry *index_entries;
@@ -427,8 +426,8 @@ static void mxf_write_essence_container_refs(AVFormatContext *s)
     mxf_write_refs_count(pb, c->essence_container_count);
     av_log(s,AV_LOG_DEBUG, "essence container count:%d\n", c->essence_container_count);
     for (i = 0; i < c->essence_container_count; i++) {
-        put_buffer(pb, mxf_essence_container_uls[c->essence_containers_indices[i]].container_ul, 16);
-        PRINT_KEY(s, "essence container ul:\n", mxf_essence_container_uls[c->essence_containers_indices[i]].container_ul);
+        MXFStreamContext *sc = s->streams[i]->priv_data;
+        put_buffer(pb, mxf_essence_container_uls[sc->index].container_ul, 16);
     }
 }
 
@@ -731,8 +730,10 @@ static void mxf_write_multi_descriptor(AVFormatContext *s)
     mxf_write_local_tag(pb, 16, 0x3004);
     if (mxf->essence_container_count > 1)
         ul = multiple_desc_ul;
-    else
-        ul = mxf_essence_container_uls[mxf->essence_containers_indices[0]].container_ul;
+    else {
+        MXFStreamContext *sc = s->streams[0]->priv_data;
+        ul = mxf_essence_container_uls[sc->index].container_ul;
+    }
     put_buffer(pb, ul, 16);
 
     // write sub descriptor refs
@@ -1467,8 +1468,8 @@ static int mxf_write_header(AVFormatContext *s)
         sc->codec_ul = &mxf_essence_container_uls[sc->index].codec_ul;
 
         if (!present[sc->index]) {
-            mxf->essence_containers_indices[mxf->essence_container_count++] = sc->index;
             present[sc->index] = 1;
+            mxf->essence_container_count++;
         } else
             present[sc->index]++;
 
@@ -1548,8 +1549,10 @@ static void mxf_write_system_item(AVFormatContext *s)
     put_be16(pb, frame); // continuity count
     if (mxf->essence_container_count > 1)
         put_buffer(pb, multiple_desc_ul, 16);
-    else
-        put_buffer(pb, mxf_essence_container_uls[mxf->essence_containers_indices[0]].container_ul, 16);
+    else {
+        MXFStreamContext *sc = s->streams[0]->priv_data;
+        put_buffer(pb, mxf_essence_container_uls[sc->index].container_ul, 16);
+    }
     put_byte(pb, 0);
     put_be64(pb, 0);
     put_be64(pb, 0); // creation date/time stamp
@@ -1720,8 +1723,9 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
 
         mxf->edit_units_count++;
     } else if (st->index == 1) {
-        mxf->index_entries[mxf->edit_units_count-1].slice_offset =
-            url_ftell(pb) - mxf->index_entries[mxf->edit_units_count-1].offset;
+        uint64_t pos = url_ftell(pb);
+        mxf->index_entries[mxf->edit_units_count-1].slice_offset = pos +
+            klv_fill_size(pos) - mxf->index_entries[mxf->edit_units_count-1].offset;
     }
 
     mxf_write_klv_fill(s);
@@ -1884,7 +1888,7 @@ static int mxf_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int
 AVOutputFormat mxf_muxer = {
     "mxf",
     NULL_IF_CONFIG_SMALL("Material eXchange Format"),
-    NULL,
+    "application/mxf",
     "mxf",
     sizeof(MXFContext),
     CODEC_ID_PCM_S16LE,