summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hurst <jhurst@cinecert.com>2021-01-12 12:46:52 -0800
committerJohn Hurst <jhurst@cinecert.com>2021-01-12 12:46:52 -0800
commitf69df80edc00a138f50fd527706c78617342dcdd (patch)
tree8797cf6a3afc7fca45296d753b2033d74558044f /src
parent70d6b24694d5d243d5e09cecd34097180a4f2d62 (diff)
parent8400c964b7852fd5be2b23640bf665cf69d85593 (diff)
Merge branch 'master' into sha1_builtin
Diffstat (limited to 'src')
-rw-r--r--src/AS_02_TimedText.cpp8
-rw-r--r--src/AS_DCP_ATMOS.cpp7
-rw-r--r--src/AS_DCP_DCData.cpp14
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp7
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp35
-rwxr-xr-xsrc/AS_DCP_PCM.cpp14
-rw-r--r--src/AS_DCP_TimedText.cpp8
-rwxr-xr-xsrc/MXF.cpp21
-rwxr-xr-xsrc/MXF.h1
-rw-r--r--src/as-02-info.cpp22
-rwxr-xr-xsrc/as-02-unwrap.cpp23
-rwxr-xr-xsrc/phdr-unwrap.cpp12
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
{
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<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();