From 064d75bd171c18a46430e0fe1b362c99159a24ba Mon Sep 17 00:00:00 2001 From: jelkins Date: Wed, 7 Oct 2020 11:39:43 -0700 Subject: check values for LinkedTrackID. --- src/AS_DCP_PCM.cpp | 10 ++++++++-- src/Metadata.cpp | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index e7fbff3..de8dbc0 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -51,7 +51,10 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD ADescObj->QuantizationBits = ADesc.QuantizationBits; ADescObj->BlockAlign = ADesc.BlockAlign; ADescObj->AvgBps = ADesc.AvgBps; - ADescObj->LinkedTrackID = ADesc.LinkedTrackID; + if ( ! ADesc.LinkedTrackID.empty() ) + { + ADescObj->LinkedTrackID = ADesc.LinkedTrackID; + } ADescObj->ContainerDuration = ADesc.ContainerDuration; ADescObj->ChannelAssignment.get().Reset(); @@ -98,7 +101,10 @@ 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; + if ( ! ADescObj.LinkedTrackID.empty() ) + { + ADesc.LinkedTrackID = ADescObj->LinkedTrackID; + } assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL); ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration; diff --git a/src/Metadata.cpp b/src/Metadata.cpp index adaac11..3eedcac 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -1279,7 +1279,7 @@ FileDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) { + if ( ASDCP_SUCCESS(result) && ( ! LinkedTrackID.empty() ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID)); LinkedTrackID.set_has_value( result == RESULT_OK ); } -- cgit v1.2.3 From 607e4fccc1ea3fa4252cab6401759303e3344b37 Mon Sep 17 00:00:00 2001 From: jelkins Date: Wed, 7 Oct 2020 14:19:38 -0700 Subject: remove extra '(' added with LinkTrackID --- src/Metadata.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 3eedcac..f161fc2 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -1279,7 +1279,7 @@ FileDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) && ( ! LinkedTrackID.empty() ) { + if ( ASDCP_SUCCESS(result) && ! LinkedTrackID.empty() ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID)); LinkedTrackID.set_has_value( result == RESULT_OK ); } -- cgit v1.2.3 From 2343b3cb21b989766144c7f535b1320027d0b3fc Mon Sep 17 00:00:00 2001 From: jelkins Date: Wed, 7 Oct 2020 14:23:20 -0700 Subject: check values for ObjectModelVersion --- src/MXF.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/MXF.cpp b/src/MXF.cpp index af406ee..6d7cdd8 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -629,7 +629,7 @@ ASDCP::MXF::Preface::InitFromTLVSet(TLVReader& TLVSet) Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Preface, LastModifiedDate)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(Preface, Version)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(Preface, ObjectModelVersion)); + if ( ASDCP_SUCCESS(result) && ! ObjectModelVersion.empty() ) result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(Preface, ObjectModelVersion)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Preface, PrimaryPackage)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Preface, Identifications)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Preface, ContentStorage)); @@ -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)); -- cgit v1.2.3 From 0ef2451744f2d8de2b462e4c0e5baf4be4afe3a5 Mon Sep 17 00:00:00 2001 From: jelkins Date: Wed, 7 Oct 2020 14:30:15 -0700 Subject: check values of IndexSID --- src/Index.cpp | 4 ++-- src/Metadata.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Index.cpp b/src/Index.cpp index 6406e0f..eff8e76 100755 --- a/src/Index.cpp +++ b/src/Index.cpp @@ -74,7 +74,7 @@ ASDCP::MXF::IndexTableSegment::InitFromTLVSet(TLVReader& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(IndexTableSegmentBase, IndexStartPosition)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(IndexTableSegmentBase, IndexDuration)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(IndexTableSegmentBase, EditUnitByteCount)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(IndexTableSegmentBase, IndexSID)); + if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(IndexTableSegmentBase, IndexSID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(IndexTableSegmentBase, SliceCount)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(IndexTableSegmentBase, PosTableCount)); @@ -127,7 +127,7 @@ ASDCP::MXF::IndexTableSegment::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexStartPosition)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexDuration)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(IndexTableSegmentBase, EditUnitByteCount)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexSID)); + if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexSID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(IndexTableSegmentBase, SliceCount)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(IndexTableSegmentBase, PosTableCount)); diff --git a/src/Metadata.cpp b/src/Metadata.cpp index f161fc2..20d2612 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -366,7 +366,7 @@ EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet) assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID)); - if ( ASDCP_SUCCESS(result) ) { + if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(EssenceContainerData, IndexSID)); IndexSID.set_has_value( result == RESULT_OK ); } -- cgit v1.2.3 From 6b98e08246b5b6a191152e3a3a4a69b459d1ae35 Mon Sep 17 00:00:00 2001 From: jelkins Date: Wed, 7 Oct 2020 14:41:13 -0700 Subject: check values for Duration --- src/Metadata.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 20d2612..ef6e17e 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -906,7 +906,7 @@ StructuralComponent::InitFromTLVSet(TLVReader& TLVSet) assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition)); - if ( ASDCP_SUCCESS(result) ) { + if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) { result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration)); Duration.set_has_value( result == RESULT_OK ); } @@ -2588,7 +2588,7 @@ DMSegment::InitFromTLVSet(TLVReader& TLVSet) assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition)); - if ( ASDCP_SUCCESS(result) ) { + if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) { result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(DMSegment, Duration)); Duration.set_has_value( result == RESULT_OK ); } -- cgit v1.2.3 From 1d4a906682d19207b0885d90f25fe3e5fd9bb844 Mon Sep 17 00:00:00 2001 From: jelkins Date: Thu, 8 Oct 2020 17:29:11 -0700 Subject: check values for ContainerDuration. --- src/AS_02_TimedText.cpp | 8 +++++--- src/AS_DCP_ATMOS.cpp | 7 +++++-- src/AS_DCP_DCData.cpp | 14 ++++++++++---- src/AS_DCP_JP2K.cpp | 7 +++++-- src/AS_DCP_MPEG2.cpp | 9 +++++---- src/AS_DCP_PCM.cpp | 16 +++++++--------- src/AS_DCP_TimedText.cpp | 8 +++++--- src/PCMParserList.cpp | 4 +--- src/as-02-info.cpp | 22 ++++++++++++++++++---- src/as-02-unwrap.cpp | 23 ++++++++++++++++------- src/phdr-unwrap.cpp | 12 ++++++++---- 11 files changed, 85 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/AS_02_TimedText.cpp b/src/AS_02_TimedText.cpp index 09f7103..7477ae9 100644 --- a/src/AS_02_TimedText.cpp +++ b/src/AS_02_TimedText.cpp @@ -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; @@ -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(); diff --git a/src/AS_DCP_ATMOS.cpp b/src/AS_DCP_ATMOS.cpp index 2fc7d56..cdba985 100644 --- a/src/AS_DCP_ATMOS.cpp +++ b/src/AS_DCP_ATMOS.cpp @@ -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(DDescObj->ContainerDuration); + if ( ! DDescObj->ContainerDuration.empty() ) + { + assert(DDescObj->ContainerDuration <= 0xFFFFFFFFL); + DDesc.ContainerDuration = static_cast(DDescObj->ContainerDuration); + } memcpy(DDesc.DataEssenceCoding, DDescObj->DataEssenceCoding.Value(), SMPTE_UL_LENGTH); return RESULT_OK; } diff --git a/src/AS_DCP_DCData.cpp b/src/AS_DCP_DCData.cpp index 245b46b..b957d6c 100644 --- a/src/AS_DCP_DCData.cpp +++ b/src/AS_DCP_DCData.cpp @@ -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(descriptor_object.ContainerDuration.const_get()); + if ( ! descriptor_object.ContainerDuration.empty() ) + { + assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL); + DDesc.ContainerDuration = static_cast(descriptor_object.ContainerDuration.const_get()); + } memcpy(DDesc.DataEssenceCoding, descriptor_object.DataEssenceCoding.Value(), SMPTE_UL_LENGTH); return RESULT_OK; } @@ -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(descriptor_object.ContainerDuration.const_get()); + if ( ! descriptor_object.ContainerDuration.empty() ) + { + assert(descriptor_object.ContainerDuration.const_get() <= 0xFFFFFFFFL); + DDesc.ContainerDuration = static_cast(descriptor_object.ContainerDuration.const_get()); + } memcpy(DDesc.DataEssenceCoding, descriptor_object.DataEssenceCoding.Value(), SMPTE_UL_LENGTH); return RESULT_OK; } diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index d5fddaa..6ad9eef 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -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(EssenceDescriptor.ContainerDuration.const_get()); + if ( ! EssenceDescriptor.ContainerDuration.empty() ) + { + assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL); + PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.const_get()); + } PDesc.StoredWidth = EssenceDescriptor.StoredWidth; PDesc.StoredHeight = EssenceDescriptor.StoredHeight; PDesc.AspectRatio = EssenceDescriptor.AspectRatio; diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 8afa8bc..2a11de2 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -48,9 +48,11 @@ 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; @@ -77,7 +79,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; diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index de8dbc0..6241d15 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -51,12 +51,8 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD ADescObj->QuantizationBits = ADesc.QuantizationBits; ADescObj->BlockAlign = ADesc.BlockAlign; ADescObj->AvgBps = ADesc.AvgBps; - if ( ! ADesc.LinkedTrackID.empty() ) - { - ADescObj->LinkedTrackID = ADesc.LinkedTrackID; - } + ADescObj->LinkedTrackID = ADesc.LinkedTrackID; ADescObj->ContainerDuration = ADesc.ContainerDuration; - ADescObj->ChannelAssignment.get().Reset(); switch ( ADesc.ChannelFormat ) @@ -101,13 +97,15 @@ ASDCP::MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor& ADesc.QuantizationBits = ADescObj->QuantizationBits; ADesc.BlockAlign = ADescObj->BlockAlign; ADesc.AvgBps = ADescObj->AvgBps; - if ( ! ADescObj.LinkedTrackID.empty() ) + if ( ! ADescObj->LinkedTrackID.empty() ) { ADesc.LinkedTrackID = ADescObj->LinkedTrackID; } - assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL); - ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration; - + if ( ! ADescObj->ContainerDuration.empty() ) + { + assert(ADescObj->ContainerDuration <= 0xFFFFFFFFL); + ADesc.ContainerDuration = (ui32_t) ADescObj->ContainerDuration; + } ADesc.ChannelFormat = PCM::CF_NONE; if ( ! ADescObj->ChannelAssignment.empty() ) diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp index 0cc3748..f19f6fc 100644 --- a/src/AS_DCP_TimedText.cpp +++ b/src/AS_DCP_TimedText.cpp @@ -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; @@ -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(); diff --git a/src/PCMParserList.cpp b/src/PCMParserList.cpp index c073e3f..6555fbb 100755 --- a/src/PCMParserList.cpp +++ b/src/PCMParserList.cpp @@ -193,9 +193,7 @@ ASDCP::PCMParserList::OpenRead(const Kumu::PathList_t& argv, const Rational& Pic return RESULT_FORMAT; } - if ( I->ADesc.ContainerDuration < m_ADesc.ContainerDuration ) - m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; - + m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; m_ADesc.BlockAlign += I->ADesc.BlockAlign; } diff --git a/src/as-02-info.cpp b/src/as-02-info.cpp index b469591..dd769a8 100644 --- a/src/as-02-info.cpp +++ b/src/as-02-info.cpp @@ -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 @@ -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 { @@ -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 { @@ -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 { diff --git a/src/as-02-unwrap.cpp b/src/as-02-unwrap.cpp index f0b3ba3..8625012 100755 --- a/src/as-02-unwrap.cpp +++ b/src/as-02-unwrap.cpp @@ -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(); @@ -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(); @@ -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(); @@ -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 ) diff --git a/src/phdr-unwrap.cpp b/src/phdr-unwrap.cpp index bd5a5a3..21c088c 100755 --- a/src/phdr-unwrap.cpp +++ b/src/phdr-unwrap.cpp @@ -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(); @@ -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(); -- cgit v1.2.3 From fcfd47cf24b11abc98e1257b6f9fe73253fe9b31 Mon Sep 17 00:00:00 2001 From: jelkins Date: Thu, 8 Oct 2020 17:59:54 -0700 Subject: re-add an if statement removed by accident in PCMParserList.cpp --- src/PCMParserList.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/PCMParserList.cpp b/src/PCMParserList.cpp index 6555fbb..67e7ef8 100755 --- a/src/PCMParserList.cpp +++ b/src/PCMParserList.cpp @@ -193,7 +193,9 @@ ASDCP::PCMParserList::OpenRead(const Kumu::PathList_t& argv, const Rational& Pic return RESULT_FORMAT; } - m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; + if ( I->ADesc.ContainerDuration < m_ADesc.ContainerDuration ) + m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; + m_ADesc.BlockAlign += I->ADesc.BlockAlign; } -- cgit v1.2.3 From 97e63717adfef05acd1584897942f4834aeacfa0 Mon Sep 17 00:00:00 2001 From: jelkins Date: Fri, 9 Oct 2020 11:43:06 -0700 Subject: add more empty() checks and adjust whitespace --- src/AS_DCP_MPEG2.cpp | 26 +++++++++++++++++++++----- src/PCMParserList.cpp | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 2a11de2..b7e6252 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -60,13 +60,29 @@ MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& V 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; } diff --git a/src/PCMParserList.cpp b/src/PCMParserList.cpp index 67e7ef8..b814951 100755 --- a/src/PCMParserList.cpp +++ b/src/PCMParserList.cpp @@ -194,7 +194,7 @@ ASDCP::PCMParserList::OpenRead(const Kumu::PathList_t& argv, const Rational& Pic } if ( I->ADesc.ContainerDuration < m_ADesc.ContainerDuration ) - m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; + m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; m_ADesc.BlockAlign += I->ADesc.BlockAlign; } -- cgit v1.2.3 From 082323548f0390c9dd9d331f48aa3ed9362a30c6 Mon Sep 17 00:00:00 2001 From: jelkins Date: Fri, 9 Oct 2020 11:44:29 -0700 Subject: remove empty() check from TLVset --- src/Index.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Index.cpp b/src/Index.cpp index eff8e76..6406e0f 100755 --- a/src/Index.cpp +++ b/src/Index.cpp @@ -74,7 +74,7 @@ ASDCP::MXF::IndexTableSegment::InitFromTLVSet(TLVReader& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(IndexTableSegmentBase, IndexStartPosition)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(IndexTableSegmentBase, IndexDuration)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(IndexTableSegmentBase, EditUnitByteCount)); - if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(IndexTableSegmentBase, IndexSID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(IndexTableSegmentBase, IndexSID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(IndexTableSegmentBase, SliceCount)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(IndexTableSegmentBase, PosTableCount)); @@ -127,7 +127,7 @@ ASDCP::MXF::IndexTableSegment::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexStartPosition)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexDuration)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(IndexTableSegmentBase, EditUnitByteCount)); - if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexSID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(IndexTableSegmentBase, IndexSID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(IndexTableSegmentBase, SliceCount)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(IndexTableSegmentBase, PosTableCount)); -- cgit v1.2.3 From fa71fce41f9fe79ab27a35461d625931d21f588a Mon Sep 17 00:00:00 2001 From: jelkins Date: Fri, 9 Oct 2020 11:45:53 -0700 Subject: add new function to calculate ContainerDuration from IndexTableSegment --- src/MXF.cpp | 19 +++++++++++++++++++ src/MXF.h | 1 + 2 files changed, 20 insertions(+) (limited to 'src') diff --git a/src/MXF.cpp b/src/MXF.cpp index c5cc07e..813ee15 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -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::iterator li; + for ( li = m_PacketList->m_List.begin(); li != m_PacketList->m_List.end(); li++ ) + { + IndexTableSegment *segment = dynamic_cast(*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 diff --git a/src/MXF.h b/src/MXF.h index d6e201a..ee0be96 100755 --- a/src/MXF.h +++ b/src/MXF.h @@ -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& 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&); -- cgit v1.2.3 From 82e8920b522cd46aba89adc53a74dce5b60da2c1 Mon Sep 17 00:00:00 2001 From: jelkins Date: Mon, 19 Oct 2020 09:38:36 -0700 Subject: revert changes to Metadata.cpp and PCMParserList.cpp --- src/Metadata.cpp | 8 ++++---- src/PCMParserList.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Metadata.cpp b/src/Metadata.cpp index fd4c115..9ca3d66 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -370,7 +370,7 @@ EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet) assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID)); - if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) { + if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(EssenceContainerData, IndexSID)); IndexSID.set_has_value( result == RESULT_OK ); } @@ -910,7 +910,7 @@ StructuralComponent::InitFromTLVSet(TLVReader& TLVSet) assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition)); - if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) { + if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration)); Duration.set_has_value( result == RESULT_OK ); } @@ -1283,7 +1283,7 @@ FileDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) && ! LinkedTrackID.empty() ) { + if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID)); LinkedTrackID.set_has_value( result == RESULT_OK ); } @@ -2592,7 +2592,7 @@ DMSegment::InitFromTLVSet(TLVReader& TLVSet) assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition)); - if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) { + if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(DMSegment, Duration)); Duration.set_has_value( result == RESULT_OK ); } diff --git a/src/PCMParserList.cpp b/src/PCMParserList.cpp index b814951..c073e3f 100755 --- a/src/PCMParserList.cpp +++ b/src/PCMParserList.cpp @@ -193,8 +193,8 @@ ASDCP::PCMParserList::OpenRead(const Kumu::PathList_t& argv, const Rational& Pic return RESULT_FORMAT; } - if ( I->ADesc.ContainerDuration < m_ADesc.ContainerDuration ) - m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; + if ( I->ADesc.ContainerDuration < m_ADesc.ContainerDuration ) + m_ADesc.ContainerDuration = I->ADesc.ContainerDuration; m_ADesc.BlockAlign += I->ADesc.BlockAlign; } -- cgit v1.2.3 From 6692ed39935bf2a67faefa39d16fcf9cb11431a1 Mon Sep 17 00:00:00 2001 From: jelkins Date: Mon, 19 Oct 2020 09:44:04 -0700 Subject: revert an empty() check in MXF.cpp because it tests a destination rather than the source. --- src/MXF.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/MXF.cpp b/src/MXF.cpp index 813ee15..83954f7 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -629,7 +629,7 @@ ASDCP::MXF::Preface::InitFromTLVSet(TLVReader& TLVSet) Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Preface, LastModifiedDate)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(Preface, Version)); - if ( ASDCP_SUCCESS(result) && ! ObjectModelVersion.empty() ) result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(Preface, ObjectModelVersion)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(Preface, ObjectModelVersion)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Preface, PrimaryPackage)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Preface, Identifications)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Preface, ContentStorage)); -- cgit v1.2.3