summaryrefslogtreecommitdiff
path: root/src/AS_DCP_TimedText.cpp
diff options
context:
space:
mode:
authorDean Bullock <dbullock@cinecert.com>2021-04-01 21:51:26 -0700
committerDean Bullock <dbullock@cinecert.com>2021-04-01 21:51:26 -0700
commit5eb05375a501f2f4a899939e431fdae335917bab (patch)
tree1b6ec7a9406d5e903ba9caa6b5fef7e3b1e1658e /src/AS_DCP_TimedText.cpp
parentd7eb56c61b98de5b06b5865807dc112b06b9f8b6 (diff)
Add operator error for 429-5 with too many PNGs.
- ST 429-5 implicitly limits timed text resources to 4095. - add a error log and exit when exceeded
Diffstat (limited to 'src/AS_DCP_TimedText.cpp')
-rw-r--r--src/AS_DCP_TimedText.cpp22
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);