summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2013-07-02 05:51:18 +0000
committerjhurst <>2013-07-02 05:51:18 +0000
commit0cc43cc3765c003d60196ff45213c2835281a0c3 (patch)
tree9e80d263f63dc09c5184943f8adb97ab562368bd /src
parentf2ecb6822ff3db70b40adb19a37eab6456e28ed8 (diff)
more optional stuff
Diffstat (limited to 'src')
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp8
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp2
-rwxr-xr-xsrc/AS_DCP_PCM.cpp4
-rwxr-xr-xsrc/AS_DCP_internal.h28
-rw-r--r--src/MDD.cpp18
-rwxr-xr-xsrc/MDD.h7
-rwxr-xr-xsrc/MXF.h3
-rwxr-xr-xsrc/MXFTypes.cpp29
-rwxr-xr-xsrc/MXFTypes.h4
-rw-r--r--src/Makefile.am29
-rwxr-xr-xsrc/Metadata.cpp567
-rwxr-xr-xsrc/Metadata.h84
12 files changed, 618 insertions, 165 deletions
diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp
index 956a867..b8400e1 100755
--- a/src/AS_DCP_JP2K.cpp
+++ b/src/AS_DCP_JP2K.cpp
@@ -290,8 +290,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor& EssenceDescrip
PDesc.EditRate = EditRate;
PDesc.SampleRate = SampleRate;
- assert(EssenceDescriptor.ContainerDuration <= 0xFFFFFFFFL);
- PDesc.ContainerDuration = (ui32_t) EssenceDescriptor.ContainerDuration;
+ assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL);
+ PDesc.ContainerDuration = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.cget());
PDesc.StoredWidth = EssenceDescriptor.StoredWidth;
PDesc.StoredHeight = EssenceDescriptor.StoredHeight;
PDesc.AspectRatio = EssenceDescriptor.AspectRatio;
@@ -421,8 +421,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor& EssenceDescrip
PDesc.EditRate = EditRate;
PDesc.SampleRate = SampleRate;
- assert(EssenceDescriptor.ContainerDuration <= 0xFFFFFFFFL);
- PDesc.ContainerDuration = (ui32_t) EssenceDescriptor.ContainerDuration;
+ assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL);
+ PDesc.ContainerDuration = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.cget());
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 b10c8b5..d7cc935 100755
--- a/src/AS_DCP_MPEG2.cpp
+++ b/src/AS_DCP_MPEG2.cpp
@@ -62,7 +62,7 @@ MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& V
VDesc.ColorSiting = VDescObj->ColorSiting;
VDesc.CodedContentType = VDescObj->CodedContentType;
- VDesc.LowDelay = VDescObj->LowDelay == 0 ? false : true;
+ VDesc.LowDelay = VDescObj->LowDelay.get() == 0 ? false : true;
VDesc.BitRate = VDescObj->BitRate;
VDesc.ProfileAndLevel = VDescObj->ProfileAndLevel;
return RESULT_OK;
diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp
index d683ed0..8cff9cf 100755
--- a/src/AS_DCP_PCM.cpp
+++ b/src/AS_DCP_PCM.cpp
@@ -54,7 +54,7 @@ ASDCP::PCM_ADesc_to_MD(PCM::AudioDescriptor& ADesc, MXF::WaveAudioDescriptor* AD
ADescObj->LinkedTrackID = ADesc.LinkedTrackID;
ADescObj->ContainerDuration = ADesc.ContainerDuration;
- ADescObj->ChannelAssignment.Reset();
+ ADescObj->ChannelAssignment.get().Reset();
switch ( ADesc.ChannelFormat )
{
@@ -100,7 +100,7 @@ ASDCP::MD_to_PCM_ADesc(MXF::WaveAudioDescriptor* ADescObj, PCM::AudioDescriptor&
ADesc.ChannelFormat = PCM::CF_NONE;
- if ( ADescObj->ChannelAssignment.HasValue() )
+ if ( ! ADescObj->ChannelAssignment.empty() )
{
if ( ADescObj->ChannelAssignment == DefaultSMPTEDict().Type(MDD_DCAudioChannelCfg_1_5p1).ul )
ADesc.ChannelFormat = PCM::CF_CFG_1;
diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h
index df342bf..8b05dc7 100755
--- a/src/AS_DCP_internal.h
+++ b/src/AS_DCP_internal.h
@@ -607,14 +607,14 @@ namespace ASDCP
TrackSet<TimecodeComponent> MPTCTrack =
CreateTimecodeTrack<MaterialPackage>(m_HeaderPart, *m_MaterialPackage,
tc_edit_rate, TCFrameRate, 0, m_Dict);
- m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration));
- m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration));
+ m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration.get()));
+ m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration.get()));
TrackSet<SourceClip> MPTrack =
CreateTrackAndSequence<MaterialPackage, SourceClip>(m_HeaderPart, *m_MaterialPackage,
TrackName, clip_edit_rate, DataDefinition,
2, m_Dict);
- m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration));
+ m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration.get()));
MPTrack.Clip = new SourceClip(m_Dict);
m_HeaderPart.AddChildObject(MPTrack.Clip);
@@ -622,7 +622,7 @@ namespace ASDCP
MPTrack.Clip->DataDefinition = DataDefinition;
MPTrack.Clip->SourcePackageID = SourcePackageUMID;
MPTrack.Clip->SourceTrackID = 2;
- m_DurationUpdateList.push_back(&(MPTrack.Clip->Duration));
+ m_DurationUpdateList.push_back(&(MPTrack.Clip->Duration.get()));
//
@@ -640,13 +640,13 @@ namespace ASDCP
CreateTimecodeTrack<SourcePackage>(m_HeaderPart, *m_FilePackage,
tc_edit_rate, TCFrameRate,
ui64_C(3600) * TCFrameRate, m_Dict);
- m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration));
- m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration));
+ m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration.get()));
+ m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration.get()));
TrackSet<SourceClip> FPTrack =
CreateTrackAndSequence<SourcePackage, SourceClip>(m_HeaderPart, *m_FilePackage,
TrackName, clip_edit_rate, DataDefinition,
2, m_Dict);
- m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration));
+ m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration.get()));
// Consult ST 379:2004 Sec. 6.3, "Element to track relationship" to see where "12" comes from.
FPTrack.Track->TrackNumber = KM_i32_BE(Kumu::cp2i<ui32_t>((EssenceUL.Value() + 12)));
@@ -659,7 +659,7 @@ namespace ASDCP
// for now we do not allow setting this value, so all files will be 'original'
FPTrack.Clip->SourceTrackID = 0;
FPTrack.Clip->SourcePackageID = NilUMID;
- m_DurationUpdateList.push_back(&(FPTrack.Clip->Duration));
+ m_DurationUpdateList.push_back(&(FPTrack.Clip->Duration.get()));
m_EssenceDescriptor->LinkedTrackID = FPTrack.Track->TrackID;
}
@@ -698,14 +698,14 @@ namespace ASDCP
TrackSet<TimecodeComponent> MPTCTrack =
CreateTimecodeTrack<MaterialPackage>(m_HeaderPart, *m_MaterialPackage,
tc_edit_rate, tc_frame_rate, 0, m_Dict);
- m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration));
- m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration));
+ m_DurationUpdateList.push_back(&(MPTCTrack.Sequence->Duration.get()));
+ m_DurationUpdateList.push_back(&(MPTCTrack.Clip->Duration.get()));
TrackSet<DMSegment> MPTrack =
CreateTrackAndSequence<MaterialPackage, DMSegment>(m_HeaderPart, *m_MaterialPackage,
TrackName, clip_edit_rate, DataDefinition,
2, m_Dict);
- m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration));
+ m_DurationUpdateList.push_back(&(MPTrack.Sequence->Duration.get()));
MPTrack.Clip = new DMSegment(m_Dict);
m_HeaderPart.AddChildObject(MPTrack.Clip);
@@ -731,14 +731,14 @@ namespace ASDCP
CreateTimecodeTrack<SourcePackage>(m_HeaderPart, *m_FilePackage,
clip_edit_rate, tc_frame_rate,
ui64_C(3600) * tc_frame_rate, m_Dict);
- m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration));
- m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration));
+ m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration.get()));
+ m_DurationUpdateList.push_back(&(FPTCTrack.Clip->Duration.get()));
TrackSet<DMSegment> FPTrack =
CreateTrackAndSequence<SourcePackage, DMSegment>(m_HeaderPart, *m_FilePackage,
TrackName, clip_edit_rate, DataDefinition,
2, m_Dict);
- m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration));
+ m_DurationUpdateList.push_back(&(FPTrack.Sequence->Duration.get()));
FPTrack.Clip = new DMSegment(m_Dict);
m_HeaderPart.AddChildObject(FPTrack.Clip);
diff --git a/src/MDD.cpp b/src/MDD.cpp
index eba638f..069d07e 100644
--- a/src/MDD.cpp
+++ b/src/MDD.cpp
@@ -559,7 +559,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
{0x32, 0x0f}, true, "GenericPictureEssenceDescriptor_AlphaTransparency" },
{ { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 174
0x04, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00 },
- {0x32, 0x10}, true, "GenericPictureEssenceDescriptor_Gamma" },
+ {0x32, 0x10}, true, "GenericPictureEssenceDescriptor_TransferCharacteristic" },
{ { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 175
0x04, 0x18, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 },
{0x32, 0x11}, true, "GenericPictureEssenceDescriptor_ImageAlignmentOffset" },
@@ -661,7 +661,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
{0x3d, 0x0c}, true, "GenericSoundEssenceDescriptor_DialNorm" },
{ { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 208
0x04, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 },
- {0x3d, 0x06}, false, "GenericSoundEssenceDescriptor_SoundEssenceCompression" },
+ {0x3d, 0x06}, false, "GenericSoundEssenceDescriptor_SoundEssenceCoding" },
{ { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53, 0x01, 0x01, // 209
0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x43, 0x00 },
{0}, false, "GenericDataEssenceDescriptor" },
@@ -1085,6 +1085,20 @@ 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" },
+ { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 351
+ 0x04, 0x01, 0x02, 0x01, 0x01, 0x03, 0x01, 0x00 },
+ {0}, false, "GenericPictureEssenceDescriptor_CodingEquations" },
+ { { 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/MDD.h b/src/MDD.h
index 4dcb228..81a1411 100755
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -209,7 +209,7 @@ namespace ASDCP {
MDD_GenericPictureEssenceDescriptor_ActiveFormatDescriptor, // 171
MDD_GenericPictureEssenceDescriptor_VideoLineMap, // 172
MDD_GenericPictureEssenceDescriptor_AlphaTransparency, // 173
- MDD_GenericPictureEssenceDescriptor_Gamma, // 174
+ MDD_GenericPictureEssenceDescriptor_TransferCharacteristic, // 174
MDD_GenericPictureEssenceDescriptor_ImageAlignmentOffset, // 175
MDD_GenericPictureEssenceDescriptor_ImageStartOffset, // 176
MDD_GenericPictureEssenceDescriptor_ImageEndOffset, // 177
@@ -243,7 +243,7 @@ namespace ASDCP {
MDD_GenericSoundEssenceDescriptor_ChannelCount, // 205
MDD_GenericSoundEssenceDescriptor_QuantizationBits, // 206
MDD_GenericSoundEssenceDescriptor_DialNorm, // 207
- MDD_GenericSoundEssenceDescriptor_SoundEssenceCompression, // 208
+ MDD_GenericSoundEssenceDescriptor_SoundEssenceCoding, // 208
MDD_GenericDataEssenceDescriptor, // 209
MDD_GenericDataEssenceDescriptor_DataEssenceCoding, // 210
MDD_MultipleDescriptor, // 211
@@ -385,6 +385,9 @@ namespace ASDCP {
MDD_IMFAudioGroup_MPg, // 347
MDD_IMFAudioGroup_DVS, // 348
MDD_IMFAudioGroup_Dcm, // 349
+ MDD_MaterialPackage_PackageMarker, // 350
+ MDD_GenericPictureEssenceDescriptor_CodingEquations, // 351
+ MDD_GenericPictureEssenceDescriptor_ColorPrimaries, // 352
MDD_Max
}; // enum MDD_t
diff --git a/src/MXF.h b/src/MXF.h
index cf28379..dc06c7f 100755
--- a/src/MXF.h
+++ b/src/MXF.h
@@ -229,12 +229,15 @@ namespace ASDCP
optional_property() : m_has_value(false) {}
optional_property(const PropertyType& value) : m_property(value), m_has_value(false) {}
const optional_property<PropertyType>& operator=(const PropertyType& rhs) { this->m_property = rhs; this->m_has_value = true; return *this; }
+ bool operator==(const PropertyType& rhs) const { return this->m_property == rhs; }
+ bool operator==(const optional_property<PropertyType>& rhs) const { return this->m_property == rhs.m_property; }
operator PropertyType&() { return this->m_property; }
void set(const PropertyType& rhs) { this->m_property = rhs; this->m_has_value = true; }
void set_has_value(bool has_value = true) { this->m_has_value = has_value; }
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; }
};
// base class of all metadata objects
diff --git a/src/MXFTypes.cpp b/src/MXFTypes.cpp
index 098b728..58c6fb7 100755
--- a/src/MXFTypes.cpp
+++ b/src/MXFTypes.cpp
@@ -228,6 +228,20 @@ ASDCP::UMID::EncodeString(char* str_buf, ui32_t buf_len) const
//
//
+ASDCP::MXF::UTF16String::UTF16String(const char* sz)
+{
+ if ( sz != 0 && *sz != 0 )
+ {
+ this->assign(sz);
+ }
+}
+
+ASDCP::MXF::UTF16String::UTF16String(const std::string& str)
+{
+ this->assign(str);
+}
+
+//
const ASDCP::MXF::UTF16String&
ASDCP::MXF::UTF16String::operator=(const char* sz)
{
@@ -333,6 +347,21 @@ ASDCP::MXF::UTF16String::Archive(Kumu::MemIOWriter* Writer) const
//
//
+ASDCP::MXF::ISO8String::ISO8String(const char* sz)
+{
+ if ( sz != 0 && *sz != 0 )
+ {
+ this->assign(sz);
+ }
+}
+
+ASDCP::MXF::ISO8String::ISO8String(const std::string& str)
+{
+ this->assign(str);
+}
+
+
+//
const ASDCP::MXF::ISO8String&
ASDCP::MXF::ISO8String::operator=(const char* sz)
{
diff --git a/src/MXFTypes.h b/src/MXFTypes.h
index f76fbed..e98a2e9 100755
--- a/src/MXFTypes.h
+++ b/src/MXFTypes.h
@@ -243,6 +243,8 @@ namespace ASDCP
{
public:
ISO8String() {}
+ ISO8String(const char*);
+ ISO8String(const std::string&);
~ISO8String() {}
const ISO8String& operator=(const char*);
@@ -260,6 +262,8 @@ namespace ASDCP
{
public:
UTF16String() {}
+ UTF16String(const char*);
+ UTF16String(const std::string&);
~UTF16String() {}
const UTF16String& operator=(const char*);
diff --git a/src/Makefile.am b/src/Makefile.am
index 98b0edd..fde8a25 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -93,22 +93,27 @@ libkumu_la_LDFLAGS = -release @VERSION@
nodist_libasdcp_la_SOURCES = Metadata_h.tt2 Metadata_cpp.tt2 \
mxfgen.pl MXF_def.pl ullist.pl ULList.xml dict.xml DMS_Crypto.xml
# sources for asdcp library
-libasdcp_la_SOURCES = MPEG2_Parser.cpp MPEG.cpp JP2K_Codestream_Parser.cpp \
+libasdcp_la_SOURCES = \
+ Dict.cpp \
+ MDD.cpp \
+ KLV.cpp \
+ MXFTypes.cpp \
+ MXF.cpp \
+ Metadata.cpp \
+ Index.cpp \
+ MPEG2_Parser.cpp MPEG.cpp JP2K_Codestream_Parser.cpp \
JP2K_Sequence_Parser.cpp JP2K.cpp PCM_Parser.cpp Wav.cpp \
- TimedText_Parser.cpp KLV.cpp Dict.cpp MXFTypes.cpp MXF.cpp \
- Index.cpp Metadata.cpp AS_DCP.cpp AS_DCP_MXF.cpp AS_DCP_AES.cpp \
+ TimedText_Parser.cpp \
+ AS_DCP.cpp AS_DCP_MXF.cpp AS_DCP_AES.cpp \
h__Reader.cpp h__Writer.cpp AS_DCP_MPEG2.cpp AS_DCP_JP2K.cpp \
AS_DCP_PCM.cpp AS_DCP_TimedText.cpp PCMParserList.cpp \
- Wav.h WavFileWriter.h MXF.h Metadata.h \
- JP2K.h AS_DCP.h AS_DCP_internal.h KLV.h MPEG.h MXFTypes.h MDD.h \
- PCMParserList.h S12MTimecode.h MDD.cpp \
- AS_DCP_ATMOS.cpp AS_DCP_DCData.cpp AS_DCP_DCData_internal.h \
+ AS_DCP_ATMOS.cpp AS_DCP_DCData.cpp \
DCData_ByteStream_Parser.cpp DCData_Sequence_Parser.cpp \
- AtmosSyncChannel_Generator.cpp AtmosSyncChannel_Generator.h \
- AtmosSyncChannel_Mixer.cpp AtmosSyncChannel_Mixer.h \
- PCMDataProviders.cpp PCMDataProviders.h \
- SyncEncoder.c SyncEncoder.h SyncCommon.h CRC16.c CRC16.h \
- UUIDInformation.c UUIDInformation.h
+ AtmosSyncChannel_Generator.cpp \
+ AtmosSyncChannel_Mixer.cpp \
+ PCMDataProviders.cpp \
+ SyncEncoder.c CRC16.c CRC16.h \
+ UUIDInformation.c
if DEV_HEADERS
nodist_libasdcp_la_SOURCES += TimedText_Transform.h TimedText_Transform.cpp
diff --git a/src/Metadata.cpp b/src/Metadata.cpp
index bab0003..04d8392 100755
--- a/src/Metadata.cpp
+++ b/src/Metadata.cpp
@@ -156,7 +156,10 @@ Identification::InitFromTLVSet(TLVReader& TLVSet)
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ProductUID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ModificationDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, ToolkitVersion));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(Identification, Platform));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(Identification, Platform));
+ Platform.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -174,7 +177,7 @@ Identification::WriteToTLVSet(TLVWriter& TLVSet)
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ProductUID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ModificationDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, ToolkitVersion));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(Identification, Platform));
+ if ( ASDCP_SUCCESS(result) && ! Platform.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(Identification, Platform));
return result;
}
@@ -213,7 +216,9 @@ Identification::Dump(FILE* stream)
fprintf(stream, " %22s = %s\n", "ProductUID", ProductUID.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s = %s\n", "ModificationDate", ModificationDate.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s = %s\n", "ToolkitVersion", ToolkitVersion.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "Platform", Platform.EncodeString(identbuf, IdentBufferLen));
+ if ( ! Platform.empty() ) {
+ fprintf(stream, " %22s = %s\n", "Platform", Platform.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
//
@@ -316,7 +321,7 @@ ContentStorage::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0), BodySID(0)
+EssenceContainerData::EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_EssenceContainerData);
@@ -337,7 +342,10 @@ EssenceContainerData::InitFromTLVSet(TLVReader& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(EssenceContainerData, LinkedPackageUID));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, IndexSID));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(EssenceContainerData, IndexSID));
+ IndexSID.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(EssenceContainerData, BodySID));
return result;
}
@@ -349,7 +357,7 @@ EssenceContainerData::WriteToTLVSet(TLVWriter& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(EssenceContainerData, LinkedPackageUID));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, IndexSID));
+ if ( ASDCP_SUCCESS(result) && ! IndexSID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(EssenceContainerData, IndexSID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(EssenceContainerData, BodySID));
return result;
}
@@ -376,7 +384,9 @@ EssenceContainerData::Dump(FILE* stream)
InterchangeObject::Dump(stream);
fprintf(stream, " %22s = %s\n", "LinkedPackageUID", LinkedPackageUID.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID);
+ if ( ! IndexSID.empty() ) {
+ fprintf(stream, " %22s = %d\n", "IndexSID", IndexSID.get());
+ }
fprintf(stream, " %22s = %d\n", "BodySID", BodySID);
}
@@ -413,7 +423,10 @@ GenericPackage::InitFromTLVSet(TLVReader& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageUID));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Name));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPackage, Name));
+ Name.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageCreationDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, PackageModifiedDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPackage, Tracks));
@@ -427,7 +440,7 @@ GenericPackage::WriteToTLVSet(TLVWriter& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageUID));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Name));
+ if ( ASDCP_SUCCESS(result) && ! Name.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPackage, Name));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageCreationDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, PackageModifiedDate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPackage, Tracks));
@@ -458,7 +471,9 @@ GenericPackage::Dump(FILE* stream)
InterchangeObject::Dump(stream);
fprintf(stream, " %22s = %s\n", "PackageUID", PackageUID.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "Name", Name.EncodeString(identbuf, IdentBufferLen));
+ if ( ! Name.empty() ) {
+ fprintf(stream, " %22s = %s\n", "Name", Name.get().EncodeString(identbuf, IdentBufferLen));
+ }
fprintf(stream, " %22s = %s\n", "PackageCreationDate", PackageCreationDate.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s = %s\n", "PackageModifiedDate", PackageModifiedDate.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s:\n", "Tracks");
@@ -491,6 +506,10 @@ MaterialPackage::InitFromTLVSet(TLVReader& TLVSet)
{
assert(m_Dict);
Result_t result = GenericPackage::InitFromTLVSet(TLVSet);
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MaterialPackage, PackageMarker));
+ PackageMarker.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -500,6 +519,7 @@ MaterialPackage::WriteToTLVSet(TLVWriter& TLVSet)
{
assert(m_Dict);
Result_t result = GenericPackage::WriteToTLVSet(TLVSet);
+ if ( ASDCP_SUCCESS(result) && ! PackageMarker.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MaterialPackage, PackageMarker));
return result;
}
@@ -508,6 +528,7 @@ void
MaterialPackage::Copy(const MaterialPackage& rhs)
{
GenericPackage::Copy(rhs);
+ PackageMarker = rhs.PackageMarker;
}
//
@@ -521,6 +542,9 @@ MaterialPackage::Dump(FILE* stream)
stream = stderr;
GenericPackage::Dump(stream);
+ if ( ! PackageMarker.empty() ) {
+ fprintf(stream, " %22s = %s\n", "PackageMarker", PackageMarker.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
//
@@ -632,8 +656,14 @@ GenericTrack::InitFromTLVSet(TLVReader& TLVSet)
Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericTrack, TrackNumber));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericTrack, TrackName));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericTrack, Sequence));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, TrackName));
+ TrackName.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericTrack, Sequence));
+ Sequence.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -645,8 +675,8 @@ GenericTrack::WriteToTLVSet(TLVWriter& TLVSet)
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericTrack, TrackNumber));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericTrack, TrackName));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericTrack, Sequence));
+ if ( ASDCP_SUCCESS(result) && ! TrackName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, TrackName));
+ if ( ASDCP_SUCCESS(result) && ! Sequence.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericTrack, Sequence));
return result;
}
@@ -674,8 +704,12 @@ GenericTrack::Dump(FILE* stream)
InterchangeObject::Dump(stream);
fprintf(stream, " %22s = %d\n", "TrackID", TrackID);
fprintf(stream, " %22s = %d\n", "TrackNumber", TrackNumber);
- fprintf(stream, " %22s = %s\n", "TrackName", TrackName.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "Sequence", Sequence.EncodeString(identbuf, IdentBufferLen));
+ if ( ! TrackName.empty() ) {
+ fprintf(stream, " %22s = %s\n", "TrackName", TrackName.get().EncodeString(identbuf, IdentBufferLen));
+ }
+ if ( ! Sequence.empty() ) {
+ fprintf(stream, " %22s = %s\n", "Sequence", Sequence.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
@@ -848,7 +882,10 @@ StructuralComponent::InitFromTLVSet(TLVReader& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(StructuralComponent, DataDefinition));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(StructuralComponent, Duration));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(StructuralComponent, Duration));
+ Duration.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -859,7 +896,7 @@ StructuralComponent::WriteToTLVSet(TLVWriter& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(StructuralComponent, DataDefinition));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(StructuralComponent, Duration));
+ if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(StructuralComponent, Duration));
return result;
}
@@ -884,7 +921,9 @@ StructuralComponent::Dump(FILE* stream)
InterchangeObject::Dump(stream);
fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf));
+ if ( ! Duration.empty() ) {
+ fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration.get(), identbuf));
+ }
}
@@ -1196,7 +1235,7 @@ GenericDescriptor::Dump(FILE* stream)
//
-FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0), ContainerDuration(0)
+FileDescriptor::FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_FileDescriptor);
@@ -1216,11 +1255,20 @@ FileDescriptor::InitFromTLVSet(TLVReader& TLVSet)
{
assert(m_Dict);
Result_t result = GenericDescriptor::InitFromTLVSet(TLVSet);
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(FileDescriptor, LinkedTrackID));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(FileDescriptor, LinkedTrackID));
+ LinkedTrackID.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, SampleRate));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(FileDescriptor, ContainerDuration));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(FileDescriptor, ContainerDuration));
+ ContainerDuration.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, EssenceContainer));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(FileDescriptor, Codec));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(FileDescriptor, Codec));
+ Codec.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -1230,11 +1278,11 @@ FileDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
{
assert(m_Dict);
Result_t result = GenericDescriptor::WriteToTLVSet(TLVSet);
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(FileDescriptor, LinkedTrackID));
+ if ( ASDCP_SUCCESS(result) && ! LinkedTrackID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(FileDescriptor, LinkedTrackID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, SampleRate));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(FileDescriptor, ContainerDuration));
+ if ( ASDCP_SUCCESS(result) && ! ContainerDuration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(FileDescriptor, ContainerDuration));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, EssenceContainer));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(FileDescriptor, Codec));
+ if ( ASDCP_SUCCESS(result) && ! Codec.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(FileDescriptor, Codec));
return result;
}
@@ -1261,11 +1309,17 @@ FileDescriptor::Dump(FILE* stream)
stream = stderr;
GenericDescriptor::Dump(stream);
- fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID);
+ if ( ! LinkedTrackID.empty() ) {
+ fprintf(stream, " %22s = %d\n", "LinkedTrackID", LinkedTrackID.get());
+ }
fprintf(stream, " %22s = %s\n", "SampleRate", SampleRate.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration, identbuf));
+ if ( ! ContainerDuration.empty() ) {
+ fprintf(stream, " %22s = %s\n", "ContainerDuration", i64sz(ContainerDuration.get(), identbuf));
+ }
fprintf(stream, " %22s = %s\n", "EssenceContainer", EssenceContainer.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "Codec", Codec.EncodeString(identbuf, IdentBufferLen));
+ if ( ! Codec.empty() ) {
+ fprintf(stream, " %22s = %s\n", "Codec", Codec.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
//
@@ -1309,10 +1363,21 @@ GenericSoundEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, Locked));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, AudioRefLevel));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
+ AudioRefLevel.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
+ ElectroSpatialFormulation.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, DialNorm));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
+ DialNorm.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
return result;
}
@@ -1324,10 +1389,12 @@ GenericSoundEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioSamplingRate));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, Locked));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, AudioRefLevel));
+ if ( ASDCP_SUCCESS(result) && ! AudioRefLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, AudioRefLevel));
+ if ( ASDCP_SUCCESS(result) && ! ElectroSpatialFormulation.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, ElectroSpatialFormulation));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, ChannelCount));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, QuantizationBits));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, DialNorm));
+ if ( ASDCP_SUCCESS(result) && ! DialNorm.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericSoundEssenceDescriptor, DialNorm));
+ if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericSoundEssenceDescriptor, SoundEssenceCoding));
return result;
}
@@ -1339,9 +1406,11 @@ GenericSoundEssenceDescriptor::Copy(const GenericSoundEssenceDescriptor& rhs)
AudioSamplingRate = rhs.AudioSamplingRate;
Locked = rhs.Locked;
AudioRefLevel = rhs.AudioRefLevel;
+ ElectroSpatialFormulation = rhs.ElectroSpatialFormulation;
ChannelCount = rhs.ChannelCount;
QuantizationBits = rhs.QuantizationBits;
DialNorm = rhs.DialNorm;
+ SoundEssenceCoding = rhs.SoundEssenceCoding;
}
//
@@ -1357,10 +1426,18 @@ GenericSoundEssenceDescriptor::Dump(FILE* stream)
FileDescriptor::Dump(stream);
fprintf(stream, " %22s = %s\n", "AudioSamplingRate", AudioSamplingRate.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s = %d\n", "Locked", Locked);
- fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel);
+ if ( ! AudioRefLevel.empty() ) {
+ fprintf(stream, " %22s = %d\n", "AudioRefLevel", AudioRefLevel.get());
+ }
+ if ( ! ElectroSpatialFormulation.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ElectroSpatialFormulation", ElectroSpatialFormulation.get());
+ }
fprintf(stream, " %22s = %d\n", "ChannelCount", ChannelCount);
fprintf(stream, " %22s = %d\n", "QuantizationBits", QuantizationBits);
- fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm);
+ if ( ! DialNorm.empty() ) {
+ fprintf(stream, " %22s = %d\n", "DialNorm", DialNorm.get());
+ }
+ fprintf(stream, " %22s = %s\n", "SoundEssenceCoding", SoundEssenceCoding.EncodeString(identbuf, IdentBufferLen));
}
//
@@ -1382,7 +1459,7 @@ GenericSoundEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0), AvgBps(0)
+WaveAudioDescriptor::WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_WaveAudioDescriptor);
@@ -1403,9 +1480,15 @@ WaveAudioDescriptor::InitFromTLVSet(TLVReader& TLVSet)
assert(m_Dict);
Result_t result = GenericSoundEssenceDescriptor::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(WaveAudioDescriptor, BlockAlign));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(WaveAudioDescriptor, SequenceOffset));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, SequenceOffset));
+ SequenceOffset.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(WaveAudioDescriptor, AvgBps));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(WaveAudioDescriptor, ChannelAssignment));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
+ ChannelAssignment.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -1416,9 +1499,9 @@ WaveAudioDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
assert(m_Dict);
Result_t result = GenericSoundEssenceDescriptor::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(WaveAudioDescriptor, BlockAlign));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(WaveAudioDescriptor, SequenceOffset));
+ 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) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(WaveAudioDescriptor, ChannelAssignment));
+ if ( ASDCP_SUCCESS(result) && ! ChannelAssignment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(WaveAudioDescriptor, ChannelAssignment));
return result;
}
@@ -1445,9 +1528,13 @@ WaveAudioDescriptor::Dump(FILE* stream)
GenericSoundEssenceDescriptor::Dump(stream);
fprintf(stream, " %22s = %d\n", "BlockAlign", BlockAlign);
- fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset);
+ if ( ! SequenceOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "SequenceOffset", SequenceOffset.get());
+ }
fprintf(stream, " %22s = %d\n", "AvgBps", AvgBps);
- fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.EncodeString(identbuf, IdentBufferLen));
+ if ( ! ChannelAssignment.empty() ) {
+ fprintf(stream, " %22s = %s\n", "ChannelAssignment", ChannelAssignment.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
//
@@ -1469,7 +1556,7 @@ WaveAudioDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-GenericPictureEssenceDescriptor::GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), FrameLayout(0), StoredWidth(0), StoredHeight(0), DisplayWidth(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)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_GenericPictureEssenceDescriptor);
@@ -1489,27 +1576,91 @@ GenericPictureEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
{
assert(m_Dict);
Result_t result = FileDescriptor::InitFromTLVSet(TLVSet);
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
+ SignalStandard.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
if ( ASDCP_SUCCESS(result) ) {
- result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
- DisplayWidth.set_has_value( result == RESULT_OK );
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
+ StoredF2Offset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
+ SampledWidth.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
+ SampledHeight.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
+ SampledXOffset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
+ SampledYOffset.set_has_value( result == RESULT_OK );
}
if ( ASDCP_SUCCESS(result) ) {
result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
DisplayHeight.set_has_value( result == RESULT_OK );
}
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
+ DisplayWidth.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
+ DisplayXOffset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
+ DisplayYOffset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
+ DisplayF2Offset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
+ ActiveFormatDescriptor.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
+ AlphaTransparency.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) {
- result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, Gamma));
- Gamma.set_has_value( result == RESULT_OK );
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
+ TransferCharacteristic.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
+ ImageAlignmentOffset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
+ ImageStartOffset.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
+ ImageEndOffset.set_has_value( result == RESULT_OK );
}
if ( ASDCP_SUCCESS(result) ) {
result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
FieldDominance.set_has_value( result == RESULT_OK );
}
+ if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, CodingEquations));
+ CodingEquations.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(GenericPictureEssenceDescriptor, ColorPrimaries));
+ ColorPrimaries.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -1519,15 +1670,31 @@ GenericPictureEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
{
assert(m_Dict);
Result_t result = FileDescriptor::WriteToTLVSet(TLVSet);
+ if ( ASDCP_SUCCESS(result) && ! SignalStandard.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SignalStandard));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, FrameLayout));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredWidth));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, StoredHeight));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, PictureEssenceCoding));
- if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
+ if ( ASDCP_SUCCESS(result) && ! StoredF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, StoredF2Offset));
+ if ( ASDCP_SUCCESS(result) && ! SampledWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledWidth));
+ if ( ASDCP_SUCCESS(result) && ! SampledHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledHeight));
+ if ( ASDCP_SUCCESS(result) && ! SampledXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledXOffset));
+ if ( ASDCP_SUCCESS(result) && ! SampledYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, SampledYOffset));
if ( ASDCP_SUCCESS(result) && ! DisplayHeight.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayHeight));
- if ( ASDCP_SUCCESS(result) && ! Gamma.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, Gamma));
+ if ( ASDCP_SUCCESS(result) && ! DisplayWidth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayWidth));
+ if ( ASDCP_SUCCESS(result) && ! DisplayXOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayXOffset));
+ if ( ASDCP_SUCCESS(result) && ! DisplayYOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayYOffset));
+ if ( ASDCP_SUCCESS(result) && ! DisplayF2Offset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, DisplayF2Offset));
+ if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(GenericPictureEssenceDescriptor, AspectRatio));
+ if ( ASDCP_SUCCESS(result) && ! ActiveFormatDescriptor.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ActiveFormatDescriptor));
+ if ( ASDCP_SUCCESS(result) && ! AlphaTransparency.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, AlphaTransparency));
+ if ( ASDCP_SUCCESS(result) && ! TransferCharacteristic.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, TransferCharacteristic));
+ if ( ASDCP_SUCCESS(result) && ! ImageAlignmentOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageAlignmentOffset));
+ if ( ASDCP_SUCCESS(result) && ! ImageStartOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageStartOffset));
+ if ( ASDCP_SUCCESS(result) && ! ImageEndOffset.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, ImageEndOffset));
if ( ASDCP_SUCCESS(result) && ! FieldDominance.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(GenericPictureEssenceDescriptor, FieldDominance));
+ 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));
return result;
}
@@ -1536,15 +1703,31 @@ void
GenericPictureEssenceDescriptor::Copy(const GenericPictureEssenceDescriptor& rhs)
{
FileDescriptor::Copy(rhs);
+ SignalStandard = rhs.SignalStandard;
FrameLayout = rhs.FrameLayout;
StoredWidth = rhs.StoredWidth;
StoredHeight = rhs.StoredHeight;
- AspectRatio = rhs.AspectRatio;
- PictureEssenceCoding = rhs.PictureEssenceCoding;
- DisplayWidth = rhs.DisplayWidth;
+ StoredF2Offset = rhs.StoredF2Offset;
+ SampledWidth = rhs.SampledWidth;
+ SampledHeight = rhs.SampledHeight;
+ SampledXOffset = rhs.SampledXOffset;
+ SampledYOffset = rhs.SampledYOffset;
DisplayHeight = rhs.DisplayHeight;
- Gamma = rhs.Gamma;
+ DisplayWidth = rhs.DisplayWidth;
+ DisplayXOffset = rhs.DisplayXOffset;
+ DisplayYOffset = rhs.DisplayYOffset;
+ DisplayF2Offset = rhs.DisplayF2Offset;
+ AspectRatio = rhs.AspectRatio;
+ ActiveFormatDescriptor = rhs.ActiveFormatDescriptor;
+ AlphaTransparency = rhs.AlphaTransparency;
+ TransferCharacteristic = rhs.TransferCharacteristic;
+ ImageAlignmentOffset = rhs.ImageAlignmentOffset;
+ ImageStartOffset = rhs.ImageStartOffset;
+ ImageEndOffset = rhs.ImageEndOffset;
FieldDominance = rhs.FieldDominance;
+ PictureEssenceCoding = rhs.PictureEssenceCoding;
+ CodingEquations = rhs.CodingEquations;
+ ColorPrimaries = rhs.ColorPrimaries;
}
//
@@ -1558,23 +1741,71 @@ GenericPictureEssenceDescriptor::Dump(FILE* stream)
stream = stderr;
FileDescriptor::Dump(stream);
+ if ( ! SignalStandard.empty() ) {
+ fprintf(stream, " %22s = %d\n", "SignalStandard", SignalStandard.get());
+ }
fprintf(stream, " %22s = %d\n", "FrameLayout", FrameLayout);
fprintf(stream, " %22s = %d\n", "StoredWidth", StoredWidth);
fprintf(stream, " %22s = %d\n", "StoredHeight", StoredHeight);
- fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen));
- if ( ! DisplayWidth.empty() ) {
- fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get());
+ if ( ! StoredF2Offset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "StoredF2Offset", StoredF2Offset.get());
+ }
+ if ( ! SampledWidth.empty() ) {
+ fprintf(stream, " %22s = %d\n", "SampledWidth", SampledWidth.get());
+ }
+ if ( ! SampledHeight.empty() ) {
+ fprintf(stream, " %22s = %d\n", "SampledHeight", SampledHeight.get());
+ }
+ if ( ! SampledXOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "SampledXOffset", SampledXOffset.get());
+ }
+ if ( ! SampledYOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "SampledYOffset", SampledYOffset.get());
}
if ( ! DisplayHeight.empty() ) {
fprintf(stream, " %22s = %d\n", "DisplayHeight", DisplayHeight.get());
}
- if ( ! Gamma.empty() ) {
- fprintf(stream, " %22s = %s\n", "Gamma", Gamma.get().EncodeString(identbuf, IdentBufferLen));
+ if ( ! DisplayWidth.empty() ) {
+ fprintf(stream, " %22s = %d\n", "DisplayWidth", DisplayWidth.get());
+ }
+ if ( ! DisplayXOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "DisplayXOffset", DisplayXOffset.get());
+ }
+ if ( ! DisplayYOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "DisplayYOffset", DisplayYOffset.get());
+ }
+ if ( ! DisplayF2Offset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "DisplayF2Offset", DisplayF2Offset.get());
+ }
+ fprintf(stream, " %22s = %s\n", "AspectRatio", AspectRatio.EncodeString(identbuf, IdentBufferLen));
+ if ( ! ActiveFormatDescriptor.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ActiveFormatDescriptor", ActiveFormatDescriptor.get());
+ }
+ if ( ! AlphaTransparency.empty() ) {
+ fprintf(stream, " %22s = %d\n", "AlphaTransparency", AlphaTransparency.get());
+ }
+ if ( ! TransferCharacteristic.empty() ) {
+ fprintf(stream, " %22s = %s\n", "TransferCharacteristic", TransferCharacteristic.get().EncodeString(identbuf, IdentBufferLen));
+ }
+ if ( ! ImageAlignmentOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ImageAlignmentOffset", ImageAlignmentOffset.get());
+ }
+ if ( ! ImageStartOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ImageStartOffset", ImageStartOffset.get());
+ }
+ if ( ! ImageEndOffset.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ImageEndOffset", ImageEndOffset.get());
}
if ( ! FieldDominance.empty() ) {
fprintf(stream, " %22s = %d\n", "FieldDominance", FieldDominance.get());
}
+ fprintf(stream, " %22s = %s\n", "PictureEssenceCoding", PictureEssenceCoding.EncodeString(identbuf, IdentBufferLen));
+ if ( ! CodingEquations.empty() ) {
+ fprintf(stream, " %22s = %s\n", "CodingEquations", CodingEquations.get().EncodeString(identbuf, IdentBufferLen));
+ }
+ if ( ! ColorPrimaries.empty() ) {
+ fprintf(stream, " %22s = %s\n", "ColorPrimaries", ColorPrimaries.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
//
@@ -1596,7 +1827,7 @@ GenericPictureEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), ComponentMinRef(0)
+RGBAEssenceDescriptor::RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), AlphaMinRef(0), ScanningDirection(0)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_RGBAEssenceDescriptor);
@@ -1616,8 +1847,26 @@ RGBAEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
{
assert(m_Dict);
Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(RGBAEssenceDescriptor, ComponentMaxRef));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(RGBAEssenceDescriptor, ComponentMinRef));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
+ ComponentMaxRef.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
+ ComponentMinRef.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
+ AlphaMinRef.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
+ AlphaMaxRef.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
+ ScanningDirection.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -1627,8 +1876,11 @@ RGBAEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
{
assert(m_Dict);
Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, ComponentMaxRef));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(RGBAEssenceDescriptor, ComponentMinRef));
+ if ( ASDCP_SUCCESS(result) && ! ComponentMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMaxRef));
+ if ( ASDCP_SUCCESS(result) && ! ComponentMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ComponentMinRef));
+ if ( ASDCP_SUCCESS(result) && ! AlphaMinRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMinRef));
+ if ( ASDCP_SUCCESS(result) && ! AlphaMaxRef.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, AlphaMaxRef));
+ if ( ASDCP_SUCCESS(result) && ! ScanningDirection.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(RGBAEssenceDescriptor, ScanningDirection));
return result;
}
@@ -1639,6 +1891,9 @@ RGBAEssenceDescriptor::Copy(const RGBAEssenceDescriptor& rhs)
GenericPictureEssenceDescriptor::Copy(rhs);
ComponentMaxRef = rhs.ComponentMaxRef;
ComponentMinRef = rhs.ComponentMinRef;
+ AlphaMinRef = rhs.AlphaMinRef;
+ AlphaMaxRef = rhs.AlphaMaxRef;
+ ScanningDirection = rhs.ScanningDirection;
}
//
@@ -1652,8 +1907,21 @@ RGBAEssenceDescriptor::Dump(FILE* stream)
stream = stderr;
GenericPictureEssenceDescriptor::Dump(stream);
- fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef);
- fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef);
+ if ( ! ComponentMaxRef.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ComponentMaxRef", ComponentMaxRef.get());
+ }
+ if ( ! ComponentMinRef.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ComponentMinRef", ComponentMinRef.get());
+ }
+ if ( ! AlphaMinRef.empty() ) {
+ fprintf(stream, " %22s = %d\n", "AlphaMinRef", AlphaMinRef.get());
+ }
+ if ( ! AlphaMaxRef.empty() ) {
+ fprintf(stream, " %22s = %d\n", "AlphaMaxRef", AlphaMaxRef.get());
+ }
+ if ( ! ScanningDirection.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ScanningDirection", ScanningDirection.get());
+ }
}
//
@@ -1798,7 +2066,7 @@ JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0)
+CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), ColorSiting(0), PaddingBits(0), BlackRefLevel(0), ColorRange(0)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
@@ -1818,10 +2086,43 @@ CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
{
assert(m_Dict);
Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth));
+ 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, HorizontalSubsampling));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, VerticalSubsampling));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(CDCIEssenceDescriptor, ColorSiting));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
+ VerticalSubsampling.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
+ ColorSiting.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
+ ReversedByteOrder.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi16(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
+ PaddingBits.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
+ AlphaSampleDepth.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
+ BlackRefLevel.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
+ WhiteReflevel.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
+ ColorRange.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -1831,10 +2132,16 @@ CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
{
assert(m_Dict);
Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth));
+ 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, HorizontalSubsampling));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, VerticalSubsampling));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ColorSiting));
+ 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));
+ if ( ASDCP_SUCCESS(result) && ! ReversedByteOrder.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ReversedByteOrder));
+ if ( ASDCP_SUCCESS(result) && ! PaddingBits.empty() ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, PaddingBits));
+ if ( ASDCP_SUCCESS(result) && ! AlphaSampleDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, AlphaSampleDepth));
+ if ( ASDCP_SUCCESS(result) && ! BlackRefLevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, BlackRefLevel));
+ if ( ASDCP_SUCCESS(result) && ! WhiteReflevel.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, WhiteReflevel));
+ if ( ASDCP_SUCCESS(result) && ! ColorRange.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorRange));
return result;
}
@@ -1847,6 +2154,12 @@ CDCIEssenceDescriptor::Copy(const CDCIEssenceDescriptor& rhs)
HorizontalSubsampling = rhs.HorizontalSubsampling;
VerticalSubsampling = rhs.VerticalSubsampling;
ColorSiting = rhs.ColorSiting;
+ ReversedByteOrder = rhs.ReversedByteOrder;
+ PaddingBits = rhs.PaddingBits;
+ AlphaSampleDepth = rhs.AlphaSampleDepth;
+ BlackRefLevel = rhs.BlackRefLevel;
+ WhiteReflevel = rhs.WhiteReflevel;
+ ColorRange = rhs.ColorRange;
}
//
@@ -1860,10 +2173,34 @@ CDCIEssenceDescriptor::Dump(FILE* stream)
stream = stderr;
GenericPictureEssenceDescriptor::Dump(stream);
- fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth);
+ if ( ! ComponentDepth.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ComponentDepth", ComponentDepth.get());
+ }
fprintf(stream, " %22s = %d\n", "HorizontalSubsampling", HorizontalSubsampling);
- fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling);
- fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting);
+ if ( ! VerticalSubsampling.empty() ) {
+ fprintf(stream, " %22s = %d\n", "VerticalSubsampling", VerticalSubsampling.get());
+ }
+ if ( ! ColorSiting.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ColorSiting", ColorSiting.get());
+ }
+ if ( ! ReversedByteOrder.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ReversedByteOrder", ReversedByteOrder.get());
+ }
+ if ( ! PaddingBits.empty() ) {
+ fprintf(stream, " %22s = %d\n", "PaddingBits", PaddingBits.get());
+ }
+ if ( ! AlphaSampleDepth.empty() ) {
+ fprintf(stream, " %22s = %d\n", "AlphaSampleDepth", AlphaSampleDepth.get());
+ }
+ if ( ! BlackRefLevel.empty() ) {
+ fprintf(stream, " %22s = %d\n", "BlackRefLevel", BlackRefLevel.get());
+ }
+ if ( ! WhiteReflevel.empty() ) {
+ fprintf(stream, " %22s = %d\n", "WhiteReflevel", WhiteReflevel.get());
+ }
+ if ( ! ColorRange.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ColorRange", ColorRange.get());
+ }
}
//
@@ -1885,7 +2222,7 @@ CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0)
+MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), ProfileAndLevel(0)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
@@ -1906,9 +2243,18 @@ 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(MPEG2VideoDescriptor, LowDelay));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(MPEG2VideoDescriptor, BitRate));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, ProfileAndLevel));
+ 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.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
+ BitRate.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
+ ProfileAndLevel.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -1919,9 +2265,9 @@ 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) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, LowDelay));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, BitRate));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, ProfileAndLevel));
+ if ( ASDCP_SUCCESS(result) && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
+ 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;
}
@@ -1948,9 +2294,15 @@ MPEG2VideoDescriptor::Dump(FILE* stream)
CDCIEssenceDescriptor::Dump(stream);
fprintf(stream, " %22s = %d\n", "CodedContentType", CodedContentType);
- fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay);
- fprintf(stream, " %22s = %d\n", "BitRate", BitRate);
- fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel);
+ if ( ! LowDelay.empty() ) {
+ fprintf(stream, " %22s = %d\n", "LowDelay", LowDelay.get());
+ }
+ if ( ! BitRate.empty() ) {
+ fprintf(stream, " %22s = %d\n", "BitRate", BitRate.get());
+ }
+ if ( ! ProfileAndLevel.empty() ) {
+ fprintf(stream, " %22s = %d\n", "ProfileAndLevel", ProfileAndLevel.get());
+ }
}
//
@@ -2616,7 +2968,7 @@ NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), MCAChannelID(0)
+MCALabelSubDescriptor::MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_MCALabelSubDescriptor);
@@ -2639,9 +2991,18 @@ MCALabelSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCALinkID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagSymbol));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, MCATagName));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(MCALabelSubDescriptor, MCAChannelID));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(MCALabelSubDescriptor, RFC5646SpokenLanguage));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
+ MCATagName.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
+ MCAChannelID.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
+ RFC5646SpokenLanguage.set_has_value( result == RESULT_OK );
+ }
return result;
}
@@ -2654,9 +3015,9 @@ MCALabelSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALabelDictionaryID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCALinkID));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagSymbol));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCATagName));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(MCALabelSubDescriptor, MCAChannelID));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(MCALabelSubDescriptor, RFC5646SpokenLanguage));
+ if ( ASDCP_SUCCESS(result) && ! MCATagName.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCATagName));
+ if ( ASDCP_SUCCESS(result) && ! MCAChannelID.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, MCAChannelID));
+ if ( ASDCP_SUCCESS(result) && ! RFC5646SpokenLanguage.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(MCALabelSubDescriptor, RFC5646SpokenLanguage));
return result;
}
@@ -2687,9 +3048,15 @@ MCALabelSubDescriptor::Dump(FILE* stream)
fprintf(stream, " %22s = %s\n", "MCALabelDictionaryID", MCALabelDictionaryID.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s = %s\n", "MCALinkID", MCALinkID.EncodeString(identbuf, IdentBufferLen));
fprintf(stream, " %22s = %s\n", "MCATagSymbol", MCATagSymbol.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID);
- fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.EncodeString(identbuf, IdentBufferLen));
+ if ( ! MCATagName.empty() ) {
+ fprintf(stream, " %22s = %s\n", "MCATagName", MCATagName.get().EncodeString(identbuf, IdentBufferLen));
+ }
+ if ( ! MCAChannelID.empty() ) {
+ fprintf(stream, " %22s = %d\n", "MCAChannelID", MCAChannelID.get());
+ }
+ if ( ! RFC5646SpokenLanguage.empty() ) {
+ fprintf(stream, " %22s = %s\n", "RFC5646SpokenLanguage", RFC5646SpokenLanguage.get().EncodeString(identbuf, IdentBufferLen));
+ }
}
//
diff --git a/src/Metadata.h b/src/Metadata.h
index 7ee0940..007f22b 100755
--- a/src/Metadata.h
+++ b/src/Metadata.h
@@ -57,7 +57,7 @@ namespace ASDCP
UUID ProductUID;
Kumu::Timestamp ModificationDate;
VersionType ToolkitVersion;
- UTF16String Platform;
+ optional_property<UTF16String> Platform;
Identification(const Dictionary*& d);
Identification(const Identification& rhs);
@@ -105,7 +105,7 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
UMID LinkedPackageUID;
- ui32_t IndexSID;
+ optional_property<ui32_t> IndexSID;
ui32_t BodySID;
EssenceContainerData(const Dictionary*& d);
@@ -130,7 +130,7 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
UMID PackageUID;
- UTF16String Name;
+ optional_property<UTF16String> Name;
Kumu::Timestamp PackageCreationDate;
Kumu::Timestamp PackageModifiedDate;
Batch<UUID> Tracks;
@@ -154,6 +154,7 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
+ optional_property<UUID> PackageMarker;
MaterialPackage(const Dictionary*& d);
MaterialPackage(const MaterialPackage& rhs);
@@ -201,8 +202,8 @@ namespace ASDCP
const Dictionary*& m_Dict;
ui32_t TrackID;
ui32_t TrackNumber;
- UTF16String TrackName;
- UUID Sequence;
+ optional_property<UTF16String> TrackName;
+ optional_property<UUID> Sequence;
GenericTrack(const Dictionary*& d);
GenericTrack(const GenericTrack& rhs);
@@ -270,7 +271,7 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
UL DataDefinition;
- ui64_t Duration;
+ optional_property<ui64_t> Duration;
StructuralComponent(const Dictionary*& d);
StructuralComponent(const StructuralComponent& rhs);
@@ -386,11 +387,11 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
- ui32_t LinkedTrackID;
+ optional_property<ui32_t> LinkedTrackID;
Rational SampleRate;
- ui64_t ContainerDuration;
+ optional_property<ui64_t> ContainerDuration;
UL EssenceContainer;
- UL Codec;
+ optional_property<UL> Codec;
FileDescriptor(const Dictionary*& d);
FileDescriptor(const FileDescriptor& rhs);
@@ -415,10 +416,12 @@ namespace ASDCP
const Dictionary*& m_Dict;
Rational AudioSamplingRate;
ui8_t Locked;
- ui8_t AudioRefLevel;
+ optional_property<ui8_t> AudioRefLevel;
+ optional_property<ui8_t> ElectroSpatialFormulation;
ui32_t ChannelCount;
ui32_t QuantizationBits;
- ui8_t DialNorm;
+ optional_property<ui8_t> DialNorm;
+ UL SoundEssenceCoding;
GenericSoundEssenceDescriptor(const Dictionary*& d);
GenericSoundEssenceDescriptor(const GenericSoundEssenceDescriptor& rhs);
@@ -442,9 +445,9 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
ui16_t BlockAlign;
- ui8_t SequenceOffset;
+ optional_property<ui8_t> SequenceOffset;
ui32_t AvgBps;
- UL ChannelAssignment;
+ optional_property<UL> ChannelAssignment;
WaveAudioDescriptor(const Dictionary*& d);
WaveAudioDescriptor(const WaveAudioDescriptor& rhs);
@@ -467,15 +470,31 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
+ optional_property<ui8_t> SignalStandard;
ui8_t FrameLayout;
ui32_t StoredWidth;
ui32_t StoredHeight;
- Rational AspectRatio;
- UL PictureEssenceCoding;
- optional_property<ui32_t> DisplayWidth;
+ optional_property<ui32_t> StoredF2Offset;
+ optional_property<ui32_t> SampledWidth;
+ optional_property<ui32_t> SampledHeight;
+ optional_property<ui32_t> SampledXOffset;
+ optional_property<ui32_t> SampledYOffset;
optional_property<ui32_t> DisplayHeight;
- optional_property<UL> Gamma;
+ optional_property<ui32_t> DisplayWidth;
+ optional_property<ui32_t> DisplayXOffset;
+ optional_property<ui32_t> DisplayYOffset;
+ optional_property<ui32_t> DisplayF2Offset;
+ Rational AspectRatio;
+ optional_property<ui8_t> ActiveFormatDescriptor;
+ optional_property<ui8_t> AlphaTransparency;
+ optional_property<UL> TransferCharacteristic;
+ optional_property<ui32_t> ImageAlignmentOffset;
+ optional_property<ui32_t> ImageStartOffset;
+ optional_property<ui32_t> ImageEndOffset;
optional_property<ui8_t> FieldDominance;
+ UL PictureEssenceCoding;
+ optional_property<UL> CodingEquations;
+ optional_property<UL> ColorPrimaries;
GenericPictureEssenceDescriptor(const Dictionary*& d);
GenericPictureEssenceDescriptor(const GenericPictureEssenceDescriptor& rhs);
@@ -498,8 +517,11 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
- ui32_t ComponentMaxRef;
- ui32_t ComponentMinRef;
+ optional_property<ui32_t> ComponentMaxRef;
+ optional_property<ui32_t> ComponentMinRef;
+ optional_property<ui32_t> AlphaMinRef;
+ optional_property<ui32_t> AlphaMaxRef;
+ optional_property<ui8_t> ScanningDirection;
RGBAEssenceDescriptor(const Dictionary*& d);
RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs);
@@ -557,10 +579,16 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
- ui32_t ComponentDepth;
+ optional_property<ui32_t> ComponentDepth;
ui32_t HorizontalSubsampling;
- ui32_t VerticalSubsampling;
- ui8_t ColorSiting;
+ optional_property<ui32_t> VerticalSubsampling;
+ optional_property<ui8_t> ColorSiting;
+ optional_property<ui8_t> ReversedByteOrder;
+ optional_property<ui16_t> PaddingBits;
+ optional_property<ui32_t> AlphaSampleDepth;
+ optional_property<ui32_t> BlackRefLevel;
+ optional_property<ui32_t> WhiteReflevel;
+ optional_property<ui32_t> ColorRange;
CDCIEssenceDescriptor(const Dictionary*& d);
CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs);
@@ -584,9 +612,9 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
ui8_t CodedContentType;
- ui8_t LowDelay;
- ui32_t BitRate;
- ui8_t ProfileAndLevel;
+ optional_property<ui8_t> LowDelay;
+ optional_property<ui32_t> BitRate;
+ optional_property<ui8_t> ProfileAndLevel;
MPEG2VideoDescriptor(const Dictionary*& d);
MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs);
@@ -807,9 +835,9 @@ namespace ASDCP
UL MCALabelDictionaryID;
UUID MCALinkID;
UTF16String MCATagSymbol;
- UTF16String MCATagName;
- ui32_t MCAChannelID;
- ISO8String RFC5646SpokenLanguage;
+ optional_property<UTF16String> MCATagName;
+ optional_property<ui32_t> MCAChannelID;
+ optional_property<ISO8String> RFC5646SpokenLanguage;
MCALabelSubDescriptor(const Dictionary*& d);
MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs);