diff options
| author | jhurst <jhurst@cinecert.com> | 2018-03-25 22:54:20 +0000 |
|---|---|---|
| committer | jhurst <> | 2018-03-25 22:54:20 +0000 |
| commit | ffc88e36d1b15a863bad6577dee7d59254edfa22 (patch) | |
| tree | f46ee12919d9eb6690815eb01f48e3fae73ddfbb | |
| parent | 40ecb821a29d1049e0a69149b20e552c7fbb0ae0 (diff) | |
o Fixed MinorVersion error (was "2", is now "3") when writing BodyPartition packs preceding partitions in AS-02 files.
o Fixed AS-DCP timed text writer, was creating DM Segment instead of SourceClip in the source package.
o Changed SourcePackage timecode track start to 00:00:00:00 (was 01:00:00:00)
o Fixed reference counting errors in asdcp.MXFWriter and asdcp.TimedTextWriter that were causing asdcp.MXFReader and asdcp.TimedTextReader (respectively) to remain allocated after all references had been deleted, thus leaking file handles and memory.
o Fixed broken arg parser (missing format token in format string for "EssenceType" argument) in TimedTextWriter
| -rw-r--r-- | src/AS_02.h | 10 | ||||
| -rw-r--r-- | src/AS_02_internal.h | 2 | ||||
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 5 | ||||
| -rwxr-xr-x | src/AS_DCP_internal.h | 24 | ||||
| -rw-r--r-- | src/ST2052_TextParser.cpp | 27 | ||||
| -rwxr-xr-x | src/as-02-wrap.cpp | 10 |
6 files changed, 45 insertions, 33 deletions
diff --git a/src/AS_02.h b/src/AS_02.h index c768507..33163c3 100644 --- a/src/AS_02.h +++ b/src/AS_02.h @@ -367,12 +367,16 @@ namespace AS_02 // Opens an XML file for reading, parses data to provide a complete // set of stream metadata for the MXFWriter below. - Result_t OpenRead(const std::string& filename, const std::string& profile_name) const; + Result_t OpenRead(const std::string& filename) const; // Parse an XML string - Result_t OpenRead(const std::string& xml_doc, const std::string& filename, - const std::string& profile_name) const; + Result_t OpenRead(const std::string& xml_doc, const std::string& filename) const; + // The "profile_name" parameter was removed from OpenRead() because it made the API + // awkward WRT lexical compatibility with TimedText_Parser. The value can still be + // modified by changing the descriptor's NamespaceName property after the call to + // FillTimedTextDescriptor() has set it. + // Fill a TimedTextDescriptor struct with the values from the file's contents. // Returns RESULT_INIT if the file is not open. Result_t FillTimedTextDescriptor(ASDCP::TimedText::TimedTextDescriptor&) const; diff --git a/src/AS_02_internal.h b/src/AS_02_internal.h index 9153ac9..560fb6c 100644 --- a/src/AS_02_internal.h +++ b/src/AS_02_internal.h @@ -179,6 +179,8 @@ namespace AS_02 this->m_IndexWriter.SetPrimerLookup(&this->m_HeaderPart.m_Primer); this->m_RIP.PairArray.push_back(RIP::PartitionPair(0, 0)); // Header partition RIP entry + this->m_IndexWriter.MajorVersion = m_HeaderPart.MajorVersion; + this->m_IndexWriter.MinorVersion = m_HeaderPart.MinorVersion; this->m_IndexWriter.OperationalPattern = this->m_HeaderPart.OperationalPattern; this->m_IndexWriter.EssenceContainers = this->m_HeaderPart.EssenceContainers; diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp index ab8dab9..6e34a5d 100644 --- a/src/AS_DCP_TimedText.cpp +++ b/src/AS_DCP_TimedText.cpp @@ -594,11 +594,10 @@ ASDCP::TimedText::MXFWriter::h__Writer::SetSourceStream(ASDCP::TimedText::TimedT } // timecode rate and essence rate are the same - AddDMSegment(m_TDesc.EditRate, m_TDesc.EditRate, derive_timecode_rate_from_edit_rate(m_TDesc.EditRate), TIMED_TEXT_DEF_LABEL, - UL(m_Dict->ul(MDD_DataDataDef)), TIMED_TEXT_PACKAGE_LABEL); + AddSourceClip(m_TDesc.EditRate, m_TDesc.EditRate, derive_timecode_rate_from_edit_rate(m_TDesc.EditRate), + TIMED_TEXT_DEF_LABEL, m_EssenceUL, UL(m_Dict->ul(MDD_DataDataDef)), TIMED_TEXT_PACKAGE_LABEL); AddEssenceDescriptor(UL(m_Dict->ul(MDD_TimedTextWrappingClip))); - result = m_HeaderPart.WriteToFile(m_File, m_HeaderSize); if ( KM_SUCCESS(result) ) diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index aaa9e60..aad500e 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2004-2016, John Hurst +Copyright (c) 2004-2018, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -130,6 +130,13 @@ namespace ASDCP MXFVersion_MAX }; + // version numbers from the MXF spec, to be written into files + + ui8_t const MXF_ObjectModelVersion = 1; + ui8_t const MXF_2004_MinorVersion = 2; + ui8_t const MXF_2011_MinorVersion = 3; + + //------------------------------------------------------------------------------------------ // @@ -552,16 +559,16 @@ namespace ASDCP if ( mxf_ver == MXFVersion_2004 ) { - m_HeaderPart.MinorVersion = 2; - m_HeaderPart.m_Preface->Version = 258; - m_HeaderPart.m_Preface->ObjectModelVersion = 1; + m_HeaderPart.MinorVersion = MXF_2004_MinorVersion; + m_HeaderPart.m_Preface->Version = ((MXF_ObjectModelVersion < 8) | MXF_2004_MinorVersion); + m_HeaderPart.m_Preface->ObjectModelVersion = MXF_ObjectModelVersion; } else { assert(mxf_ver == MXFVersion_2011); - m_HeaderPart.MinorVersion = 3; - m_HeaderPart.m_Preface->Version = 259; - m_HeaderPart.m_Preface->ObjectModelVersion = 1; + m_HeaderPart.MinorVersion = MXF_2011_MinorVersion; + m_HeaderPart.m_Preface->Version = ((MXF_ObjectModelVersion < 8) | MXF_2011_MinorVersion); + m_HeaderPart.m_Preface->ObjectModelVersion = MXF_ObjectModelVersion; } // Identification @@ -658,8 +665,7 @@ namespace ASDCP TrackSet<TimecodeComponent> FPTCTrack = CreateTimecodeTrack<SourcePackage>(m_HeaderPart, *m_FilePackage, - tc_edit_rate, TCFrameRate, - ui64_C(3600) * TCFrameRate, m_Dict); + tc_edit_rate, TCFrameRate, 0, m_Dict); FPTCTrack.Sequence->Duration.set_has_value(); m_DurationUpdateList.push_back(&(FPTCTrack.Sequence->Duration.get())); diff --git a/src/ST2052_TextParser.cpp b/src/ST2052_TextParser.cpp index a98b4ca..305f46f 100644 --- a/src/ST2052_TextParser.cpp +++ b/src/ST2052_TextParser.cpp @@ -230,7 +230,7 @@ class AS_02::TimedText::ST2052_TextParser::h__TextParser { XMLElement m_Root; ResourceTypeMap_t m_ResourceTypes; - Result_t OpenRead(const std::string& profile_name); + Result_t OpenRead(); ASDCP_NO_COPY_CONSTRUCT(h__TextParser); @@ -259,22 +259,22 @@ public: return m_DefaultResolver; } - Result_t OpenRead(const std::string& filename, const std::string& profile_name); - Result_t OpenRead(const std::string& xml_doc, const std::string& filename, const std::string& profile_name); + Result_t OpenRead(const std::string& filename); + Result_t OpenRead(const std::string& xml_doc, const std::string& filename); Result_t ReadAncillaryResource(const byte_t *uuid, ASDCP::TimedText::FrameBuffer& FrameBuf, const ASDCP::TimedText::IResourceResolver& Resolver) const; }; // Result_t -AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& filename, const std::string& profile_name) +AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& filename) { Result_t result = ReadFileIntoString(filename, m_XMLDoc); if ( KM_SUCCESS(result) ) { m_Filename = filename; - result = OpenRead(profile_name); + result = OpenRead(); } return result; @@ -282,12 +282,11 @@ AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& // Result_t -AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& xml_doc, const std::string& filename, - const std::string& profile_name) +AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& xml_doc, const std::string& filename) { m_XMLDoc = xml_doc; m_Filename = filename; - return OpenRead(profile_name); + return OpenRead(); } @@ -297,7 +296,7 @@ std::string const IMSC1_textProfile = "http://www.w3.org/ns/ttml/profile/imsc1/t // Result_t -AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& profile_name) +AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead() { setup_default_font_family_list(); @@ -310,7 +309,6 @@ AS_02::TimedText::ST2052_TextParser::h__TextParser::OpenRead(const std::string& m_TDesc.EncodingName = "UTF-8"; // the XML parser demands UTF-8 m_TDesc.ResourceList.clear(); m_TDesc.ContainerDuration = 0; - m_TDesc.NamespaceName = profile_name; // set the profile explicitly std::set<std::string>::const_iterator i; // Attempt to set the profile from <conformsToStandard> @@ -466,11 +464,11 @@ AS_02::TimedText::ST2052_TextParser::~ST2052_TextParser() // Opens the stream for reading, parses enough data to provide a complete // set of stream metadata for the MXFWriter below. ASDCP::Result_t -AS_02::TimedText::ST2052_TextParser::OpenRead(const std::string& filename, const std::string& profile_name) const +AS_02::TimedText::ST2052_TextParser::OpenRead(const std::string& filename) const { const_cast<AS_02::TimedText::ST2052_TextParser*>(this)->m_Parser = new h__TextParser; - Result_t result = m_Parser->OpenRead(filename, profile_name); + Result_t result = m_Parser->OpenRead(filename); if ( ASDCP_FAILURE(result) ) const_cast<AS_02::TimedText::ST2052_TextParser*>(this)->m_Parser = 0; @@ -480,12 +478,11 @@ AS_02::TimedText::ST2052_TextParser::OpenRead(const std::string& filename, const // Parses an XML document to provide a complete set of stream metadata for the MXFWriter below. Result_t -AS_02::TimedText::ST2052_TextParser::OpenRead(const std::string& xml_doc, const std::string& filename, - const std::string& profile_name) const +AS_02::TimedText::ST2052_TextParser::OpenRead(const std::string& xml_doc, const std::string& filename) const { const_cast<AS_02::TimedText::ST2052_TextParser*>(this)->m_Parser = new h__TextParser; - Result_t result = m_Parser->OpenRead(xml_doc, filename, profile_name); + Result_t result = m_Parser->OpenRead(xml_doc, filename); if ( ASDCP_FAILURE(result) ) const_cast<AS_02::TimedText::ST2052_TextParser*>(this)->m_Parser = 0; diff --git a/src/as-02-wrap.cpp b/src/as-02-wrap.cpp index 8a32d71..49b552f 100755 --- a/src/as-02-wrap.cpp +++ b/src/as-02-wrap.cpp @@ -707,7 +707,7 @@ public: } } - if ( help_flag || version_flag ) + if ( help_flag || version_flag || show_ul_values_flag ) return; if ( filenames.size() < 2 ) @@ -1110,8 +1110,7 @@ write_timed_text_file(CommandOptions& Options) Kumu::FortunaRNG RNG; // set up essence parser - Result_t result = Parser.OpenRead(Options.filenames.front().c_str(), - Options.profile_name); + Result_t result = Parser.OpenRead(Options.filenames.front()); // set up MXF writer if ( ASDCP_SUCCESS(result) ) @@ -1121,6 +1120,11 @@ write_timed_text_file(CommandOptions& Options) TDesc.ContainerDuration = Options.duration; FrameBuffer.Capacity(Options.fb_size); + if ( ! Options.profile_name.empty() ) + { + TDesc.NamespaceName = Options.profile_name; + } + if ( Options.verbose_flag ) { fputs("IMF Timed-Text Descriptor:\n", stderr); |
