summaryrefslogtreecommitdiff
path: root/libavformat/mxfenc.c
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2009-02-11 00:56:27 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2009-02-11 00:56:27 +0000
commit1585b93a2c59d8c1202e3d4457de399bfd5794dc (patch)
treec70d0562fa4e970fc05bd7efd49df44ec9ced55a /libavformat/mxfenc.c
parent4c08b2bdcb0ca63163e140c48fb3deb94e9f53a8 (diff)
fix body offset
Originally committed as revision 17144 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/mxfenc.c')
-rw-r--r--libavformat/mxfenc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index a06ab4cacb..c12c0a162e 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -124,7 +124,6 @@ typedef struct MXFContext {
uint64_t *body_partition_offset;
unsigned body_partitions_count;
int last_key_index; ///< index of last key frame
- uint64_t body_offset;
} MXFContext;
static const uint8_t uuid_base[] = { 0xAD,0xAB,0x44,0x24,0x2f,0x25,0x4d,0xc7,0x92,0xff,0x29,0xbd };
@@ -1029,8 +1028,6 @@ static void mxf_write_partition(AVFormatContext *s, int bodysid,
// add encoded ber length
index_byte_count += 16 + klv_ber_length(index_byte_count);
index_byte_count += klv_fill_size(index_byte_count);
-
- mxf->body_offset += url_ftell(pb) - mxf->index_entries[0].offset;
}
if (!memcmp(key, body_partition_key, 16)) {
@@ -1071,8 +1068,13 @@ static void mxf_write_partition(AVFormatContext *s, int bodysid,
put_be32(pb, index_byte_count ? indexsid : 0); // indexSID
// BodyOffset
- if (bodysid) put_be64(pb, mxf->body_offset);
- else put_be64(pb, 0);
+ if (bodysid && mxf->edit_units_count) {
+ uint64_t partition_end = url_ftell(pb) + 8 + 4 + 16 + 8 +
+ 16*mxf->essence_container_count;
+ put_be64(pb, partition_end + klv_fill_size(partition_end) +
+ index_byte_count - mxf->first_edit_unit_offset);
+ } else
+ put_be64(pb, 0);
put_be32(pb, bodysid); // bodySID