From 2f6f8dbb08b63351bfa25d3a008a41dec78f7dde Mon Sep 17 00:00:00 2001 From: jhurst Date: Tue, 2 Jul 2013 15:35:41 +0000 Subject: [PATCH] finished optional properties --- src/AS_DCP_JP2K.cpp | 60 +++++++++++------------ src/MDD.cpp | 5 -- src/MXF.h | 2 +- src/Metadata.cpp | 113 +++++++++++++++++++++++++++++++++++--------- src/Metadata.h | 16 +++++-- src/asdcp-info.cpp | 2 +- src/asdcp-test.cpp | 2 +- 7 files changed, 135 insertions(+), 65 deletions(-) diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index b8400e1..cf30869 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -260,20 +260,20 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc, memcpy(tmp_buffer + 8, &PDesc.ImageComponents, sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents); const ui32_t pcomp_size = (sizeof(int) * 2) + (sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents); - memcpy(EssenceSubDescriptor->PictureComponentSizing.Data(), tmp_buffer, pcomp_size); - EssenceSubDescriptor->PictureComponentSizing.Length(pcomp_size); + memcpy(EssenceSubDescriptor->PictureComponentSizing.get().Data(), tmp_buffer, pcomp_size); + EssenceSubDescriptor->PictureComponentSizing.get().Length(pcomp_size); ui32_t precinct_set_size = 0, i; for ( i = 0; PDesc.CodingStyleDefault.SPcod.PrecinctSize[i] != 0 && i < MaxPrecincts; i++ ) precinct_set_size++; ui32_t csd_size = sizeof(CodingStyleDefault_t) - MaxPrecincts + precinct_set_size; - memcpy(EssenceSubDescriptor->CodingStyleDefault.Data(), &PDesc.CodingStyleDefault, csd_size); - EssenceSubDescriptor->CodingStyleDefault.Length(csd_size); + memcpy(EssenceSubDescriptor->CodingStyleDefault.get().Data(), &PDesc.CodingStyleDefault, csd_size); + EssenceSubDescriptor->CodingStyleDefault.get().Length(csd_size); ui32_t qdflt_size = PDesc.QuantizationDefault.SPqcdLength + 1; - memcpy(EssenceSubDescriptor->QuantizationDefault.Data(), &PDesc.QuantizationDefault, qdflt_size); - EssenceSubDescriptor->QuantizationDefault.Length(qdflt_size); + memcpy(EssenceSubDescriptor->QuantizationDefault.get().Data(), &PDesc.QuantizationDefault, qdflt_size); + EssenceSubDescriptor->QuantizationDefault.get().Length(qdflt_size); return RESULT_OK; } @@ -290,8 +290,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor& EssenceDescrip PDesc.EditRate = EditRate; PDesc.SampleRate = SampleRate; - assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL); - PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.cget()); + assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL); + PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.const_get()); PDesc.StoredWidth = EssenceDescriptor.StoredWidth; PDesc.StoredHeight = EssenceDescriptor.StoredHeight; PDesc.AspectRatio = EssenceDescriptor.AspectRatio; @@ -308,11 +308,11 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor& EssenceDescrip PDesc.Csize = EssenceSubDescriptor.Csize; // PictureComponentSizing - ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.Length(); + ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.const_get().Length(); if ( tmp_size == 17 ) // ( 2 * sizeof(ui32_t) ) + 3 components * 3 byte each { - memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.RoData() + 8, tmp_size - 8); + memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.const_get().RoData() + 8, tmp_size - 8); } else { @@ -322,16 +322,16 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor& EssenceDescrip // CodingStyleDefault memset(&PDesc.CodingStyleDefault, 0, sizeof(CodingStyleDefault_t)); memcpy(&PDesc.CodingStyleDefault, - EssenceSubDescriptor.CodingStyleDefault.RoData(), - EssenceSubDescriptor.CodingStyleDefault.Length()); + EssenceSubDescriptor.CodingStyleDefault.const_get().RoData(), + EssenceSubDescriptor.CodingStyleDefault.const_get().Length()); // QuantizationDefault memset(&PDesc.QuantizationDefault, 0, sizeof(QuantizationDefault_t)); memcpy(&PDesc.QuantizationDefault, - EssenceSubDescriptor.QuantizationDefault.RoData(), - EssenceSubDescriptor.QuantizationDefault.Length()); + EssenceSubDescriptor.QuantizationDefault.const_get().RoData(), + EssenceSubDescriptor.QuantizationDefault.const_get().Length()); - PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.Length() - 1; + PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.const_get().Length() - 1; return RESULT_OK; } @@ -391,20 +391,20 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc, memcpy(tmp_buffer + 8, &PDesc.ImageComponents, sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents); const ui32_t pcomp_size = (sizeof(int) * 2) + (sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents); - memcpy(EssenceSubDescriptor->PictureComponentSizing.Data(), tmp_buffer, pcomp_size); - EssenceSubDescriptor->PictureComponentSizing.Length(pcomp_size); + memcpy(EssenceSubDescriptor->PictureComponentSizing.get().Data(), tmp_buffer, pcomp_size); + EssenceSubDescriptor->PictureComponentSizing.get().Length(pcomp_size); ui32_t precinct_set_size = 0, i; for ( i = 0; PDesc.CodingStyleDefault.SPcod.PrecinctSize[i] != 0 && i < MaxPrecincts; i++ ) precinct_set_size++; ui32_t csd_size = sizeof(CodingStyleDefault_t) - MaxPrecincts + precinct_set_size; - memcpy(EssenceSubDescriptor->CodingStyleDefault.Data(), &PDesc.CodingStyleDefault, csd_size); - EssenceSubDescriptor->CodingStyleDefault.Length(csd_size); + memcpy(EssenceSubDescriptor->CodingStyleDefault.get().Data(), &PDesc.CodingStyleDefault, csd_size); + EssenceSubDescriptor->CodingStyleDefault.get().Length(csd_size); ui32_t qdflt_size = PDesc.QuantizationDefault.SPqcdLength + 1; - memcpy(EssenceSubDescriptor->QuantizationDefault.Data(), &PDesc.QuantizationDefault, qdflt_size); - EssenceSubDescriptor->QuantizationDefault.Length(qdflt_size); + memcpy(EssenceSubDescriptor->QuantizationDefault.get().Data(), &PDesc.QuantizationDefault, qdflt_size); + EssenceSubDescriptor->QuantizationDefault.get().Length(qdflt_size); return RESULT_OK; } @@ -421,8 +421,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor& EssenceDescrip PDesc.EditRate = EditRate; PDesc.SampleRate = SampleRate; - assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL); - PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.cget()); + assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL); + PDesc.ContainerDuration = static_cast(EssenceDescriptor.ContainerDuration.const_get()); PDesc.StoredWidth = EssenceDescriptor.StoredWidth; PDesc.StoredHeight = EssenceDescriptor.StoredHeight; PDesc.AspectRatio = EssenceDescriptor.AspectRatio; @@ -439,11 +439,11 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor& EssenceDescrip PDesc.Csize = EssenceSubDescriptor.Csize; // PictureComponentSizing - ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.Length(); + ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.const_get().Length(); if ( tmp_size == 17 ) // ( 2 * sizeof(ui32_t) ) + 3 components * 3 byte each { - memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.RoData() + 8, tmp_size - 8); + memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.const_get().RoData() + 8, tmp_size - 8); } else { @@ -453,16 +453,16 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor& EssenceDescrip // CodingStyleDefault memset(&PDesc.CodingStyleDefault, 0, sizeof(CodingStyleDefault_t)); memcpy(&PDesc.CodingStyleDefault, - EssenceSubDescriptor.CodingStyleDefault.RoData(), - EssenceSubDescriptor.CodingStyleDefault.Length()); + EssenceSubDescriptor.CodingStyleDefault.const_get().RoData(), + EssenceSubDescriptor.CodingStyleDefault.const_get().Length()); // QuantizationDefault memset(&PDesc.QuantizationDefault, 0, sizeof(QuantizationDefault_t)); memcpy(&PDesc.QuantizationDefault, - EssenceSubDescriptor.QuantizationDefault.RoData(), - EssenceSubDescriptor.QuantizationDefault.Length()); + EssenceSubDescriptor.QuantizationDefault.const_get().RoData(), + EssenceSubDescriptor.QuantizationDefault.const_get().Length()); - PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.Length() - 1; + PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.const_get().Length() - 1; return RESULT_OK; } diff --git a/src/MDD.cpp b/src/MDD.cpp index 069d07e..81dc51a 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -1085,8 +1085,6 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 349 0x03, 0x02, 0x03, 0x20, 0x03, 0x00, 0x00, 0x00 }, {0}, false, "IMFAudioGroup_Dcm" }, - - { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0c, // 350 0x06, 0x01, 0x01, 0x04, 0x02, 0x0f, 0x00, 0x00 }, {0}, false, "MaterialPackage_PackageMarker" }, @@ -1096,9 +1094,6 @@ 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" }, - - - { {0}, {0}, false, 0 } }; diff --git a/src/MXF.h b/src/MXF.h index dc06c7f..4af8993 100755 --- a/src/MXF.h +++ b/src/MXF.h @@ -237,7 +237,7 @@ namespace ASDCP void reset(const PropertyType& rhs) { this->m_has_value = false; } bool empty() const { return ! m_has_value; } PropertyType& get() { return m_property; } - const PropertyType& cget() const { return m_property; } + const PropertyType& const_get() const { return m_property; } }; // base class of all metadata objects diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 04d8392..733ed34 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -1973,9 +1973,18 @@ JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTOsize)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTOsize)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Csize)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing)); + PictureComponentSizing.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault)); + CodingStyleDefault.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault)); + QuantizationDefault.set_has_value( result == RESULT_OK ); + } return result; } @@ -1995,9 +2004,9 @@ JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault)); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault)); + if ( ASDCP_SUCCESS(result) && ! PictureComponentSizing.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing)); + if ( ASDCP_SUCCESS(result) && ! CodingStyleDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault)); + if ( ASDCP_SUCCESS(result) && ! QuantizationDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault)); return result; } @@ -2042,9 +2051,15 @@ JPEG2000PictureSubDescriptor::Dump(FILE* stream) fprintf(stream, " %22s = %d\n", "XTOsize", XTOsize); fprintf(stream, " %22s = %d\n", "YTOsize", YTOsize); fprintf(stream, " %22s = %d\n", "Csize", Csize); - fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.EncodeString(identbuf, IdentBufferLen)); - fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.EncodeString(identbuf, IdentBufferLen)); + if ( ! PictureComponentSizing.empty() ) { + fprintf(stream, " %22s = %s\n", "PictureComponentSizing", PictureComponentSizing.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! CodingStyleDefault.empty() ) { + fprintf(stream, " %22s = %s\n", "CodingStyleDefault", CodingStyleDefault.get().EncodeString(identbuf, IdentBufferLen)); + } + if ( ! QuantizationDefault.empty() ) { + fprintf(stream, " %22s = %s\n", "QuantizationDefault", QuantizationDefault.get().EncodeString(identbuf, IdentBufferLen)); + } } // @@ -2066,7 +2081,7 @@ JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), ColorSiting(0), PaddingBits(0), BlackRefLevel(0), ColorRange(0) +CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ReversedByteOrder(0), AlphaSampleDepth(0), WhiteReflevel(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor); @@ -2086,10 +2101,7 @@ CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) { - result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ComponentDepth)); - ComponentDepth.set_has_value( result == RESULT_OK ); - } + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling)); if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling)); @@ -2132,7 +2144,7 @@ CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet) { assert(m_Dict); Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) && ! ComponentDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ComponentDepth)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling)); if ( ASDCP_SUCCESS(result) && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling)); if ( ASDCP_SUCCESS(result) && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting)); @@ -2173,9 +2185,7 @@ CDCIEssenceDescriptor::Dump(FILE* stream) stream = stderr; GenericPictureEssenceDescriptor::Dump(stream); - if ( ! ComponentDepth.empty() ) { - fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth.get()); - } + fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth); fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling); if ( ! VerticalSubsampling.empty() ) { fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get()); @@ -2222,7 +2232,7 @@ CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) // -MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), ProfileAndLevel(0) +MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), SingleSequence(0), CodedContentType(0), ClosedGOP(0), MaxGOP(0), BitRate(0) { assert(m_Dict); m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor); @@ -2242,11 +2252,38 @@ MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet) { assert(m_Dict); Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, CodedContentType)); + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence)); + SingleSequence.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames)); + ConstantBFrames.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType)); + CodedContentType.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay)); LowDelay.set_has_value( result == RESULT_OK ); } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP)); + ClosedGOP.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP)); + IdenticalGOP.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP)); + MaxGOP.set_has_value( result == RESULT_OK ); + } + if ( ASDCP_SUCCESS(result) ) { + result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount)); + BPictureCount.set_has_value( result == RESULT_OK ); + } if ( ASDCP_SUCCESS(result) ) { result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate)); BitRate.set_has_value( result == RESULT_OK ); @@ -2264,8 +2301,14 @@ MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet) { assert(m_Dict); Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, CodedContentType)); + if ( ASDCP_SUCCESS(result) && ! SingleSequence.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence)); + if ( ASDCP_SUCCESS(result) && ! ConstantBFrames.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames)); + if ( ASDCP_SUCCESS(result) && ! CodedContentType.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType)); if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay)); + if ( ASDCP_SUCCESS(result) && ! ClosedGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP)); + if ( ASDCP_SUCCESS(result) && ! IdenticalGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP)); + if ( ASDCP_SUCCESS(result) && ! MaxGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP)); + if ( ASDCP_SUCCESS(result) && ! BPictureCount.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount)); if ( ASDCP_SUCCESS(result) && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate)); if ( ASDCP_SUCCESS(result) && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel)); return result; @@ -2276,8 +2319,14 @@ void MPEG2VideoDescriptor::Copy(const MPEG2VideoDescriptor& rhs) { CDCIEssenceDescriptor::Copy(rhs); + SingleSequence = rhs.SingleSequence; + ConstantBFrames = rhs.ConstantBFrames; CodedContentType = rhs.CodedContentType; LowDelay = rhs.LowDelay; + ClosedGOP = rhs.ClosedGOP; + IdenticalGOP = rhs.IdenticalGOP; + MaxGOP = rhs.MaxGOP; + BPictureCount = rhs.BPictureCount; BitRate = rhs.BitRate; ProfileAndLevel = rhs.ProfileAndLevel; } @@ -2293,10 +2342,30 @@ MPEG2VideoDescriptor::Dump(FILE* stream) stream = stderr; CDCIEssenceDescriptor::Dump(stream); - fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType); + if ( ! SingleSequence.empty() ) { + fprintf(stream, " %22s = %d\n", "SingleSequence", SingleSequence.get()); + } + if ( ! ConstantBFrames.empty() ) { + fprintf(stream, " %22s = %d\n", "ConstantBFrames", ConstantBFrames.get()); + } + if ( ! CodedContentType.empty() ) { + fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType.get()); + } if ( ! LowDelay.empty() ) { fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get()); } + if ( ! ClosedGOP.empty() ) { + fprintf(stream, " %22s = %d\n", "ClosedGOP", ClosedGOP.get()); + } + if ( ! IdenticalGOP.empty() ) { + fprintf(stream, " %22s = %d\n", "IdenticalGOP", IdenticalGOP.get()); + } + if ( ! MaxGOP.empty() ) { + fprintf(stream, " %22s = %d\n", "MaxGOP", MaxGOP.get()); + } + if ( ! BPictureCount.empty() ) { + fprintf(stream, " %22s = %d\n", "BPictureCount", BPictureCount.get()); + } if ( ! BitRate.empty() ) { fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get()); } diff --git a/src/Metadata.h b/src/Metadata.h index 007f22b..5121989 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -554,9 +554,9 @@ namespace ASDCP ui32_t XTOsize; ui32_t YTOsize; ui16_t Csize; - Raw PictureComponentSizing; - Raw CodingStyleDefault; - Raw QuantizationDefault; + optional_property PictureComponentSizing; + optional_property CodingStyleDefault; + optional_property QuantizationDefault; JPEG2000PictureSubDescriptor(const Dictionary*& d); JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs); @@ -579,7 +579,7 @@ namespace ASDCP public: const Dictionary*& m_Dict; - optional_property ComponentDepth; + ui32_t ComponentDepth; ui32_t HorizontalSubsampling; optional_property VerticalSubsampling; optional_property ColorSiting; @@ -611,8 +611,14 @@ namespace ASDCP public: const Dictionary*& m_Dict; - ui8_t CodedContentType; + optional_property SingleSequence; + optional_property ConstantBFrames; + optional_property CodedContentType; optional_property LowDelay; + optional_property ClosedGOP; + optional_property IdenticalGOP; + optional_property MaxGOP; + optional_property BPictureCount; optional_property BitRate; optional_property ProfileAndLevel; diff --git a/src/asdcp-info.cpp b/src/asdcp-info.cpp index a8746bf..4a03bde 100755 --- a/src/asdcp-info.cpp +++ b/src/asdcp-info.cpp @@ -517,7 +517,7 @@ public: if ( KM_SUCCESS(result) ) { char buf[64]; - fprintf(stream, "ChannelAssignment: %s\n", descriptor->ChannelAssignment.EncodeString(buf, 64)); + fprintf(stream, "ChannelAssignment: %s\n", descriptor->ChannelAssignment.const_get().EncodeString(buf, 64)); } } diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp index 13e3036..24d6b1e 100755 --- a/src/asdcp-test.cpp +++ b/src/asdcp-test.cpp @@ -1813,7 +1813,7 @@ show_file_info(CommandOptions& Options) if ( ASDCP_SUCCESS(result) ) { char buf[64]; - fprintf(stdout, " ChannelAssignment: %s\n", descriptor->ChannelAssignment.EncodeString(buf, 64)); + fprintf(stdout, " ChannelAssignment: %s\n", descriptor->ChannelAssignment.const_get().EncodeString(buf, 64)); } } } -- 2.30.2