Update copyright dates.
[asdcplib.git] / src / h__Writer.cpp
index 4e5bafeb9599f2423185672817e50a7828b32793..c088059449a2d1fb560fdc17d4fc4572c8ec441a 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2004-2007, John Hurst
+Copyright (c) 2004-2009, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -41,6 +41,31 @@ using namespace ASDCP::MXF;
 #endif
 
 
+static std::vector<int>
+version_split(const char* str)
+{
+  std::vector<int> result;
+
+  const char* pstr = str;
+  const char* r = strchr(pstr, '.');
+
+  while ( r != 0 )
+    {
+      assert(r >= pstr);
+      if ( r > pstr )
+       result.push_back(atoi(pstr));
+
+      pstr = r + 1;
+      r = strchr(pstr, '.');
+    }
+
+  if( strlen(pstr) > 0 )
+    result.push_back(atoi(pstr));
+
+  assert(result.size() == 3);
+  return result;
+}
+
 
 //
 ASDCP::h__Writer::h__Writer() :
@@ -124,9 +149,12 @@ ASDCP::h__Writer::InitHeader()
   Ident->VersionString = m_Info.ProductVersion.c_str();
   Ident->ProductUID.Set(m_Info.ProductUUID);
   Ident->Platform = ASDCP_PLATFORM;
-  Ident->ToolkitVersion.Major = VERSION_MAJOR;
-  Ident->ToolkitVersion.Minor = VERSION_APIMINOR;
-  Ident->ToolkitVersion.Patch = VERSION_IMPMINOR;
+
+  std::vector<int> version = version_split(Version());
+
+  Ident->ToolkitVersion.Major = version[0];
+  Ident->ToolkitVersion.Minor = version[1];
+  Ident->ToolkitVersion.Patch = version[2];
   Ident->ToolkitVersion.Build = ASDCP_BUILD_NUMBER;
   Ident->ToolkitVersion.Release = VersionType::RL_RELEASE;
 }
@@ -358,8 +386,11 @@ ASDCP::h__Writer::AddEssenceDescriptor(const UL& WrappingUL)
   m_HeaderPart.m_Preface->PrimaryPackage = m_FilePackage->InstanceUID;
 
   //
-  // Encryption Descriptor
+  // Essence Descriptors
   //
+  UL GenericContainerUL(Dict::ul(MDD_GCMulti));
+  m_HeaderPart.EssenceContainers.push_back(GenericContainerUL);
+
   if ( m_Info.EncryptedEssence )
     {
       UL CryptEssenceUL(Dict::ul(MDD_EncryptedContainerLabel));
@@ -369,7 +400,6 @@ ASDCP::h__Writer::AddEssenceDescriptor(const UL& WrappingUL)
     }
   else
     {
-      m_HeaderPart.EssenceContainers.push_back(UL(Dict::ul(MDD_GCMulti)));
       m_HeaderPart.EssenceContainers.push_back(WrappingUL);
     }