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