X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FAS_DCP_internal.h;h=ed9eec7e92dbd9d0878ba1bd60a942475a3beca1;hb=44bc524e3cf74f0903b7fbb51ca2f366f48d3495;hp=b59df2cebbcbdebdb85f56eec154d17853163474;hpb=34464c5616c053942cf7bdbb919bd8845cb0ceae;p=asdcplib.git diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index b59df2c..ed9eec7 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -90,6 +90,23 @@ namespace ASDCP 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 { @@ -111,7 +128,13 @@ namespace ASDCP Result_t InitInfo(); Result_t OpenMXFRead(const char* filename); Result_t InitMXFIndex(); - Result_t ReadEKLVPacket(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf, + + // positions file before reading + Result_t ReadEKLVFrame(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf, + const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC); + + // reads from current position + Result_t ReadEKLVPacket(ui32_t FrameNum, ui32_t SequenceNum, ASDCP::FrameBuffer& FrameBuf, const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC); void Close(); }; @@ -152,6 +175,8 @@ namespace ASDCP inline Result_t Goto_FINAL() { Goto_body(ST_RUNNING, ST_FINAL); } }; + typedef std::list DurationElementList_t; + // class h__Writer { @@ -166,28 +191,32 @@ namespace ASDCP ui64_t m_EssenceStart; MaterialPackage* m_MaterialPackage; - Sequence* m_MPTCSequence; - TimecodeComponent* m_MPTimecode; - Sequence* m_MPClSequence; - SourceClip* m_MPClip; //! Material Package SourceClip for each essence stream - SourcePackage* m_FilePackage; - Sequence* m_FPTCSequence; - TimecodeComponent* m_FPTimecode; - Sequence* m_FPClSequence; - SourceClip* m_FPClip; //! File Package SourceClip for each essence stream FileDescriptor* m_EssenceDescriptor; + std::list m_EssenceSubDescriptorList; ui32_t m_FramesWritten; ui64_t m_StreamOffset; ASDCP::FrameBuffer m_CtFrameBuf; h__WriterState m_State; WriterInfo m_Info; + DurationElementList_t m_DurationUpdateList; h__Writer(); 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); + void AddDMSegment(const MXF::Rational& EditRate, ui32_t TCFrameRate, + 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,