o General review of Batch/Array distinction throughout the project
[asdcplib.git] / src / AS_02.h
index 6b34c777134ad595e3b552c9eb43d8a7b03819cb..17561fdbc47004d78782037320c25bb5d5e23492 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2011-2013, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
+Copyright (c) 2011-2014, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
 John Hurst
 
 All rights reserved.
@@ -118,16 +118,27 @@ namespace AS_02
     }
 
     // Returns number of frames for data described by ADesc, given a duration in samples and an edit rate
-    inline ui32_t CalcFramesFromDurationInSamples(const ui32_t durationInSamples, const ASDCP::MXF::WaveAudioDescriptor& d,
+    inline ui32_t CalcFramesFromDurationInSamples(const ui32_t duration_samples, const ASDCP::MXF::WaveAudioDescriptor& d,
                                                  const ASDCP::Rational& edit_rate)
     {
-      return static_cast<ui32_t>(static_cast<ui64_t>(durationInSamples) *
-                                static_cast<ui64_t>(d.AudioSamplingRate.Denominator * edit_rate.Numerator) /
-                                static_cast<ui64_t>(d.AudioSamplingRate.Numerator * edit_rate.Denominator));
+      ui32_t spf = CalcSamplesPerFrame(d, edit_rate);
+      ui32_t frames = duration_samples / spf;
+      
+      if ( duration_samples % spf != 0 )
+       {
+         ++frames;
+       }
+
+      return frames;
     }
 
   } // namespace MXF
 
+
+  // IMF App 2 edit rates not already exposed in namespace ASDCP
+  const ASDCP::Rational EditRate_29_97 = ASDCP::Rational(30000, 1001);
+  const ASDCP::Rational EditRate_59_94 = ASDCP::Rational(60000, 1001);
+
   //---------------------------------------------------------------------------------
   // Accessors in the MXFReader and MXFWriter classes below return these types to
   // provide direct access to MXF metadata structures declared in MXF.h and Metadata.h
@@ -322,6 +333,22 @@ namespace AS_02
       using ASDCP::TimedText::TimedTextResourceDescriptor;
       using ASDCP::TimedText::ResourceList_t;
 
+      //
+      class Type5UUIDFilenameResolver : public ASDCP::TimedText::IResourceResolver
+       {
+         typedef std::map<Kumu::UUID, std::string> ResourceMap;
+           
+         ResourceMap m_ResourceMap;
+         std::string m_Dirname;
+         KM_NO_COPY_CONSTRUCT(Type5UUIDFilenameResolver);
+
+       public:
+         Type5UUIDFilenameResolver();
+         virtual ~Type5UUIDFilenameResolver();
+         Result_t OpenRead(const std::string& dirname);
+         Result_t ResolveRID(const byte_t* uuid, ASDCP::TimedText::FrameBuffer& FrameBuf) const;
+       };
+      
       //
       class ST2052_TextParser
        {