X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FTimedText_Parser.cpp;h=191a3535d5198d66e1f14b8931c1eee8cc74ea44;hb=5584493c50cfa0541398527741253a0db8cdbf18;hp=9b7ce3897c50d4f493bec9fd8fe4255e6f516c87;hpb=02e0d37bf7b192fcac4b8bb8c4c39a62d47c9531;p=asdcplib.git diff --git a/src/TimedText_Parser.cpp b/src/TimedText_Parser.cpp index 9b7ce38..191a353 100644 --- a/src/TimedText_Parser.cpp +++ b/src/TimedText_Parser.cpp @@ -78,8 +78,12 @@ public: if ( KM_SUCCESS(result) ) { - ui32_t read_count = 0; - result = Reader.Read(FrameBuf.Data(), FrameBuf.Capacity(), &read_count); + ui32_t read_count, read_size = Reader.Size(); + + result = FrameBuf.Capacity(read_size); + + if ( KM_SUCCESS(result) ) + result = Reader.Read(FrameBuf.Data(), read_size, &read_count); if ( KM_SUCCESS(result) ) FrameBuf.Size(read_count); @@ -229,9 +233,16 @@ ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead() m_TDesc.EditRate = decode_rational(EditRate->GetBody().c_str()); - if ( m_TDesc.EditRate != EditRate_24 && m_TDesc.EditRate != EditRate_48 ) + if ( m_TDesc.EditRate != EditRate_23_98 + && m_TDesc.EditRate != EditRate_24 + && m_TDesc.EditRate != EditRate_25 + && m_TDesc.EditRate != EditRate_30 + && m_TDesc.EditRate != EditRate_48 + && m_TDesc.EditRate != EditRate_50 + && m_TDesc.EditRate != EditRate_60 ) { - DefaultLogSink(). Error("EditRate must be 24/1 or 48/1\n"); + DefaultLogSink(). Error("Unexpected EditRate: %d/%d\n", + m_TDesc.EditRate.Numerator, m_TDesc.EditRate.Denominator); return RESULT_FORMAT; } @@ -292,11 +303,11 @@ ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead() return RESULT_FORMAT; } - // assumes 24/1 or 48/1 as constrained above - assert(m_TDesc.EditRate.Denominator == 1); + // assumes edit rate is constrained above + ui32_t TCFrameRate = ( m_TDesc.EditRate == EditRate_23_98 ) ? 24 : m_TDesc.EditRate.Numerator; S12MTimecode beginTC; - beginTC.SetFPS(m_TDesc.EditRate.Numerator); + beginTC.SetFPS(TCFrameRate); XMLElement* StartTime = m_Root.GetChildWithName("StartTime"); if ( StartTime != 0 ) @@ -304,7 +315,7 @@ ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead() for ( ei = InstanceList.begin(); ei != InstanceList.end(); ei++ ) { - S12MTimecode tmpTC((*ei)->GetAttrWithName("TimeOut"), m_TDesc.EditRate.Numerator); + S12MTimecode tmpTC((*ei)->GetAttrWithName("TimeOut"), TCFrameRate); if ( end_count < tmpTC.GetFrames() ) end_count = tmpTC.GetFrames(); }