/*
-Copyright (c) 2011-2015, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
+Copyright (c) 2011-2018, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
John Hurst
All rights reserved.
}
else if ( i->BodySID != first_body_sid )
{
- DefaultLogSink().Debug("The index assembler is ignoring BodySID %d.\n", i->BodySID);
+ // DefaultLogSink().Debug("The index assembler is ignoring BodySID %d.\n", i->BodySID);
continue;
}
{
ui64_t start_pos = segment->IndexStartPosition;
- if ( segment->EditUnitByteCount > 0 )
+ if ( segment->EditUnitByteCount > 0 ) // CBR
{
if ( m_PacketList->m_List.size() > 1 )
DefaultLogSink().Error("Unexpected multiple IndexTableSegment in CBR file\n");
return RESULT_OK;
}
else if ( (ui64_t)frame_num >= start_pos
- && (ui64_t)frame_num < (start_pos + segment->IndexDuration) )
+ && (ui64_t)frame_num < (start_pos + segment->IndexDuration) ) // VBR in segments
{
ui64_t tmp = frame_num - start_pos;
assert(tmp <= 0xFFFFFFFFL);
- Entry = segment->IndexEntryArray[(ui32_t) tmp];
- Entry.StreamOffset = Entry.StreamOffset - segment->RtEntryOffset + segment->RtFileOffset;
- return RESULT_OK;
+
+ if ( tmp < segment->IndexEntryArray.size() )
+ {
+ Entry = segment->IndexEntryArray[(ui32_t) tmp];
+ Entry.StreamOffset = Entry.StreamOffset - segment->RtEntryOffset + segment->RtFileOffset;
+ return RESULT_OK;
+ }
+ else
+ {
+ DefaultLogSink().Error("Malformed index table segment, IndexDuration does not match entries.\n");
+ }
}
}
}
// AS-DCP method of opening an MXF file for read
Result_t
-AS_02::h__AS02Reader::OpenMXFRead(const char* filename)
+AS_02::h__AS02Reader::OpenMXFRead(const std::string& filename)
{
bool has_header_essence = false;
Result_t result = ASDCP::MXF::TrackFileReader<OP1aHeader, AS_02::MXF::AS02IndexReader>::OpenMXFRead(filename);
{
//
UL OP1a_ul(m_Dict->ul(MDD_OP1a));
- InterchangeObject* Object;
m_Info.LabelSetType = LS_MXF_SMPTE;
if ( m_HeaderPart.OperationalPattern != OP1a_ul )
{
char strbuf[IdentBufferLen];
- const MDDEntry* Entry = m_Dict->FindUL(m_HeaderPart.OperationalPattern.Value());
+ const MDDEntry* Entry = m_Dict->FindULAnyVersion(m_HeaderPart.OperationalPattern.Value());
if ( Entry == 0 )
{
}
//
- if ( m_RIP.PairArray.front().ByteOffset != 0 )
+ if ( ! m_RIP.PairArray.empty() )
{
- DefaultLogSink().Error("First Partition in RIP is not at offset 0.\n");
- return RESULT_AS02_FORMAT;
+ if ( m_RIP.PairArray.front().ByteOffset != 0 )
+ {
+ DefaultLogSink().Error("First Partition in RIP is not at offset 0.\n");
+ return RESULT_AS02_FORMAT;
+ }
}
Kumu::fpos_t first_partition_after_header = 0;