Skip to content

Commit 8400c96

Browse files
authored
Merge pull request #69 from Jason-elkins/check_optional_values_arent_empty
Check optional values arent empty
2 parents d417531 + 6692ed3 commit 8400c96

File tree

12 files changed

+128
-44
lines changed

12 files changed

+128
-44
lines changed

src/AS_02_TimedText.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,11 @@ AS_02::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedTextDescripto
9090
ASDCP::MXF::TimedTextDescriptor* TDescObj = (ASDCP::MXF::TimedTextDescriptor*)m_EssenceDescriptor;
9191

9292
TDesc.EditRate = TDescObj->SampleRate;
93-
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
94-
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
93+
if ( ! TDescObj->ContainerDuration.empty() )
94+
{
95+
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
96+
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
97+
}
9598
memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen);
9699
TDesc.NamespaceName = TDescObj->NamespaceURI;
97100
TDesc.EncodingName = TDescObj->UCSEncoding;
@@ -637,7 +640,6 @@ AS_02::TimedText::MXFWriter::h__Writer::Finalize()
637640
DefaultLogSink().Error("Cannot finalize file, the primary essence resource has not been written.\n");
638641
return RESULT_STATE;
639642
}
640-
641643
m_FramesWritten = m_TDesc.ContainerDuration;
642644

643645
Result_t result = m_State.Goto_FINAL();

src/AS_DCP_ATMOS.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,11 @@ ASDCP::ATMOS::MXFReader::h__Reader::MD_to_DCData_DDesc(ASDCP::DCData::DCDataDesc
132132
ASDCP_TEST_NULL(m_EssenceDescriptor);
133133
MXF::PrivateDCDataDescriptor* DDescObj = m_EssenceDescriptor;
134134
DDesc.EditRate = DDescObj->SampleRate;
135-
assert(DDescObj->ContainerDuration <= 0xFFFFFFFFL);
136-
DDesc.ContainerDuration = static_cast<ui32_t>(DDescObj->ContainerDuration);
135+
if ( ! DDescObj->ContainerDuration.empty() )
136+
{
137+
assert(DDescObj->ContainerDuration <= 0xFFFFFFFFL);
138+
DDesc.ContainerDuration = static_cast<ui32_t>(DDescObj->ContainerDuration);
139+
}
137140
memcpy(DDesc.DataEssenceCoding, DDescObj->DataEssenceCoding.Value(), SMPTE_UL_LENGTH);
138141
return RESULT_OK;
139142
}

src/AS_DCP_DCData.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,11 @@ ASDCP::DCData::MXFReader::h__Reader::MD_to_DCData_DDesc(const MXF::DCDataDescrip
9999
DCData::DCDataDescriptor& DDesc)
100100
{
101101
DDesc.EditRate = descriptor_object.SampleRate;
102-
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
103-
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
102+
if ( ! descriptor_object.ContainerDuration.empty() )
103+
{
104+
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
105+
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
106+
}
104107
memcpy(DDesc.DataEssenceCoding, descriptor_object.DataEssenceCoding.Value(), SMPTE_UL_LENGTH);
105108
return RESULT_OK;
106109
}
@@ -111,8 +114,11 @@ ASDCP::DCData::MXFReader::h__Reader::MD_to_DCData_DDesc(const MXF::PrivateDCData
111114
DCData::DCDataDescriptor& DDesc)
112115
{
113116
DDesc.EditRate = descriptor_object.SampleRate;
114-
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
115-
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
117+
if ( ! descriptor_object.ContainerDuration.empty() )
118+
{
119+
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
120+
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
121+
}
116122
memcpy(DDesc.DataEssenceCoding, descriptor_object.DataEssenceCoding.Value(), SMPTE_UL_LENGTH);
117123
return RESULT_OK;
118124
}

src/AS_DCP_JP2K.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,11 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::GenericPictureEssenceDescriptor& Esse
399399

400400
PDesc.EditRate = EditRate;
401401
PDesc.SampleRate = SampleRate;
402-
assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL);
403-
PDesc.ContainerDuration = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.const_get());
402+
if ( ! EssenceDescriptor.ContainerDuration.empty() )
403+
{
404+
assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL);
405+
PDesc.ContainerDuration = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.const_get());
406+
}
404407
PDesc.StoredWidth = EssenceDescriptor.StoredWidth;
405408
PDesc.StoredHeight = EssenceDescriptor.StoredHeight;
406409
PDesc.AspectRatio = EssenceDescriptor.AspectRatio;

src/AS_DCP_MPEG2.cpp

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,41 @@ MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& V
4848
VDesc.SampleRate = VDescObj->SampleRate;
4949
VDesc.EditRate = VDescObj->SampleRate;
5050
VDesc.FrameRate = VDescObj->SampleRate.Numerator;
51-
assert(VDescObj->ContainerDuration <= 0xFFFFFFFFL);
52-
VDesc.ContainerDuration = (ui32_t) VDescObj->ContainerDuration;
53-
51+
if ( ! VDescObj->ContainerDuration.empty() )
52+
{
53+
assert(VDescObj->ContainerDuration <= 0xFFFFFFFFL);
54+
VDesc.ContainerDuration = (ui32_t) VDescObj->ContainerDuration;
55+
}
5456
VDesc.FrameLayout = VDescObj->FrameLayout;
5557
VDesc.StoredWidth = VDescObj->StoredWidth;
5658
VDesc.StoredHeight = VDescObj->StoredHeight;
5759
VDesc.AspectRatio = VDescObj->AspectRatio;
5860

5961
VDesc.ComponentDepth = VDescObj->ComponentDepth;
6062
VDesc.HorizontalSubsampling = VDescObj->HorizontalSubsampling;
61-
VDesc.VerticalSubsampling = VDescObj->VerticalSubsampling;
62-
VDesc.ColorSiting = VDescObj->ColorSiting;
63-
VDesc.CodedContentType = VDescObj->CodedContentType;
63+
if ( ! VDescObj->VerticalSubsampling.empty() )
64+
{
65+
VDesc.VerticalSubsampling = VDescObj->VerticalSubsampling;
66+
}
67+
if ( ! VDescObj->ColorSiting.empty() )
68+
{
69+
VDesc.ColorSiting = VDescObj->ColorSiting;
70+
}
71+
if ( ! VDescObj->CodedContentType.empty() )
72+
{
73+
VDesc.CodedContentType = VDescObj->CodedContentType;
74+
}
6475

6576
VDesc.LowDelay = VDescObj->LowDelay.get() == 0 ? false : true;
66-
VDesc.BitRate = VDescObj->BitRate;
67-
VDesc.ProfileAndLevel = VDescObj->ProfileAndLevel;
77+
if ( ! VDescObj->BitRate.empty() )
78+
{
79+
VDesc.BitRate = VDescObj->BitRate;
80+
}
81+
if ( ! VDescObj->ProfileAndLevel.empty() )
82+
{
83+
VDesc.ProfileAndLevel = VDescObj->ProfileAndLevel;
84+
}
85+
6886
return RESULT_OK;
6987
}
7088

@@ -77,7 +95,6 @@ MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor& VDesc, MXF::MPEG2VideoDescriptor* VDes
7795

7896
VDescObj->SampleRate = VDesc.SampleRate;
7997
VDescObj->ContainerDuration = VDesc.ContainerDuration;
80-
8198
VDescObj->FrameLayout = VDesc.FrameLayout;
8299
VDescObj->StoredWidth = VDesc.StoredWidth;
83100
VDescObj->StoredHeight = VDesc.StoredHeight;

src/AS_DCP_PCM.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD
5353
ADescObj->AvgBps = ADesc.AvgBps;
5454
ADescObj->LinkedTrackID = ADesc.LinkedTrackID;
5555
ADescObj->ContainerDuration = ADesc.ContainerDuration;
56-
5756
ADescObj->ChannelAssignment.get().Reset();
5857

5958
switch ( ADesc.ChannelFormat )
@@ -98,10 +97,15 @@ ASDCP::MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor&
9897
ADesc.QuantizationBits = ADescObj->QuantizationBits;
9998
ADesc.BlockAlign = ADescObj->BlockAlign;
10099
ADesc.AvgBps = ADescObj->AvgBps;
101-
ADesc.LinkedTrackID = ADescObj->LinkedTrackID;
102-
assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL);
103-
ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration;
104-
100+
if ( ! ADescObj->LinkedTrackID.empty() )
101+
{
102+
ADesc.LinkedTrackID = ADescObj->LinkedTrackID;
103+
}
104+
if ( ! ADescObj->ContainerDuration.empty() )
105+
{
106+
assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL);
107+
ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration;
108+
}
105109
ADesc.ChannelFormat = PCM::CF_NONE;
106110

107111
if ( ! ADescObj->ChannelAssignment.empty() )

src/AS_DCP_TimedText.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,11 @@ ASDCP::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedText::TimedTe
155155
MXF::TimedTextDescriptor* TDescObj = (MXF::TimedTextDescriptor*)m_EssenceDescriptor;
156156

157157
TDesc.EditRate = TDescObj->SampleRate;
158-
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
159-
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
158+
if ( ! TDescObj->ContainerDuration.empty() )
159+
{
160+
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
161+
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
162+
}
160163
memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen);
161164
TDesc.NamespaceName = TDescObj->NamespaceURI;
162165
TDesc.EncodingName = TDescObj->UCSEncoding;
@@ -638,7 +641,6 @@ ASDCP::TimedText::MXFWriter::h__Writer::Finalize()
638641
{
639642
if ( ! m_State.Test_RUNNING() )
640643
return RESULT_STATE;
641-
642644
m_FramesWritten = m_TDesc.ContainerDuration;
643645
m_State.Goto_FINAL();
644646

src/MXF.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ ASDCP::MXF::Preface::WriteToTLVSet(TLVWriter& TLVSet)
656656
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
657657
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Preface, LastModifiedDate));
658658
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(Preface, Version));
659-
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(Preface, ObjectModelVersion));
659+
if ( ASDCP_SUCCESS(result) && ! ObjectModelVersion.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(Preface, ObjectModelVersion));
660660
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Preface, PrimaryPackage));
661661
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Preface, Identifications));
662662
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Preface, ContentStorage));
@@ -1230,6 +1230,25 @@ ASDCP::MXF::OPAtomIndexFooter::GetMDObjectsByType(const byte_t* ObjectID, std::l
12301230
return m_PacketList->GetMDObjectsByType(ObjectID, ObjectList);
12311231
}
12321232

1233+
//
1234+
ui64_t
1235+
ASDCP::MXF::OPAtomIndexFooter::ContainerDuration() const
1236+
{
1237+
ui64_t container_duration = 0;
1238+
std::list<InterchangeObject*>::iterator li;
1239+
for ( li = m_PacketList->m_List.begin(); li != m_PacketList->m_List.end(); li++ )
1240+
{
1241+
IndexTableSegment *segment = dynamic_cast<IndexTableSegment*>(*li);
1242+
1243+
if ( segment != 0 )
1244+
{
1245+
container_duration += segment->IndexDuration;
1246+
}
1247+
}
1248+
1249+
return container_duration;
1250+
}
1251+
12331252
//
12341253
ASDCP::Result_t
12351254
ASDCP::MXF::OPAtomIndexFooter::Lookup(ui32_t frame_num, IndexTableSegment::IndexEntry& Entry) const

src/MXF.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ namespace ASDCP
486486
virtual Result_t GetMDObjectByType(const byte_t*, InterchangeObject** = 0);
487487
virtual Result_t GetMDObjectsByType(const byte_t* ObjectID, std::list<InterchangeObject*>& ObjectList);
488488

489+
virtual ui64_t ContainerDuration() const;
489490
virtual Result_t Lookup(ui32_t frame_num, IndexTableSegment::IndexEntry&) const;
490491
virtual void PushIndexEntry(const IndexTableSegment::IndexEntry&);
491492
virtual void SetDeltaParams(const IndexTableSegment::DeltaEntry&);

src/as-02-info.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
/*
22
Copyright (c) 2003-2016, John Hurst, Wolfgang Ruppel
3+
4+
35
All rights reserved.
46
57
Redistribution and use in source and binary forms, with or without
@@ -238,12 +240,18 @@ class MyPictureDescriptor : public JP2K::PictureDescriptor
238240
if ( m_RGBADescriptor != 0 )
239241
{
240242
SampleRate = m_RGBADescriptor->SampleRate;
241-
ContainerDuration = m_RGBADescriptor->ContainerDuration;
243+
if ( ! m_RGBADescriptor->ContainerDuration.empty() )
244+
{
245+
ContainerDuration = m_RGBADescriptor->ContainerDuration;
246+
}
242247
}
243248
else if ( m_CDCIDescriptor != 0 )
244249
{
245250
SampleRate = m_CDCIDescriptor->SampleRate;
246-
ContainerDuration = m_CDCIDescriptor->ContainerDuration;
251+
if ( ! m_CDCIDescriptor->ContainerDuration.empty() )
252+
{
253+
ContainerDuration = m_CDCIDescriptor->ContainerDuration;
254+
}
247255
}
248256
else
249257
{
@@ -376,7 +384,10 @@ class MyACESPictureDescriptor : public AS_02::ACES::PictureDescriptor
376384
if ( m_RGBADescriptor != 0 )
377385
{
378386
SampleRate = m_RGBADescriptor->SampleRate;
379-
ContainerDuration = m_RGBADescriptor->ContainerDuration;
387+
if ( ! m_RGBADescriptor->ContainerDuration.empty() )
388+
{
389+
ContainerDuration = m_RGBADescriptor->ContainerDuration;
390+
}
380391
}
381392
else
382393
{
@@ -475,7 +486,10 @@ class MyAudioDescriptor : public PCM::AudioDescriptor
475486
if ( m_WaveAudioDescriptor != 0 )
476487
{
477488
AudioSamplingRate = m_WaveAudioDescriptor->SampleRate;
478-
ContainerDuration = m_WaveAudioDescriptor->ContainerDuration;
489+
if ( ! m_WaveAudioDescriptor->ContainerDuration.empty() )
490+
{
491+
ContainerDuration = m_WaveAudioDescriptor->ContainerDuration;
492+
}
479493
}
480494
else
481495
{

0 commit comments

Comments
 (0)