diff options
Diffstat (limited to 'src/AS_DCP_TimedText.cpp')
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp index 60cb098..3bea4e3 100644 --- a/src/AS_DCP_TimedText.cpp +++ b/src/AS_DCP_TimedText.cpp @@ -518,6 +518,22 @@ ASDCP::TimedText::MXFWriter::h__Writer::SetSourceStream(ASDCP::TimedText::TimedT ResourceList_t::const_iterator ri; Result_t result = TimedText_TDesc_to_MD(m_TDesc); + /* st0429-5-2017 limitation: the maximum number of sub-descriptors + is limited by the maximum length of the sub-descriptor array + contained in the timed text descriptor in the MXF header + + catch it here for operator messages + + max bytes 65536 + + 8 - array len + array item size + 16*n - 16 * number of sub-descriptors + + max sub-descriptors is 4095 + (4095*16) + 8 = 65258 + (4096*16) + 8 = 65544 + */ + int resource_available = 4095; /* this method will grow the requested header buffer, m_HeaderSize, to accommodate the space needed for the timed text subdescriptors @@ -529,6 +545,12 @@ ASDCP::TimedText::MXFWriter::h__Writer::SetSourceStream(ASDCP::TimedText::TimedT bool sd_array_init = false; for ( ri = m_TDesc.ResourceList.begin() ; ri != m_TDesc.ResourceList.end() && ASDCP_SUCCESS(result); ri++ ) { + if (! resource_available--) + { + DefaultLogSink().Error("Exceeded allowed SMPTE ST 429-5 resources.\n"); + return RESULT_FORMAT; + } + TimedTextResourceSubDescriptor* resourceSubdescriptor = new TimedTextResourceSubDescriptor(m_Dict); GenRandomValue(resourceSubdescriptor->InstanceUID); resourceSubdescriptor->AncillaryResourceID.Set((*ri).ResourceID); |
