Skip to content

Commit

Permalink
Merge pull request #69 from Jason-elkins/check_optional_values_arent_…
Browse files Browse the repository at this point in the history
…empty

Check optional values arent empty
  • Loading branch information
jhursty authored Oct 21, 2020
2 parents d417531 + 6692ed3 commit 8400c96
Show file tree
Hide file tree
Showing 12 changed files with 128 additions and 44 deletions.
8 changes: 5 additions & 3 deletions src/AS_02_TimedText.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,11 @@ AS_02::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedTextDescripto
ASDCP::MXF::TimedTextDescriptor* TDescObj = (ASDCP::MXF::TimedTextDescriptor*)m_EssenceDescriptor;

TDesc.EditRate = TDescObj->SampleRate;
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
if ( ! TDescObj->ContainerDuration.empty() )
{
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
}
memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen);
TDesc.NamespaceName = TDescObj->NamespaceURI;
TDesc.EncodingName = TDescObj->UCSEncoding;
Expand Down Expand Up @@ -637,7 +640,6 @@ AS_02::TimedText::MXFWriter::h__Writer::Finalize()
DefaultLogSink().Error("Cannot finalize file, the primary essence resource has not been written.\n");
return RESULT_STATE;
}

m_FramesWritten = m_TDesc.ContainerDuration;

Result_t result = m_State.Goto_FINAL();
Expand Down
7 changes: 5 additions & 2 deletions src/AS_DCP_ATMOS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,11 @@ ASDCP::ATMOS::MXFReader::h__Reader::MD_to_DCData_DDesc(ASDCP::DCData::DCDataDesc
ASDCP_TEST_NULL(m_EssenceDescriptor);
MXF::PrivateDCDataDescriptor* DDescObj = m_EssenceDescriptor;
DDesc.EditRate = DDescObj->SampleRate;
assert(DDescObj->ContainerDuration <= 0xFFFFFFFFL);
DDesc.ContainerDuration = static_cast<ui32_t>(DDescObj->ContainerDuration);
if ( ! DDescObj->ContainerDuration.empty() )
{
assert(DDescObj->ContainerDuration <= 0xFFFFFFFFL);
DDesc.ContainerDuration = static_cast<ui32_t>(DDescObj->ContainerDuration);
}
memcpy(DDesc.DataEssenceCoding, DDescObj->DataEssenceCoding.Value(), SMPTE_UL_LENGTH);
return RESULT_OK;
}
Expand Down
14 changes: 10 additions & 4 deletions src/AS_DCP_DCData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,11 @@ ASDCP::DCData::MXFReader::h__Reader::MD_to_DCData_DDesc(const MXF::DCDataDescrip
DCData::DCDataDescriptor& DDesc)
{
DDesc.EditRate = descriptor_object.SampleRate;
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
if ( ! descriptor_object.ContainerDuration.empty() )
{
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
}
memcpy(DDesc.DataEssenceCoding, descriptor_object.DataEssenceCoding.Value(), SMPTE_UL_LENGTH);
return RESULT_OK;
}
Expand All @@ -111,8 +114,11 @@ ASDCP::DCData::MXFReader::h__Reader::MD_to_DCData_DDesc(const MXF::PrivateDCData
DCData::DCDataDescriptor& DDesc)
{
DDesc.EditRate = descriptor_object.SampleRate;
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
if ( ! descriptor_object.ContainerDuration.empty() )
{
assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL);
DDesc.ContainerDuration = static_cast<ui32_t>(descriptor_object.ContainerDuration.const_get());
}
memcpy(DDesc.DataEssenceCoding, descriptor_object.DataEssenceCoding.Value(), SMPTE_UL_LENGTH);
return RESULT_OK;
}
Expand Down
7 changes: 5 additions & 2 deletions src/AS_DCP_JP2K.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -399,8 +399,11 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::GenericPictureEssenceDescriptor& Esse

PDesc.EditRate = EditRate;
PDesc.SampleRate = SampleRate;
assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL);
PDesc.ContainerDuration = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.const_get());
if ( ! EssenceDescriptor.ContainerDuration.empty() )
{
assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL);
PDesc.ContainerDuration = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.const_get());
}
PDesc.StoredWidth = EssenceDescriptor.StoredWidth;
PDesc.StoredHeight = EssenceDescriptor.StoredHeight;
PDesc.AspectRatio = EssenceDescriptor.AspectRatio;
Expand Down
35 changes: 26 additions & 9 deletions src/AS_DCP_MPEG2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,41 @@ MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& V
VDesc.SampleRate = VDescObj->SampleRate;
VDesc.EditRate = VDescObj->SampleRate;
VDesc.FrameRate = VDescObj->SampleRate.Numerator;
assert(VDescObj->ContainerDuration <= 0xFFFFFFFFL);
VDesc.ContainerDuration = (ui32_t) VDescObj->ContainerDuration;

if ( ! VDescObj->ContainerDuration.empty() )
{
assert(VDescObj->ContainerDuration <= 0xFFFFFFFFL);
VDesc.ContainerDuration = (ui32_t) VDescObj->ContainerDuration;
}
VDesc.FrameLayout = VDescObj->FrameLayout;
VDesc.StoredWidth = VDescObj->StoredWidth;
VDesc.StoredHeight = VDescObj->StoredHeight;
VDesc.AspectRatio = VDescObj->AspectRatio;

VDesc.ComponentDepth = VDescObj->ComponentDepth;
VDesc.HorizontalSubsampling = VDescObj->HorizontalSubsampling;
VDesc.VerticalSubsampling = VDescObj->VerticalSubsampling;
VDesc.ColorSiting = VDescObj->ColorSiting;
VDesc.CodedContentType = VDescObj->CodedContentType;
if ( ! VDescObj->VerticalSubsampling.empty() )
{
VDesc.VerticalSubsampling = VDescObj->VerticalSubsampling;
}
if ( ! VDescObj->ColorSiting.empty() )
{
VDesc.ColorSiting = VDescObj->ColorSiting;
}
if ( ! VDescObj->CodedContentType.empty() )
{
VDesc.CodedContentType = VDescObj->CodedContentType;
}

VDesc.LowDelay = VDescObj->LowDelay.get() == 0 ? false : true;
VDesc.BitRate = VDescObj->BitRate;
VDesc.ProfileAndLevel = VDescObj->ProfileAndLevel;
if ( ! VDescObj->BitRate.empty() )
{
VDesc.BitRate = VDescObj->BitRate;
}
if ( ! VDescObj->ProfileAndLevel.empty() )
{
VDesc.ProfileAndLevel = VDescObj->ProfileAndLevel;
}

return RESULT_OK;
}

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

VDescObj->SampleRate = VDesc.SampleRate;
VDescObj->ContainerDuration = VDesc.ContainerDuration;

VDescObj->FrameLayout = VDesc.FrameLayout;
VDescObj->StoredWidth = VDesc.StoredWidth;
VDescObj->StoredHeight = VDesc.StoredHeight;
Expand Down
14 changes: 9 additions & 5 deletions src/AS_DCP_PCM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD
ADescObj->AvgBps = ADesc.AvgBps;
ADescObj->LinkedTrackID = ADesc.LinkedTrackID;
ADescObj->ContainerDuration = ADesc.ContainerDuration;

ADescObj->ChannelAssignment.get().Reset();

switch ( ADesc.ChannelFormat )
Expand Down Expand Up @@ -98,10 +97,15 @@ ASDCP::MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor&
ADesc.QuantizationBits = ADescObj->QuantizationBits;
ADesc.BlockAlign = ADescObj->BlockAlign;
ADesc.AvgBps = ADescObj->AvgBps;
ADesc.LinkedTrackID = ADescObj->LinkedTrackID;
assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL);
ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration;

if ( ! ADescObj->LinkedTrackID.empty() )
{
ADesc.LinkedTrackID = ADescObj->LinkedTrackID;
}
if ( ! ADescObj->ContainerDuration.empty() )
{
assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL);
ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration;
}
ADesc.ChannelFormat = PCM::CF_NONE;

if ( ! ADescObj->ChannelAssignment.empty() )
Expand Down
8 changes: 5 additions & 3 deletions src/AS_DCP_TimedText.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,11 @@ ASDCP::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedText::TimedTe
MXF::TimedTextDescriptor* TDescObj = (MXF::TimedTextDescriptor*)m_EssenceDescriptor;

TDesc.EditRate = TDescObj->SampleRate;
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
if ( ! TDescObj->ContainerDuration.empty() )
{
assert(TDescObj->ContainerDuration <= 0xFFFFFFFFL);
TDesc.ContainerDuration = (ui32_t) TDescObj->ContainerDuration;
}
memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen);
TDesc.NamespaceName = TDescObj->NamespaceURI;
TDesc.EncodingName = TDescObj->UCSEncoding;
Expand Down Expand Up @@ -638,7 +641,6 @@ ASDCP::TimedText::MXFWriter::h__Writer::Finalize()
{
if ( ! m_State.Test_RUNNING() )
return RESULT_STATE;

m_FramesWritten = m_TDesc.ContainerDuration;
m_State.Goto_FINAL();

Expand Down
21 changes: 20 additions & 1 deletion src/MXF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,7 @@ ASDCP::MXF::Preface::WriteToTLVSet(TLVWriter& TLVSet)
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Preface, LastModifiedDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(Preface, Version));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(Preface, ObjectModelVersion));
if ( ASDCP_SUCCESS(result) && ! ObjectModelVersion.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(Preface, ObjectModelVersion));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Preface, PrimaryPackage));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Preface, Identifications));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Preface, ContentStorage));
Expand Down Expand Up @@ -1230,6 +1230,25 @@ ASDCP::MXF::OPAtomIndexFooter::GetMDObjectsByType(const byte_t* ObjectID, std::l
return m_PacketList->GetMDObjectsByType(ObjectID, ObjectList);
}

//
ui64_t
ASDCP::MXF::OPAtomIndexFooter::ContainerDuration() const
{
ui64_t container_duration = 0;
std::list<InterchangeObject*>::iterator li;
for ( li = m_PacketList->m_List.begin(); li != m_PacketList->m_List.end(); li++ )
{
IndexTableSegment *segment = dynamic_cast<IndexTableSegment*>(*li);

if ( segment != 0 )
{
container_duration += segment->IndexDuration;
}
}

return container_duration;
}

//
ASDCP::Result_t
ASDCP::MXF::OPAtomIndexFooter::Lookup(ui32_t frame_num, IndexTableSegment::IndexEntry& Entry) const
Expand Down
1 change: 1 addition & 0 deletions src/MXF.h
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ namespace ASDCP
virtual Result_t GetMDObjectByType(const byte_t*, InterchangeObject** = 0);
virtual Result_t GetMDObjectsByType(const byte_t* ObjectID, std::list<InterchangeObject*>& ObjectList);

virtual ui64_t ContainerDuration() const;
virtual Result_t Lookup(ui32_t frame_num, IndexTableSegment::IndexEntry&) const;
virtual void PushIndexEntry(const IndexTableSegment::IndexEntry&);
virtual void SetDeltaParams(const IndexTableSegment::DeltaEntry&);
Expand Down
22 changes: 18 additions & 4 deletions src/as-02-info.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
/*
Copyright (c) 2003-2016, John Hurst, Wolfgang Ruppel
All rights reserved.
Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -238,12 +240,18 @@ class MyPictureDescriptor : public JP2K::PictureDescriptor
if ( m_RGBADescriptor != 0 )
{
SampleRate = m_RGBADescriptor->SampleRate;
ContainerDuration = m_RGBADescriptor->ContainerDuration;
if ( ! m_RGBADescriptor->ContainerDuration.empty() )
{
ContainerDuration = m_RGBADescriptor->ContainerDuration;
}
}
else if ( m_CDCIDescriptor != 0 )
{
SampleRate = m_CDCIDescriptor->SampleRate;
ContainerDuration = m_CDCIDescriptor->ContainerDuration;
if ( ! m_CDCIDescriptor->ContainerDuration.empty() )
{
ContainerDuration = m_CDCIDescriptor->ContainerDuration;
}
}
else
{
Expand Down Expand Up @@ -376,7 +384,10 @@ class MyACESPictureDescriptor : public AS_02::ACES::PictureDescriptor
if ( m_RGBADescriptor != 0 )
{
SampleRate = m_RGBADescriptor->SampleRate;
ContainerDuration = m_RGBADescriptor->ContainerDuration;
if ( ! m_RGBADescriptor->ContainerDuration.empty() )
{
ContainerDuration = m_RGBADescriptor->ContainerDuration;
}
}
else
{
Expand Down Expand Up @@ -475,7 +486,10 @@ class MyAudioDescriptor : public PCM::AudioDescriptor
if ( m_WaveAudioDescriptor != 0 )
{
AudioSamplingRate = m_WaveAudioDescriptor->SampleRate;
ContainerDuration = m_WaveAudioDescriptor->ContainerDuration;
if ( ! m_WaveAudioDescriptor->ContainerDuration.empty() )
{
ContainerDuration = m_WaveAudioDescriptor->ContainerDuration;
}
}
else
{
Expand Down
23 changes: 16 additions & 7 deletions src/as-02-unwrap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,10 @@ read_JP2K_file(CommandOptions& Options)
if ( KM_SUCCESS(result) )
{
assert(rgba_descriptor);
frame_count = (ui32_t)rgba_descriptor->ContainerDuration;

if ( ! rgba_descriptor->ContainerDuration.empty() )
{
frame_count = (ui32_t)rgba_descriptor->ContainerDuration;
}
if ( Options.verbose_flag )
{
rgba_descriptor->Dump();
Expand All @@ -330,8 +332,10 @@ read_JP2K_file(CommandOptions& Options)
if ( KM_SUCCESS(result) )
{
assert(cdci_descriptor);
frame_count = (ui32_t)cdci_descriptor->ContainerDuration;

if ( ! cdci_descriptor->ContainerDuration.empty() )
{
frame_count = (ui32_t)cdci_descriptor->ContainerDuration;
}
if ( Options.verbose_flag )
{
cdci_descriptor->Dump();
Expand Down Expand Up @@ -454,8 +458,10 @@ read_ACES_file(CommandOptions& Options)
if (KM_SUCCESS(result))
{
assert(aces_descriptor);
frame_count = aces_descriptor->ContainerDuration;

if ( ! aces_descriptor->ContainerDuration.empty() )
{
frame_count = aces_descriptor->ContainerDuration;
}
if (Options.verbose_flag)
{
aces_descriptor->Dump();
Expand Down Expand Up @@ -665,7 +671,10 @@ read_PCM_file(CommandOptions& Options)
}
else
{
last_frame = (ui32_t)wave_descriptor->ContainerDuration;
if ( ! wave_descriptor->ContainerDuration.empty() )
{
last_frame = (ui32_t)wave_descriptor->ContainerDuration;
}
}

if ( last_frame == 0 )
Expand Down
12 changes: 8 additions & 4 deletions src/phdr-unwrap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,8 +281,10 @@ read_JP2K_file(CommandOptions& Options)
if ( KM_SUCCESS(result) )
{
assert(rgba_descriptor);
frame_count = rgba_descriptor->ContainerDuration;

if ( ! rgba_descriptor->ContainerDuration.empty() )
{
frame_count = rgba_descriptor->ContainerDuration;
}
if ( Options.verbose_flag )
{
rgba_descriptor->Dump();
Expand All @@ -296,8 +298,10 @@ read_JP2K_file(CommandOptions& Options)
if ( KM_SUCCESS(result) )
{
assert(cdci_descriptor);
frame_count = cdci_descriptor->ContainerDuration;

if ( ! cdci_descriptor->ContainerDuration.empty() )
{
frame_count = cdci_descriptor->ContainerDuration;
}
if ( Options.verbose_flag )
{
cdci_descriptor->Dump();
Expand Down

0 comments on commit 8400c96

Please sign in to comment.