From 1639efe792ff4ce5c74ba5adc6aba81647b3c0c5 Mon Sep 17 00:00:00 2001 From: jhurst Date: Mon, 10 Feb 2020 09:19:05 -0800 Subject: [PATCH] Added support for DisplayType, IntrinsicPictureResolution, ZPositionInUse properties --- src/MDD.cpp | 13 +++++++++++-- src/MDD.h | 3 +++ src/MXFTypes.cpp | 6 +++--- src/MXFTypes.h | 2 +- src/Metadata.cpp | 27 +++++++++++++++++++++++++++ src/Metadata.h | 7 +++++-- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/MDD.cpp b/src/MDD.cpp index 06d0fde..6db1bec 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -1627,9 +1627,18 @@ 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 + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, 0x0d, 0x0f, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00 }, - {0}, false, "AudioChannelSLVS" }, + {0}, false, "AudioChannelSLVS" }, // 525 + { { 0x06, 0x0e, 0x2b, 0x34, 01, 0x01, 0x01, 0x0e, + 0x06, 0x01, 0x01, 0x02, 04, 0x00, 0x00, 0x00 }, + {0}, false, "TimedTextDescriptor_DisplayType" }, // 526 + { { 0x06, 0x0e, 0x2b, 0x34, 01, 0x01, 0x01, 0x0e, + 0x06, 0x01, 0x01, 0x02, 05, 0x00, 0x00, 0x00 }, + {0}, false, "TimedTextDescriptor_IntrinsicPictureResolution" }, // 527 + { { 0x06, 0x0e, 0x2b, 0x34, 01, 0x01, 0x01, 0x0e, + 06, 0x01, 0x01, 0x02, 06, 0x00, 0x00, 0x00 }, + {0}, false, "TimedTextDescriptor_ZPositionInUse" }, // 528 { {0}, {0}, false, 0 }, }; diff --git a/src/MDD.h b/src/MDD.h index d704217..4e3dcaf 100755 --- a/src/MDD.h +++ b/src/MDD.h @@ -561,6 +561,9 @@ namespace ASDCP { MDD_HTJ2KPictureCodingScheme, // 523 MDD_HTJ2KPictureCodingSchemeGeneric, // 524 MDD_AudioChannelSLVS, // 525 + MDD_TimedTextDescriptor_DisplayType, // 526 + MDD_TimedTextDescriptor_IntrinsicPictureResolution, // 527 + MDD_TimedTextDescriptor_ZPositionInUse, // 528 MDD_Max }; // enum MDD_t diff --git a/src/MXFTypes.cpp b/src/MXFTypes.cpp index ec3ac2f..72338bb 100755 --- a/src/MXFTypes.cpp +++ b/src/MXFTypes.cpp @@ -777,7 +777,7 @@ ASDCP::MXF::Raw::EncodeString(char* str_buf, ui32_t buf_len) const // bool -ASDCP::MXF::J2KExtendedCapabilities::Archive(Kumu::MemIOWriter* Writer) const { +ASDCP::MXF::J2KExtendedCapabilitiesType::Archive(Kumu::MemIOWriter* Writer) const { if ( ! Writer->WriteUi32BE(Pcap) ) { return false; @@ -793,7 +793,7 @@ ASDCP::MXF::J2KExtendedCapabilities::Archive(Kumu::MemIOWriter* Writer) const { // bool -ASDCP::MXF::J2KExtendedCapabilities::Unarchive(Kumu::MemIOReader* Reader) { +ASDCP::MXF::J2KExtendedCapabilitiesType::Unarchive(Kumu::MemIOReader* Reader) { if ( ! Reader->ReadUi32BE(&Pcap) ) { return false; @@ -809,7 +809,7 @@ ASDCP::MXF::J2KExtendedCapabilities::Unarchive(Kumu::MemIOReader* Reader) { // const char* -ASDCP::MXF::J2KExtendedCapabilities::EncodeString(char* str_buf, ui32_t buf_len) const +ASDCP::MXF::J2KExtendedCapabilitiesType::EncodeString(char* str_buf, ui32_t buf_len) const { const int str_len = ( sizeof(ui16_t) + 1 ) * JP2K::MaxCapabilities; diff --git a/src/MXFTypes.h b/src/MXFTypes.h index eb8b3df..baf27c4 100755 --- a/src/MXFTypes.h +++ b/src/MXFTypes.h @@ -690,7 +690,7 @@ namespace ASDCP }; // - class J2KExtendedCapabilities : public Kumu::IArchive + class J2KExtendedCapabilitiesType : public Kumu::IArchive { public: ui32_t Pcap; diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 9b7f95e..adaac11 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -3101,6 +3101,18 @@ TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet) result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList)); RFC5646LanguageTagList.set_has_value( result == RESULT_OK ); } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, DisplayType)); + DisplayType.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, IntrinsicPictureResolution)); + IntrinsicPictureResolution.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(TimedTextDescriptor, ZPositionInUse)); + ZPositionInUse.set_has_value( result == RESULT_OK ); + } return result; } @@ -3114,6 +3126,9 @@ TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI)); if ( ASDCP_SUCCESS(result) && ! RFC5646LanguageTagList.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList)); + if ( ASDCP_SUCCESS(result) && ! DisplayType.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, DisplayType)); + if ( ASDCP_SUCCESS(result) && ! IntrinsicPictureResolution.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, IntrinsicPictureResolution)); + if ( ASDCP_SUCCESS(result) && ! ZPositionInUse.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, ZPositionInUse)); return result; } @@ -3126,6 +3141,9 @@ TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs) UCSEncoding = rhs.UCSEncoding; NamespaceURI = rhs.NamespaceURI; RFC5646LanguageTagList = rhs.RFC5646LanguageTagList; + DisplayType = rhs.DisplayType; + IntrinsicPictureResolution = rhs.IntrinsicPictureResolution; + ZPositionInUse = rhs.ZPositionInUse; } // @@ -3145,6 +3163,15 @@ TimedTextDescriptor::Dump(FILE* stream) if ( ! RFC5646LanguageTagList.empty() ) { fprintf(stream, " %22s = %s\n", "RFC5646LanguageTagList", RFC5646LanguageTagList.get().EncodeString(identbuf, IdentBufferLen)); } + if ( ! DisplayType.empty() ) { + fprintf(stream, " %22s = %s\n", "DisplayType", DisplayType.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! IntrinsicPictureResolution.empty() ) { + fprintf(stream, " %22s = %s\n", "IntrinsicPictureResolution", IntrinsicPictureResolution.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! ZPositionInUse.empty() ) { + fprintf(stream, " %22s = %d\n", "ZPositionInUse", ZPositionInUse.get()); + } } // diff --git a/src/Metadata.h b/src/Metadata.h index 03b3169..c624784 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -571,7 +571,7 @@ namespace ASDCP optional_property CodingStyleDefault; optional_property QuantizationDefault; optional_property J2CLayout; - optional_property J2KExtendedCapabilities; + optional_property J2KExtendedCapabilities; optional_property > J2KProfile; optional_property > J2KCorrespondingProfile; @@ -810,6 +810,9 @@ namespace ASDCP UTF16String UCSEncoding; UTF16String NamespaceURI; optional_property RFC5646LanguageTagList; + optional_property DisplayType; + optional_property IntrinsicPictureResolution; + optional_property ZPositionInUse; TimedTextDescriptor(const Dictionary*& d); TimedTextDescriptor(const TimedTextDescriptor& rhs); @@ -872,7 +875,7 @@ namespace ASDCP virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&); }; - // 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 { ContainerConstraintsSubDescriptor(); -- 2.30.2