diff options
| author | John Hurst <jhurst@cinecert.com> | 2021-01-12 12:46:52 -0800 |
|---|---|---|
| committer | John Hurst <jhurst@cinecert.com> | 2021-01-12 12:46:52 -0800 |
| commit | f69df80edc00a138f50fd527706c78617342dcdd (patch) | |
| tree | 8797cf6a3afc7fca45296d753b2033d74558044f /src | |
| parent | 70d6b24694d5d243d5e09cecd34097180a4f2d62 (diff) | |
| parent | 8400c964b7852fd5be2b23640bf665cf69d85593 (diff) | |
Merge branch 'master' into sha1_builtin
Diffstat (limited to 'src')
| -rw-r--r-- | src/AS_02_TimedText.cpp | 8 | ||||
| -rw-r--r-- | src/AS_DCP_ATMOS.cpp | 7 | ||||
| -rw-r--r-- | src/AS_DCP_DCData.cpp | 14 | ||||
| -rwxr-xr-x | src/AS_DCP_JP2K.cpp | 7 | ||||
| -rwxr-xr-x | src/AS_DCP_MPEG2.cpp | 35 | ||||
| -rwxr-xr-x | src/AS_DCP_PCM.cpp | 14 | ||||
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 8 | ||||
| -rwxr-xr-x | src/MXF.cpp | 21 | ||||
| -rwxr-xr-x | src/MXF.h | 1 | ||||
| -rw-r--r-- | src/as-02-info.cpp | 22 | ||||
| -rwxr-xr-x | src/as-02-unwrap.cpp | 23 | ||||
| -rwxr-xr-x | src/phdr-unwrap.cpp | 12 |
12 files changed, 128 insertions, 44 deletions
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<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; } 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<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; } @@ -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; } 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<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; diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 8afa8bc..b7e6252 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; @@ -58,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; } @@ -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; diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index e7fbff3..6241d15 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -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 ) @@ -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() ) 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/MXF.cpp b/src/MXF.cpp index 5cab95e..83954f7 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -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)); @@ -1231,6 +1231,25 @@ ASDCP::MXF::OPAtomIndexFooter::GetMDObjectsByType(const byte_t* ObjectID, std::l } // +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 { @@ -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&); 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 48cfe93..64a399a 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(); @@ -456,8 +460,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(); @@ -669,7 +675,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 0c00ea9..be62110 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(); |
