added dist hook for new napali source.
[asdcplib.git] / src / AS_DCP_internal.h
index 7f1ef25a3c5b0fa16ea9dba7196e2a3e35b64859..464771d02ca7012aaf0a6c1475f989c797a602ac 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2004-2006, John Hurst
+Copyright (c) 2004-2009, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -86,16 +86,35 @@ namespace ASDCP
   //
 
   Result_t MD_to_WriterInfo(MXF::Identification*, WriterInfo&);
-  Result_t MD_to_CryptoInfo(MXF::CryptographicContext*, WriterInfo&);
+  Result_t MD_to_CryptoInfo(MXF::CryptographicContext*, WriterInfo&, const Dictionary&);
   Result_t EncryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESEncContext*);
   Result_t DecryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESDecContext*);
 
+  //
+ class KLReader : public ASDCP::KLVPacket
+    {
+      ASDCP_NO_COPY_CONSTRUCT(KLReader);
+      byte_t m_KeyBuf[SMPTE_UL_LENGTH*2];
+
+    public:
+      KLReader() {}
+      ~KLReader() {}
+
+      inline const byte_t* Key() { return m_KeyBuf; }
+      inline const ui64_t  Length() { return m_ValueLength; }
+      inline const ui64_t  KLLength() { return m_KLLength; }
+      
+      Result_t ReadKLFromFile(Kumu::FileReader& Reader);
+    };
+
   //
   class h__Reader
     {
       ASDCP_NO_COPY_CONSTRUCT(h__Reader);
+      h__Reader();
 
     public:
+      const Dictionary*  m_Dict;
       Kumu::FileReader   m_File;
       OPAtomHeader       m_HeaderPart;
       Partition          m_BodyPart;
@@ -105,7 +124,7 @@ namespace ASDCP
       ASDCP::FrameBuffer m_CtFrameBuf;
       Kumu::fpos_t       m_LastPosition;
 
-      h__Reader();
+      h__Reader(const Dictionary&);
       virtual ~h__Reader();
 
       Result_t InitInfo();
@@ -117,7 +136,7 @@ namespace ASDCP
                             const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC);
 
       // reads from current position
-      Result_t ReadEKLVPacket(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf,
+      Result_t ReadEKLVPacket(ui32_t FrameNum, ui32_t SequenceNum, ASDCP::FrameBuffer& FrameBuf,
                              const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC);
       void     Close();
     };
@@ -164,8 +183,10 @@ namespace ASDCP
   class h__Writer
     {
       ASDCP_NO_COPY_CONSTRUCT(h__Writer);
+      h__Writer();
 
     public:
+      const Dictionary*  m_Dict;
       Kumu::FileWriter   m_File;
       ui32_t             m_HeaderSize;
       OPAtomHeader       m_HeaderPart;
@@ -186,23 +207,23 @@ namespace ASDCP
       WriterInfo         m_Info;
       DurationElementList_t m_DurationUpdateList;
 
-      h__Writer();
+      h__Writer(const Dictionary&);
       virtual ~h__Writer();
 
       void InitHeader();
       void AddSourceClip(const MXF::Rational& EditRate, ui32_t TCFrameRate,
-                        const std::string& TrackName, const UL& DataDefinition,
-                        const std::string& PackageLabel);
+                        const std::string& TrackName, const UL& EssenceUL,
+                        const UL& DataDefinition, const std::string& PackageLabel);
       void AddDMSegment(const MXF::Rational& EditRate, ui32_t TCFrameRate,
-                        const std::string& TrackName, const UL& DataDefinition,
+                       const std::string& TrackName, const UL& DataDefinition,
                        const std::string& PackageLabel);
       void AddEssenceDescriptor(const UL& WrappingUL);
       Result_t CreateBodyPart(const MXF::Rational& EditRate, ui32_t BytesPerEditUnit = 0);
 
       // all the above for a single source clip
       Result_t WriteMXFHeader(const std::string& PackageLabel, const UL& WrappingUL,
-                             const std::string& TrackName, const UL& DataDefinition,
-                             const MXF::Rational& EditRate,
+                             const std::string& TrackName, const UL& EssenceUL,
+                             const UL& DataDefinition, const MXF::Rational& EditRate,
                              ui32_t TCFrameRate, ui32_t BytesPerEditUnit = 0);
 
       Result_t WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf,