Esempio n. 1
0
void AvidMJPEGTrack::WriteVBEIndexTable(Partition *partition)
{
    KAGFillerWriter kag_filler_writer(partition);
    partition->markIndexStart(mMXFFile);

    IndexTableSegment segment;
    segment.setIndexEditRate(mDescriptorHelper->GetSampleRate());
    segment.setIndexSID(mIndexSID);
    segment.setBodySID(mBodySID);
    segment.setEditUnitByteCount(0);

    uint32_t num_index_entries = mIndexSegment.GetSize() / INDEX_ENTRY_SIZE;
    BMX_ASSERT(num_index_entries >= 1);
    int64_t index_duration = num_index_entries - 1;

    mxfUUID uuid;
    mxf_generate_uuid(&uuid);

    segment.setInstanceUID(uuid);
    segment.setIndexStartPosition(0);
    segment.setIndexDuration(index_duration);
    segment.writeHeader(mMXFFile, 0, num_index_entries);
    // Avid ignores the 16-bit llen and uses the number of index entries (uint32) instead
    segment.writeAvidIndexEntryArrayHeader(mMXFFile, 0, 0, num_index_entries);
    mMXFFile->write(mIndexSegment.GetBytes(), mIndexSegment.GetSize());

    kag_filler_writer.write(mMXFFile);
    partition->markIndexEnd(mMXFFile);
}