Merge pull request #25 from remia/fix/non-pod-variadic-warning
[asdcplib.git] / src / AS_02_PHDR.cpp
index 9322b31697c995b86122a6726049a431c8b79a73..c08efd0bddadf23306173e95842274652537f9dc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2011-2015, John Hurst
+Copyright (c) 2011-2018, John Hurst
 
 All rights reserved.
 
@@ -445,7 +445,7 @@ AS_02::PHDR::MXFWriter::h__Writer::WritePHDRHeader(const std::string& PackageLab
       return RESULT_PARAM;
     }
   
-  InitHeader();
+  InitHeader(MXFVersion_2011);
   
   AddSourceClip(EditRate, EditRate/*TODO: for a moment*/, TCFrameRate, TrackName, EssenceUL, DataDefinition, PackageLabel);
 
@@ -500,6 +500,8 @@ AS_02::PHDR::MXFWriter::h__Writer::WritePHDRHeader(const std::string& PackageLab
       UL body_ul(m_Dict->ul(MDD_ClosedCompleteBodyPartition));
       Partition body_part(m_Dict);
       body_part.BodySID = 1;
+      body_part.MajorVersion = m_HeaderPart.MajorVersion;
+      body_part.MinorVersion = m_HeaderPart.MinorVersion;
       body_part.OperationalPattern = m_HeaderPart.OperationalPattern;
       body_part.EssenceContainers = m_HeaderPart.EssenceContainers;
       body_part.ThisPartition = m_ECStart;
@@ -570,7 +572,7 @@ AS_02::PHDR::MXFWriter::h__Writer::WriteFrame(const AS_02::PHDR::FrameBuffer& Fr
       ui64_t this_stream_offset = m_StreamOffset; // m_StreamOffset will be changed by the call to Write_EKLV_Packet
 
       result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
-                                m_StreamOffset, FrameBuf, m_EssenceUL, Ctx, HMAC);
+                                m_StreamOffset, FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC);
       
       if ( KM_SUCCESS(result) )
        {
@@ -580,7 +582,8 @@ AS_02::PHDR::MXFWriter::h__Writer::WriteFrame(const AS_02::PHDR::FrameBuffer& Fr
          
          
          result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
-                                    m_StreamOffset, metadata_buffer_wrapper, m_MetadataUL, Ctx, HMAC);
+                                    m_StreamOffset, metadata_buffer_wrapper, m_MetadataUL,
+                                    MXF_BER_LENGTH, Ctx, HMAC);
        }
       
       if ( KM_SUCCESS(result) )
@@ -592,13 +595,14 @@ AS_02::PHDR::MXFWriter::h__Writer::WriteFrame(const AS_02::PHDR::FrameBuffer& Fr
 
       if ( m_FramesWritten > 1 && ( ( m_FramesWritten + 1 ) % m_PartitionSpace ) == 0 )
        {
-         m_IndexWriter.ThisPartition = m_File.Tell();
-         m_IndexWriter.WriteToFile(m_File);
-         m_RIP.PairArray.push_back(RIP::PartitionPair(0, m_IndexWriter.ThisPartition));
+         assert(m_IndexWriter.GetDuration() > 0);
+         FlushIndexPartition();
 
          UL body_ul(m_Dict->ul(MDD_ClosedCompleteBodyPartition));
          Partition body_part(m_Dict);
          body_part.BodySID = 1;
+         body_part.MajorVersion = m_HeaderPart.MajorVersion;
+         body_part.MinorVersion = m_HeaderPart.MinorVersion;
          body_part.OperationalPattern = m_HeaderPart.OperationalPattern;
          body_part.EssenceContainers = m_HeaderPart.EssenceContainers;
          body_part.ThisPartition = m_File.Tell();
@@ -623,18 +627,16 @@ Result_t
 AS_02::PHDR::MXFWriter::h__Writer::Finalize(const std::string& PHDR_master_metadata)
 {
   if ( ! m_State.Test_RUNNING() )
-    return RESULT_STATE;
+    {
+      KM_RESULT_STATE_HERE();
+      return RESULT_STATE;
+    }
 
   Result_t result = m_State.Goto_FINAL();
 
   if ( KM_SUCCESS(result) )
     {
-      if ( m_IndexWriter.GetDuration() > 0 )
-       {
-         m_IndexWriter.ThisPartition = this->m_File.Tell();
-         m_IndexWriter.WriteToFile(this->m_File);
-         m_RIP.PairArray.push_back(RIP::PartitionPair(0, this->m_IndexWriter.ThisPartition));
-       }
+      FlushIndexPartition();
 
       if ( ! PHDR_master_metadata.empty() )
        {
@@ -645,6 +647,8 @@ AS_02::PHDR::MXFWriter::h__Writer::Finalize(const std::string& PHDR_master_metad
          static UL GenericStream_DataElement(m_Dict->ul(MDD_GenericStream_DataElement));
          ASDCP::MXF::Partition GSPart(m_Dict);
 
+         GSPart.MajorVersion = m_HeaderPart.MajorVersion;
+         GSPart.MinorVersion = m_HeaderPart.MinorVersion;
          GSPart.ThisPartition = here;
          GSPart.PreviousPartition = m_RIP.PairArray.back().ByteOffset;
          GSPart.OperationalPattern = m_HeaderPart.OperationalPattern;
@@ -664,7 +668,8 @@ AS_02::PHDR::MXFWriter::h__Writer::Finalize(const std::string& PHDR_master_metad
              tmp_buf.Size(PHDR_master_metadata.size());
 
              result = Write_EKLV_Packet(m_File, *m_Dict, m_HeaderPart, m_Info, m_CtFrameBuf, m_FramesWritten,
-                                        m_StreamOffset, tmp_buf, GenericStream_DataElement.Value(), 0, 0);
+                                        m_StreamOffset, tmp_buf, GenericStream_DataElement.Value(),
+                                        MXF_BER_LENGTH, 0, 0);
            }
        }