From 30d00641031cd62e51b45db835a8465eddea5405 Mon Sep 17 00:00:00 2001 From: jhurst Date: Tue, 2 Jul 2013 17:16:27 +0000 Subject: [PATCH] more properties! --- src/AS_DCP_JP2K.cpp | 20 ------------- src/MDD.cpp | 51 +++++++++++++++++++++++++++++++++ src/MDD.h | 18 +++++++++++- src/Metadata.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++- src/Metadata.h | 8 ++++++ src/as-02-wrap.cpp | 1 + 6 files changed, 146 insertions(+), 22 deletions(-) diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index cf30869..b2f2eaf 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -221,16 +221,6 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc, EssenceDescriptor->StoredHeight = PDesc.StoredHeight; EssenceDescriptor->AspectRatio = PDesc.AspectRatio; - // if ( m_Info.LabelSetType == LS_MXF_SMPTE ) - // { - // PictureEssenceCoding UL = - // Video Line Map ui32_t[VideoLineMapSize] = { 2, 4, 0, 0 } - // CaptureGamma UL = - // ComponentMaxRef ui32_t = 4095 - // ComponentMinRef ui32_t = 0 - // PixelLayout byte_t[PixelLayoutSize] = s_PixelLayoutXYZ - // } - if ( PDesc.StoredWidth < 2049 ) { EssenceDescriptor->PictureEssenceCoding.Set(dict.ul(MDD_JP2KEssenceCompression_2K)); @@ -352,16 +342,6 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc, EssenceDescriptor->StoredHeight = PDesc.StoredHeight; EssenceDescriptor->AspectRatio = PDesc.AspectRatio; - // if ( m_Info.LabelSetType == LS_MXF_SMPTE ) - // { - // PictureEssenceCoding UL = - // Video Line Map ui32_t[VideoLineMapSize] = { 2, 4, 0, 0 } - // CaptureGamma UL = - // ComponentMaxRef ui32_t = 4095 - // ComponentMinRef ui32_t = 0 - // PixelLayout byte_t[PixelLayoutSize] = s_PixelLayoutXYZ - // } - if ( PDesc.StoredWidth < 2049 ) { EssenceDescriptor->PictureEssenceCoding.Set(dict.ul(MDD_JP2KEssenceCompression_2K)); diff --git a/src/MDD.cpp b/src/MDD.cpp index 81dc51a..fa88016 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -1094,6 +1094,57 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 352 0x04, 0x01, 0x02, 0x01, 0x01, 0x06, 0x01, 0x00 }, {0}, false, "GenericPictureEssenceDescriptor_ColorPrimaries" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 353 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x11 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_1" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 354 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x12 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_2" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 355 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x13 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_3" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 356 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x14 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_4" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 357 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x15 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_5" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 358 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x16 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_6" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 359 + 0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x01, 0x17 }, + {0}, false, "JP2KEssenceCompression_BroadcastProfile_7" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 360 + 0x04, 0x02, 0x01, 0x01, 0x06, 0x00, 0x00, 0x00 }, + {0}, false, "WaveAudioDescriptor_ReferenceImageEditRate" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 361 + 0x04, 0x02, 0x01, 0x01, 0x06, 0x00, 0x00, 0x00 }, + {0}, false, "WaveAudioDescriptor_ReferenceAudioAlignmentLevel" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 362 + 0x04, 0x01, 0x03, 0x02, 0x0b, 0x00, 0x00, 0x00 }, + {0}, false, "GenericPictureEssenceDescriptor_AlternativeCenterCuts" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 363 + 0x04, 0x01, 0x05, 0x01, 0x13, 0x00, 0x00, 0x00 }, + {0x32, 0x05}, true, "GenericPictureEssenceDescriptor_ActiveHeight" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 364 + 0x04, 0x01, 0x05, 0x01, 0x14, 0x00, 0x00, 0x00 }, + {0x32, 0x04}, true, "GenericPictureEssenceDescriptor_ActiveWidth" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 365 + 0x04, 0x01, 0x05, 0x01, 0x15, 0x00, 0x00, 0x00 }, + {0x32, 0x06}, true, "GenericPictureEssenceDescriptor_ActiveXOffset" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 366 + 0x04, 0x01, 0x05, 0x01, 0x16, 0x00, 0x00, 0x00 }, + {0x32, 0x07}, true, "GenericPictureEssenceDescriptor_ActiveYOffset" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, // 367 + 0x03, 0x01, 0x01, 0x02, 0x02, 0x16, 0x00, 0x00 }, + {0}, false, "TimedTextDescriptor_RFC5646LanguageTagList" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 368 + 0x04, 0x01, 0x01, 0x01, 0x00, 0x04, 0x01, 0x00 }, + {0}, false, "AlternativeCenterCuts_4x3" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 369 + 0x04, 0x01, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00 }, + {0}, false, "AlternativeCenterCuts_14x9" }, { {0}, {0}, false, 0 } }; diff --git a/src/MDD.h b/src/MDD.h index 81a1411..bb8db7a 100755 --- a/src/MDD.h +++ b/src/MDD.h @@ -388,8 +388,24 @@ namespace ASDCP { MDD_MaterialPackage_PackageMarker, // 350 MDD_GenericPictureEssenceDescriptor_CodingEquations, // 351 MDD_GenericPictureEssenceDescriptor_ColorPrimaries, // 352 + MDD_JP2KEssenceCompression_BroadcastProfile_1, // 353 + MDD_JP2KEssenceCompression_BroadcastProfile_2, // 354 + MDD_JP2KEssenceCompression_BroadcastProfile_3, // 355 + MDD_JP2KEssenceCompression_BroadcastProfile_4, // 356 + MDD_JP2KEssenceCompression_BroadcastProfile_5, // 357 + MDD_JP2KEssenceCompression_BroadcastProfile_6, // 358 + MDD_JP2KEssenceCompression_BroadcastProfile_7, // 359 + MDD_WaveAudioDescriptor_ReferenceImageEditRate, // 360 + MDD_WaveAudioDescriptor_ReferenceAudioAlignmentLevel, // 361 + MDD_GenericPictureEssenceDescriptor_AlternativeCenterCuts, // 362 + MDD_GenericPictureEssenceDescriptor_ActiveHeight, // 363 + MDD_GenericPictureEssenceDescriptor_ActiveWidth, // 364 + MDD_GenericPictureEssenceDescriptor_ActiveXOffset, // 365 + MDD_GenericPictureEssenceDescriptor_ActiveYOffset, // 366 + MDD_TimedTextDescriptor_RFC5646LanguageTagList, // 367 + MDD_AlternativeCenterCuts_4x3, // 368 + MDD_AlternativeCenterCuts_14x9, // 369 MDD_Max - }; // enum MDD_t // diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 733ed34..d73fe69 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -1489,6 +1489,14 @@ WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet) result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment)); ChannelAssignment.set_has_value( result == RESULT_OK ); } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ReferenceImageEditRate)); + ReferenceImageEditRate.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ReferenceAudioAlignmentLevel)); + ReferenceAudioAlignmentLevel.set_has_value( result == RESULT_OK ); + } return result; } @@ -1502,6 +1510,8 @@ WaveAudioDescriptor::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) && ! SequenceOffset.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, SequenceOffset)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(WaveAudioDescriptor, AvgBps)); if ( ASDCP_SUCCESS(result) && ! ChannelAssignment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment)); + if ( ASDCP_SUCCESS(result) && ! ReferenceImageEditRate.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ReferenceImageEditRate)); + if ( ASDCP_SUCCESS(result) && ! ReferenceAudioAlignmentLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ReferenceAudioAlignmentLevel)); return result; } @@ -1514,6 +1524,8 @@ WaveAudioDescriptor::Copy(const WaveAudioDescriptor& rhs) SequenceOffset = rhs.SequenceOffset; AvgBps = rhs.AvgBps; ChannelAssignment = rhs.ChannelAssignment; + ReferenceImageEditRate = rhs.ReferenceImageEditRate; + ReferenceAudioAlignmentLevel = rhs.ReferenceAudioAlignmentLevel; } // @@ -1535,6 +1547,12 @@ WaveAudioDescriptor::Dump(FILE* stream) if ( ! ChannelAssignment.empty() ) { fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.get().EncodeString(identbuf, IdentBufferLen)); } + if ( ! ReferenceImageEditRate.empty() ) { + fprintf(stream, " %22s = %s\n", "ReferenceImageEditRate", ReferenceImageEditRate.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! ReferenceAudioAlignmentLevel.empty() ) { + fprintf(stream, " %22s = %d\n", "ReferenceAudioAlignmentLevel", ReferenceAudioAlignmentLevel.get()); + } } // @@ -1556,7 +1574,7 @@ WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), SignalStandard(0), SampledWidth(0), SampledXOffset(0), DisplayHeight(0), DisplayXOffset(0), DisplayF2Offset(0), AlphaTransparency(0), ImageAlignmentOffset(0), ImageEndOffset(0) +GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), SignalStandard(0), SampledWidth(0), SampledXOffset(0), DisplayHeight(0), DisplayXOffset(0), DisplayF2Offset(0), AlphaTransparency(0), ImageAlignmentOffset(0), ImageEndOffset(0), ActiveWidth(0), ActiveXOffset(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor); @@ -1661,6 +1679,23 @@ GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries)); ColorPrimaries.set_has_value( result == RESULT_OK ); } + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AlternativeCenterCuts)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth)); + ActiveWidth.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight)); + ActiveHeight.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset)); + ActiveXOffset.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset)); + ActiveYOffset.set_has_value( result == RESULT_OK ); + } return result; } @@ -1695,6 +1730,11 @@ GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding)); if ( ASDCP_SUCCESS(result) && ! CodingEquations.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations)); if ( ASDCP_SUCCESS(result) && ! ColorPrimaries.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AlternativeCenterCuts)); + if ( ASDCP_SUCCESS(result) && ! ActiveWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveWidth)); + if ( ASDCP_SUCCESS(result) && ! ActiveHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveHeight)); + if ( ASDCP_SUCCESS(result) && ! ActiveXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveXOffset)); + if ( ASDCP_SUCCESS(result) && ! ActiveYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveYOffset)); return result; } @@ -1728,6 +1768,11 @@ GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs PictureEssenceCoding = rhs.PictureEssenceCoding; CodingEquations = rhs.CodingEquations; ColorPrimaries = rhs.ColorPrimaries; + AlternativeCenterCuts = rhs.AlternativeCenterCuts; + ActiveWidth = rhs.ActiveWidth; + ActiveHeight = rhs.ActiveHeight; + ActiveXOffset = rhs.ActiveXOffset; + ActiveYOffset = rhs.ActiveYOffset; } // @@ -1806,6 +1851,20 @@ GenericPictureEssenceDescriptor::Dump(FILE* stream) if ( ! ColorPrimaries.empty() ) { fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen)); } + fprintf(stream, " %22s:\n", "AlternativeCenterCuts"); + AlternativeCenterCuts.Dump(stream); + if ( ! ActiveWidth.empty() ) { + fprintf(stream, " %22s = %d\n", "ActiveWidth", ActiveWidth.get()); + } + if ( ! ActiveHeight.empty() ) { + fprintf(stream, " %22s = %d\n", "ActiveHeight", ActiveHeight.get()); + } + if ( ! ActiveXOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "ActiveXOffset", ActiveXOffset.get()); + } + if ( ! ActiveYOffset.empty() ) { + fprintf(stream, " %22s = %d\n", "ActiveYOffset", ActiveYOffset.get()); + } } // @@ -2748,6 +2807,10 @@ TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, ResourceID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, UCSEncoding)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(TimedTextDescriptor, NamespaceURI)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList)); + RFC5646LanguageTagList.set_has_value( result == RESULT_OK ); + } return result; } @@ -2760,6 +2823,7 @@ TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, ResourceID)); 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)); return result; } @@ -2771,6 +2835,7 @@ TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs) ResourceID = rhs.ResourceID; UCSEncoding = rhs.UCSEncoding; NamespaceURI = rhs.NamespaceURI; + RFC5646LanguageTagList = rhs.RFC5646LanguageTagList; } // @@ -2787,6 +2852,9 @@ TimedTextDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "UCSEncoding", UCSEncoding.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "NamespaceURI", NamespaceURI.EncodeString(identbuf, IdentBufferLen)); + if ( ! RFC5646LanguageTagList.empty() ) { + fprintf(stream, " %22s = %s\n", "RFC5646LanguageTagList", RFC5646LanguageTagList.get().EncodeString(identbuf, IdentBufferLen)); + } } // diff --git a/src/Metadata.h b/src/Metadata.h index 5121989..5c282b3 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -448,6 +448,8 @@ namespace ASDCP optional_property SequenceOffset; ui32_t AvgBps; optional_property