diff options
| author | John Hurst <jhurst@cinecert.com> | 2019-12-30 14:03:32 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-30 14:03:32 -0800 |
| commit | 39d533e10e9f5248c557caa0777c8c10ed5d737c (patch) | |
| tree | 6e03793692f45418ea89c55edcb95ce89d9aad5b /src | |
| parent | 5dd260660cfa14ece62365139962dfb4cbbafb10 (diff) | |
| parent | a67f55782d4758355190fe3f14ac6159b9d79e1e (diff) | |
Merge branch 'master' into htj2c
Diffstat (limited to 'src')
| -rw-r--r-- | src/AS_02_ACES.cpp | 5 | ||||
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 1 | ||||
| -rwxr-xr-x | src/JP2K_Sequence_Parser.cpp | 2 | ||||
| -rwxr-xr-x | src/KM_util.h | 12 | ||||
| -rw-r--r-- | src/MDD.cpp | 8 | ||||
| -rwxr-xr-x | src/MDD.h | 3 | ||||
| -rwxr-xr-x | src/MXF.cpp | 1 | ||||
| -rwxr-xr-x | src/MXF.h | 2 | ||||
| -rwxr-xr-x | src/Metadata.cpp | 26 | ||||
| -rwxr-xr-x | src/Metadata.h | 18 | ||||
| -rwxr-xr-x | src/as-02-wrap.cpp | 3 |
11 files changed, 52 insertions, 29 deletions
diff --git a/src/AS_02_ACES.cpp b/src/AS_02_ACES.cpp index 040e059..9a847cc 100644 --- a/src/AS_02_ACES.cpp +++ b/src/AS_02_ACES.cpp @@ -559,7 +559,10 @@ AS_02::Result_t AS_02::ACES::MXFWriter::h__Writer::OpenWrite(const std::string & ASDCP::MXF::InterchangeObject_list_t::iterator i; for ( i = essence_sub_descriptor_list.begin(); i != essence_sub_descriptor_list.end(); ++i ) { - if ( ( (*i)->GetUL() != UL(m_Dict->ul(MDD_ACESPictureSubDescriptor)) ) && ( (*i)->GetUL() != UL(m_Dict->ul(MDD_TargetFrameSubDescriptor)) ) ) + if ( ( (*i)->GetUL() != UL(m_Dict->ul(MDD_ACESPictureSubDescriptor)) ) + && ( (*i)->GetUL() != UL(m_Dict->ul(MDD_TargetFrameSubDescriptor)) ) + && ( (*i)->GetUL() != UL(m_Dict->ul(MDD_ContainerConstraintsSubDescriptor)) ) + ) { DefaultLogSink().Error("Essence sub-descriptor is not an ACESPictureSubDescriptor or a TargetFrameSubDescriptor.\n"); (*i)->Dump(); diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp index d3c0fa8..0cc3748 100644 --- a/src/AS_DCP_TimedText.cpp +++ b/src/AS_DCP_TimedText.cpp @@ -160,6 +160,7 @@ ASDCP::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedText::TimedTe memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen); TDesc.NamespaceName = TDescObj->NamespaceURI; TDesc.EncodingName = TDescObj->UCSEncoding; + TDesc.ResourceList.clear(); Array<UUID>::const_iterator sdi = TDescObj->SubDescriptors.begin(); TimedTextResourceSubDescriptor* DescObject = 0; diff --git a/src/JP2K_Sequence_Parser.cpp b/src/JP2K_Sequence_Parser.cpp index cb73edd..c561033 100755 --- a/src/JP2K_Sequence_Parser.cpp +++ b/src/JP2K_Sequence_Parser.cpp @@ -229,7 +229,7 @@ operator==(const ASDCP::JP2K::CodingStyleDefault_t& lhs, const ASDCP::JP2K::Codi for ( ui32_t i = 0; i < sizeof(ui16_t); i++ ) { - if ( lhs.SGcod.NumberOfLayers[i] != lhs.SGcod.NumberOfLayers[i] ) + if ( lhs.SGcod.NumberOfLayers[i] != rhs.SGcod.NumberOfLayers[i] ) return false; } diff --git a/src/KM_util.h b/src/KM_util.h index 8a71ef7..f6a8935 100755 --- a/src/KM_util.h +++ b/src/KM_util.h @@ -334,6 +334,18 @@ namespace Kumu return false; } + inline bool operator>(const Identifier& rhs) const { + ui32_t test_size = xmin(rhs.Size(), SIZE); + + for ( ui32_t i = 0; i < test_size; i++ ) + { + if ( m_Value[i] != rhs.m_Value[i] ) + return m_Value[i] > rhs.m_Value[i]; + } + + return false; + } + inline bool operator==(const Identifier& rhs) const { if ( rhs.Size() != SIZE ) return false; return ( memcmp(m_Value, rhs.m_Value, SIZE) == 0 ); diff --git a/src/MDD.cpp b/src/MDD.cpp index 71aefca..06d0fde 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -1156,12 +1156,12 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { {0}, false, "DBOXMotionCodeSecondaryStream" }, // 379-2, Sec. 7: Encoders that conform to this specification shall add a - // ContainerConstraintSubDescriptor to the GenericDescriptor::SubDescriptors + // ContainerConstraintsSubDescriptor to the GenericDescriptor::SubDescriptors // property of the top-most File Descriptor that describes the essence // container. { { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 373 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x67, 0x00 }, - {0}, false, "ContainerConstraintSubDescriptor" }, + {0}, false, "ContainerConstraintsSubDescriptor" }, // protype for high dynamic range, values recorded in Dolby registry { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x05, // 374 @@ -1627,7 +1627,9 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0D, 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x08, 0x01 }, {0}, false, "HTJ2KPictureCodingSchemeGeneric" }, // 524 - + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 525 + 0x0d, 0x0f, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00 }, + {0}, false, "AudioChannelSLVS" }, { {0}, {0}, false, 0 }, }; @@ -408,7 +408,7 @@ namespace ASDCP { MDD_WAVWrappingClip, // 370 MDD_DBOXMotionCodePrimaryStream, // 371 MDD_DBOXMotionCodeSecondaryStream, // 372 - MDD_ContainerConstraintSubDescriptor, // 373 + MDD_ContainerConstraintsSubDescriptor, // 373 MDD_PHDRImageMetadataWrappingFrame, // 374 MDD_PHDRImageMetadataItem, // 375 MDD_PHDRMetadataTrackSubDescriptor, // 376 @@ -560,6 +560,7 @@ namespace ASDCP { MDD_J2KExtendedCapabilities, // 522 MDD_HTJ2KPictureCodingScheme, // 523 MDD_HTJ2KPictureCodingSchemeGeneric, // 524 + MDD_AudioChannelSLVS, // 525 MDD_Max }; // enum MDD_t diff --git a/src/MXF.cpp b/src/MXF.cpp index b49fb83..2185af9 100755 --- a/src/MXF.cpp +++ b/src/MXF.cpp @@ -1760,6 +1760,7 @@ ASDCP::MXF::ASDCP_MCAConfigParser::ASDCP_MCAConfigParser(const Dictionary*& d) : m_LabelMap.insert(pair("FSKSync", label_traits("FSK Sync" , true, m_Dict->ul(MDD_DCAudioChannel_FSKSyncSignalChannel)))); m_LabelMap.insert(pair("DBOX", label_traits("D-BOX Motion Code Primary Stream" , false, m_Dict->ul(MDD_DBOXMotionCodePrimaryStream)))); m_LabelMap.insert(pair("DBOX2", label_traits("D-BOX Motion Code Secondary Stream", false, m_Dict->ul(MDD_DBOXMotionCodeSecondaryStream)))); + m_LabelMap.insert(pair("SLVS", label_traits("Sign Language Video Stream" , false, m_Dict->ul(MDD_AudioChannelSLVS)))); } // @@ -385,7 +385,7 @@ namespace ASDCP // std::list<ui32_t> SliceOffset; // Array<Rational> PosTable; - IndexEntry() : TemporalOffset(0), KeyFrameOffset(0), Flags(0), StreamOffset(0) {} + IndexEntry() : TemporalOffset(0), KeyFrameOffset(0), Flags(0x80), StreamOffset(0) {} IndexEntry(i8_t t_ofst, i8_t k_ofst, ui8_t flags, ui64_t s_ofst) : TemporalOffset(t_ofst), KeyFrameOffset(k_ofst), Flags(flags), StreamOffset(s_ofst) {} inline bool HasValue() const { return true; } diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 9fce0b3..9b7f95e 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -70,7 +70,7 @@ static InterchangeObject* GenericDataEssenceDescriptor_Factory(const Dictionary* static InterchangeObject* TimedTextDescriptor_Factory(const Dictionary*& Dict) { return new TimedTextDescriptor(Dict); } static InterchangeObject* TimedTextResourceSubDescriptor_Factory(const Dictionary*& Dict) { return new TimedTextResourceSubDescriptor(Dict); } static InterchangeObject* StereoscopicPictureSubDescriptor_Factory(const Dictionary*& Dict) { return new StereoscopicPictureSubDescriptor(Dict); } -static InterchangeObject* ContainerConstraintSubDescriptor_Factory(const Dictionary*& Dict) { return new ContainerConstraintSubDescriptor(Dict); } +static InterchangeObject* ContainerConstraintsSubDescriptor_Factory(const Dictionary*& Dict) { return new ContainerConstraintsSubDescriptor(Dict); } static InterchangeObject* NetworkLocator_Factory(const Dictionary*& Dict) { return new NetworkLocator(Dict); } static InterchangeObject* MCALabelSubDescriptor_Factory(const Dictionary*& Dict) { return new MCALabelSubDescriptor(Dict); } static InterchangeObject* AudioChannelLabelSubDescriptor_Factory(const Dictionary*& Dict) { return new AudioChannelLabelSubDescriptor(Dict); } @@ -123,7 +123,7 @@ ASDCP::MXF::Metadata_InitTypes(const Dictionary*& Dict) SetObjectFactory(Dict->ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory); SetObjectFactory(Dict->ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory); SetObjectFactory(Dict->ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory); - SetObjectFactory(Dict->ul(MDD_ContainerConstraintSubDescriptor), ContainerConstraintSubDescriptor_Factory); + SetObjectFactory(Dict->ul(MDD_ContainerConstraintsSubDescriptor), ContainerConstraintsSubDescriptor_Factory); SetObjectFactory(Dict->ul(MDD_NetworkLocator), NetworkLocator_Factory); SetObjectFactory(Dict->ul(MDD_MCALabelSubDescriptor), MCALabelSubDescriptor_Factory); SetObjectFactory(Dict->ul(MDD_AudioChannelLabelSubDescriptor), AudioChannelLabelSubDescriptor_Factory); @@ -3316,27 +3316,27 @@ StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) } //------------------------------------------------------------------------------------------ -// ContainerConstraintSubDescriptor +// ContainerConstraintsSubDescriptor // -ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) +ContainerConstraintsSubDescriptor::ContainerConstraintsSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) { assert(m_Dict); - m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor); + m_UL = m_Dict->ul(MDD_ContainerConstraintsSubDescriptor); } -ContainerConstraintSubDescriptor::ContainerConstraintSubDescriptor(const ContainerConstraintSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) +ContainerConstraintsSubDescriptor::ContainerConstraintsSubDescriptor(const ContainerConstraintsSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { assert(m_Dict); - m_UL = m_Dict->ul(MDD_ContainerConstraintSubDescriptor); + m_UL = m_Dict->ul(MDD_ContainerConstraintsSubDescriptor); Copy(rhs); } // ASDCP::Result_t -ContainerConstraintSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) +ContainerConstraintsSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); @@ -3345,7 +3345,7 @@ ContainerConstraintSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) // ASDCP::Result_t -ContainerConstraintSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +ContainerConstraintsSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) { assert(m_Dict); Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); @@ -3354,14 +3354,14 @@ ContainerConstraintSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) // void -ContainerConstraintSubDescriptor::Copy(const ContainerConstraintSubDescriptor& rhs) +ContainerConstraintsSubDescriptor::Copy(const ContainerConstraintsSubDescriptor& rhs) { InterchangeObject::Copy(rhs); } // void -ContainerConstraintSubDescriptor::Dump(FILE* stream) +ContainerConstraintsSubDescriptor::Dump(FILE* stream) { char identbuf[IdentBufferLen]; *identbuf = 0; @@ -3374,14 +3374,14 @@ ContainerConstraintSubDescriptor::Dump(FILE* stream) // ASDCP::Result_t -ContainerConstraintSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +ContainerConstraintsSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) { return InterchangeObject::InitFromBuffer(p, l); } // ASDCP::Result_t -ContainerConstraintSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +ContainerConstraintsSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) { return InterchangeObject::WriteToBuffer(Buffer); } diff --git a/src/Metadata.h b/src/Metadata.h index 962b437..03b3169 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -872,21 +872,21 @@ namespace ASDCP virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&); }; - // - class ContainerConstraintSubDescriptor : public InterchangeObject + // A ContainerConstraintsSubDescriptor is required to be present in the top level File Descriptor for the Constrained Generic Container per ST 379-2 + class ContainerConstraintsSubDescriptor : public InterchangeObject { - ContainerConstraintSubDescriptor(); + ContainerConstraintsSubDescriptor(); public: const Dictionary*& m_Dict; - ContainerConstraintSubDescriptor(const Dictionary*& d); - ContainerConstraintSubDescriptor(const ContainerConstraintSubDescriptor& rhs); - virtual ~ContainerConstraintSubDescriptor() {} + ContainerConstraintsSubDescriptor(const Dictionary*& d); + ContainerConstraintsSubDescriptor(const ContainerConstraintsSubDescriptor& rhs); + virtual ~ContainerConstraintsSubDescriptor() {} - const ContainerConstraintSubDescriptor& operator=(const ContainerConstraintSubDescriptor& rhs) { Copy(rhs); return *this; } - virtual void Copy(const ContainerConstraintSubDescriptor& rhs); - virtual const char* HasName() { return "ContainerConstraintSubDescriptor"; } + const ContainerConstraintsSubDescriptor& operator=(const ContainerConstraintsSubDescriptor& rhs) { Copy(rhs); return *this; } + virtual void Copy(const ContainerConstraintsSubDescriptor& rhs); + virtual const char* HasName() { return "ContainerConstraintsSubDescriptor"; } virtual Result_t InitFromTLVSet(TLVReader& TLVSet); virtual Result_t WriteToTLVSet(TLVWriter& TLVSet); virtual void Dump(FILE* = 0); diff --git a/src/as-02-wrap.cpp b/src/as-02-wrap.cpp index a498474..db76e19 100755 --- a/src/as-02-wrap.cpp +++ b/src/as-02-wrap.cpp @@ -1240,6 +1240,9 @@ write_ACES_file(CommandOptions& Options) ASDCP::MXF::ACESPictureSubDescriptor* aces_picture_subdescriptor = new ASDCP::MXF::ACESPictureSubDescriptor(g_dict); Kumu::GenRandomValue(aces_picture_subdescriptor->InstanceUID); result = AS_02::ACES::ACES_PDesc_to_MD(PDesc, *g_dict, *tmp_dscr); + ASDCP::MXF::ContainerConstraintsSubDescriptor* gc_subdescriptor = new ASDCP::MXF::ContainerConstraintsSubDescriptor(g_dict); + Kumu::GenRandomValue(gc_subdescriptor->InstanceUID); + essence_sub_descriptors.push_back(gc_subdescriptor); if (ASDCP_SUCCESS(result)) { |
