ASDCP::TimedText::LocalFilenameResolver::LocalFilenameResolver() {}
+ASDCP::TimedText::LocalFilenameResolver::~LocalFilenameResolver() {}
//
Result_t
{
assert(Element);
const char* p = Element->GetBody().c_str();
- if ( strncmp(p, "urn:uuid:", 9) == 0 ) p += 9;
+
+ if ( strncmp(p, "urn:uuid:", 9) == 0 )
+ {
+ p += 9;
+ }
+
return ID.DecodeHex(p);
}
bool
get_UUID_from_child_element(const char* name, XMLElement* Parent, UUID& outID)
{
- assert(name); assert(Parent);
+ assert(name);
+ assert(Parent);
XMLElement* Child = Parent->GetChildWithName(name);
- if ( Child == 0 ) return false;
- return get_UUID_from_element(Child, outID);
-}
-//
-static ASDCP::Rational
-decode_rational(const char* str_rat)
-{
- assert(str_rat);
- ui32_t Num = atoi(str_rat);
- ui32_t Den = 0;
-
- const char* den_str = strrchr(str_rat, ' ');
- if ( den_str != 0 )
- Den = atoi(den_str+1);
+ if ( Child == 0 )
+ {
+ return false;
+ }
- return ASDCP::Rational(Num, Den);
+ return get_UUID_from_element(Child, outID);
}
//
Result_t
ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead()
{
- if ( ! m_Root.ParseString(m_XMLDoc.c_str()) )
+ if ( ! m_Root.ParseString(m_XMLDoc) )
return RESULT_FORMAT;
m_TDesc.EncodingName = "UTF-8"; // the XML parser demands UTF-8
if ( ns == 0 )
{
- DefaultLogSink(). Warn("Document has no namespace name, assuming %s\n", c_dcst_namespace_name);
+ DefaultLogSink(). Warn("Document has no namespace name, assuming \"%s\".\n", c_dcst_namespace_name);
m_TDesc.NamespaceName = c_dcst_namespace_name;
}
else
UUID DocID;
if ( ! get_UUID_from_child_element("Id", &m_Root, DocID) )
{
- DefaultLogSink(). Error("Id element missing from input document\n");
+ DefaultLogSink(). Error("Id element missing from input document.\n");
return RESULT_FORMAT;
}
if ( EditRate == 0 )
{
- DefaultLogSink(). Error("EditRate element missing from input document\n");
+ DefaultLogSink().Error("EditRate element missing from input document.\n");
return RESULT_FORMAT;
}
- m_TDesc.EditRate = decode_rational(EditRate->GetBody().c_str());
+ if ( ! DecodeRational(EditRate->GetBody().c_str(), m_TDesc.EditRate) )
+ {
+ DefaultLogSink().Error("Error decoding edit rate value: \"%s\"\n", EditRate->GetBody().c_str());
+ return RESULT_FORMAT;
+ }
if ( m_TDesc.EditRate != EditRate_23_98
&& m_TDesc.EditRate != EditRate_24
&& m_TDesc.EditRate != EditRate_30
&& m_TDesc.EditRate != EditRate_48
&& m_TDesc.EditRate != EditRate_50
- && m_TDesc.EditRate != EditRate_60 )
+ && m_TDesc.EditRate != EditRate_60
+ && m_TDesc.EditRate != EditRate_96
+ && m_TDesc.EditRate != EditRate_100
+ && m_TDesc.EditRate != EditRate_120
+ && m_TDesc.EditRate != EditRate_192
+ && m_TDesc.EditRate != EditRate_200
+ && m_TDesc.EditRate != EditRate_240 )
{
DefaultLogSink(). Error("Unexpected EditRate: %d/%d\n",
m_TDesc.EditRate.Numerator, m_TDesc.EditRate.Denominator);
Result_t result = Resolver.ResolveRID(uuid, FrameBuf);
+ std::string resourceType;
+ if ( (*rmi).second == MT_PNG )
+ resourceType = "image/png";
+ else if ( (*rmi).second == MT_OPENTYPE )
+ resourceType = "application/x-font-opentype";
+ else
+ resourceType = "application/octet-stream";
+
if ( KM_SUCCESS(result) )
{
- if ( (*rmi).second == MT_PNG )
- FrameBuf.MIMEType("image/png");
-
- else if ( (*rmi).second == MT_OPENTYPE )
- FrameBuf.MIMEType("application/x-font-opentype");
-
- else
- FrameBuf.MIMEType("application/octet-stream");
+ FrameBuf.MIMEType(resourceType);
+ }
+ else
+ {
+ DefaultLogSink().Error("Resource not found: %s (%s)\n", TmpID.EncodeHex(buf, 64), resourceType.c_str());
}
+
return result;
}