diff options
| author | jhurst <jhurst@cinecert.com> | 2006-01-06 08:17:23 +0000 |
|---|---|---|
| committer | jhurst <> | 2006-01-06 08:17:23 +0000 |
| commit | e73ef2046cf4f6beb730be071022aaedb3b44bba (patch) | |
| tree | a60dd194a13275efdd8748eb46cd6ca06aa3af95 /src | |
| parent | 6e23666cb6184999efc74577cfb1b524181ba5df (diff) | |
broken build, adding write
Diffstat (limited to 'src')
| -rwxr-xr-x | src/AS_DCP_AES.cpp | 50 | ||||
| -rwxr-xr-x | src/AS_DCP_MPEG2.cpp | 25 | ||||
| -rwxr-xr-x | src/AS_DCP_internal.h | 140 | ||||
| -rwxr-xr-x | src/asdcp-test.cpp | 63 | ||||
| -rwxr-xr-x | src/h__Writer.cpp | 60 |
5 files changed, 139 insertions, 199 deletions
diff --git a/src/AS_DCP_AES.cpp b/src/AS_DCP_AES.cpp index 3d36566..e21dba1 100755 --- a/src/AS_DCP_AES.cpp +++ b/src/AS_DCP_AES.cpp @@ -37,7 +37,6 @@ using namespace ASDCP; const int KEY_SIZE_BITS = 128; -#ifndef ASDCP_WITHOUT_OPENSSL #include <openssl/aes.h> #include <openssl/sha.h> #include <openssl/err.h> @@ -50,16 +49,9 @@ print_ssl_error() DefaultLogSink().Error("OpenSSL: %s\n", ERR_error_string(errval, err_buf)); } -#endif - - //------------------------------------------------------------------------------------------ -#ifdef ASDCP_WITHOUT_OPENSSL -class ASDCP::AESEncContext::h__AESContext -#else class ASDCP::AESEncContext::h__AESContext : public AES_KEY -#endif { public: byte_t m_IVec[CBC_BLOCK_SIZE]; @@ -79,7 +71,6 @@ ASDCP::AESEncContext::InitKey(const byte_t* key) if ( m_Context ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL m_Context = new h__AESContext; if ( AES_set_encrypt_key(key, KEY_SIZE_BITS, m_Context) ) @@ -89,9 +80,6 @@ ASDCP::AESEncContext::InitKey(const byte_t* key) } return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } @@ -106,12 +94,8 @@ ASDCP::AESEncContext::SetIVec(const byte_t* i_vec) if ( ! m_Context ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL memcpy(m_Context->m_IVec, i_vec, CBC_BLOCK_SIZE); return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } @@ -125,12 +109,8 @@ ASDCP::AESEncContext::GetIVec(byte_t* i_vec) const if ( ! m_Context ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL memcpy(i_vec, m_Context->m_IVec, CBC_BLOCK_SIZE); return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } @@ -147,7 +127,6 @@ ASDCP::AESEncContext::EncryptBlock(const byte_t* pt_buf, byte_t* ct_buf, ui32_t if ( m_Context.empty() ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL h__AESContext* Ctx = m_Context; byte_t tmp_buf[CBC_BLOCK_SIZE]; const byte_t* in_p = pt_buf; @@ -168,19 +147,12 @@ ASDCP::AESEncContext::EncryptBlock(const byte_t* pt_buf, byte_t* ct_buf, ui32_t } return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } //------------------------------------------------------------------------------------------ -#ifdef ASDCP_WITHOUT_OPENSSL -class ASDCP::AESDecContext::h__AESContext -#else class ASDCP::AESDecContext::h__AESContext : public AES_KEY -#endif { public: byte_t m_IVec[CBC_BLOCK_SIZE]; @@ -200,7 +172,6 @@ ASDCP::AESDecContext::InitKey(const byte_t* key) if ( m_Context ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL m_Context = new h__AESContext; if ( AES_set_decrypt_key(key, KEY_SIZE_BITS, m_Context) ) @@ -210,9 +181,6 @@ ASDCP::AESDecContext::InitKey(const byte_t* key) } return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } // Initializes 16 byte CBC Initialization Vector. This operation may be performed @@ -226,12 +194,8 @@ ASDCP::AESDecContext::SetIVec(const byte_t* i_vec) if ( ! m_Context ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL memcpy(m_Context->m_IVec, i_vec, CBC_BLOCK_SIZE); return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } // Decrypt a 16 byte block of data. @@ -247,7 +211,6 @@ ASDCP::AESDecContext::DecryptBlock(const byte_t* ct_buf, byte_t* pt_buf, ui32_t if ( m_Context.empty() ) return RESULT_INIT; -#ifndef ASDCP_WITHOUT_OPENSSL register h__AESContext* Ctx = m_Context; const byte_t* in_p = ct_buf; @@ -268,9 +231,6 @@ ASDCP::AESDecContext::DecryptBlock(const byte_t* ct_buf, byte_t* pt_buf, ui32_t } return RESULT_OK; -#else // ASDCP_WITHOUT_OPENSSL - return RESULT_FAIL; -#endif // ASDCP_WITHOUT_OPENSSL } //------------------------------------------------------------------------------------------ @@ -284,9 +244,7 @@ static byte_t opad[KeyLen] = { 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, class HMACContext::h__HMACContext { -#ifndef ASDCP_WITHOUT_OPENSSL SHA_CTX m_SHA; -#endif // ASDCP_WITHOUT_OPENSSL byte_t m_key[KeyLen]; ASDCP_NO_COPY_CONSTRUCT(h__HMACContext); @@ -302,7 +260,6 @@ public: { static byte_t key_nonce[KeyLen] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }; -#ifndef ASDCP_WITHOUT_OPENSSL byte_t sha_buf[SHA_DIGEST_LENGTH]; // 7.10: MICKey = trunc( SHA1 ( key, key_nonce ) ) @@ -314,13 +271,11 @@ public: memcpy(m_key, sha_buf, KeyLen); Reset(); -#endif // ASDCP_WITHOUT_OPENSSL } void Reset() { -#ifndef ASDCP_WITHOUT_OPENSSL byte_t xor_buf[KeyLen]; memset(sha_value, 0, HMAC_SIZE); m_Final = false; @@ -332,25 +287,21 @@ public: xor_buf[i] = m_key[i] ^ ipad[i]; SHA1_Update(&m_SHA, xor_buf, KeyLen); -#endif // ASDCP_WITHOUT_OPENSSL } // void Update(const byte_t* buf, ui32_t buf_len) { -#ifndef ASDCP_WITHOUT_OPENSSL // H(K XOR opad, H(K XOR ipad, text)) // ^^^^ SHA1_Update(&m_SHA, buf, buf_len); -#endif // ASDCP_WITHOUT_OPENSSL } // void Finalize() { -#ifndef ASDCP_WITHOUT_OPENSSL // H(K XOR opad, H(K XOR ipad, text)) // ^^^^^^^^^^^^^^^ SHA1_Final(sha_value, &m_SHA); @@ -368,7 +319,6 @@ public: SHA1_Final(sha_value, &SHA); m_Final = true; -#endif // ASDCP_WITHOUT_OPENSSL } }; diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 103cd44..51fd802 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -65,6 +65,14 @@ ASDCP::MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescri // +ASDCP::Result_t +ASDCP::MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor&, MXF::MPEG2VideoDescriptor*) +{ + return RESULT_OK; +} + + +// void ASDCP::MPEG2::VideoDescriptorDump(const VideoDescriptor& VDesc, FILE* stream) { @@ -350,8 +358,6 @@ ASDCP::MPEG2::MXFReader::DumpIndex(FILE* stream) const //------------------------------------------------------------------------------------------ -#if 0 - // class ASDCP::MPEG2::MXFWriter::h__Writer : public ASDCP::h__Writer @@ -380,13 +386,11 @@ ASDCP::MPEG2::MXFWriter::h__Writer::OpenWrite(const char* filename, ui32_t Heade if ( ! m_State.Test_BEGIN() ) return RESULT_STATE; - m_File = new MXFFile; - - Result_t result = m_File->OpenWrite(filename); + Result_t result = m_File.OpenWrite(filename); if ( ASDCP_SUCCESS(result) ) { - m_EssenceDescriptor = new MDObject("MPEG2VideoDescriptor"); + // m_EssenceDescriptor = new MDObject("MPEG2VideoDescriptor"); result = m_State.Goto_INIT(); } @@ -401,7 +405,7 @@ ASDCP::MPEG2::MXFWriter::h__Writer::SetSourceStream(const VideoDescriptor& VDesc return RESULT_STATE; m_VDesc = VDesc; - Result_t result = MPEG2_VDesc_to_MD(m_VDesc, *m_EssenceDescriptor); + Result_t result = RESULT_OK; // MPEG2_VDesc_to_MD(m_VDesc, *m_EssenceDescriptor); if ( ASDCP_SUCCESS(result) ) result = WriteMXFHeader(ESS_MPEG2_VES, m_VDesc.EditRate, 24 /* TCFrameRate */); @@ -454,9 +458,11 @@ ASDCP::MPEG2::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESE } // update the index manager +#if 0 m_IndexMan->OfferEditUnit(0, m_FramesWritten, m_GOPOffset, Flags); m_IndexMan->OfferTemporalOffset(m_FramesWritten, m_GOPOffset - FrameBuf.TemporalOffset()); m_IndexMan->OfferOffset(0, m_FramesWritten, ThisOffset); +#endif m_FramesWritten++; m_GOPOffset++; @@ -473,9 +479,6 @@ ASDCP::MPEG2::MXFWriter::h__Writer::Finalize() if ( ! m_State.Test_RUNNING() ) return RESULT_STATE; - if ( ! m_File ) - return RESULT_INIT; - m_State.Goto_FINAL(); return WriteMXFFooter(ESS_MPEG2_VES); @@ -540,7 +543,7 @@ ASDCP::MPEG2::MXFWriter::Finalize() return m_Writer->Finalize(); } -#endif + // // end AS_DCP_MPEG2.cpp diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index 473a4ab..c903698 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2004-2005, John Hurst +Copyright (c) 2004-2006, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -164,25 +164,15 @@ namespace ASDCP //------------------------------------------------------------------------------------------ // - // MDObject* GetMDObjectByPath(MDObject&, const std::string); - // MDObject* GetMDObjectByType(MDObject&, const std::string); - // void DumpMDObject(MDObject&, std::string = " ", FILE* = 0); - // void DumpHeader(Partition&, FILE* = 0); - // void DumpIndexTable(IndexTablePtr, ui64_t = 0, FILE* = 0); - // Result_t init_mxf_types(); Result_t MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor*, MPEG2::VideoDescriptor&); Result_t MD_to_JP2K_PDesc(MXF::RGBAEssenceDescriptor*, JP2K::PictureDescriptor&); Result_t MD_to_PCM_ADesc(MXF::WaveAudioDescriptor*, PCM::AudioDescriptor&); Result_t MD_to_WriterInfo(MXF::Identification*, WriterInfo&); Result_t MD_to_CryptoInfo(MXF::CryptographicContext*, WriterInfo&); - -#if 0 - Result_t MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor&, MDObject&); - Result_t JP2K_PDesc_to_MD(JP2K::PictureDescriptor&, MDObject&); - Result_t PCM_ADesc_to_MD(PCM::AudioDescriptor&, MDObject&); - void AddDMScrypt(PackagePtr, WriterInfo&, const byte_t*); -#endif - + Result_t MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor&, MXF::MPEG2VideoDescriptor*); + Result_t JP2K_PDesc_to_MD(JP2K::PictureDescriptor&, MXF::RGBAEssenceDescriptor*); + Result_t PCM_ADesc_to_MD(PCM::AudioDescriptor&, MXF::WaveAudioDescriptor*); + // void AddDMScrypt(PackagePtr, WriterInfo&, const byte_t*); Result_t EncryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESEncContext*); Result_t DecryptFrameBuffer(const ASDCP::FrameBuffer&, ASDCP::FrameBuffer&, AESDecContext*); @@ -212,9 +202,7 @@ namespace ASDCP h__Reader(); virtual ~h__Reader(); - // - // MDObject* GetMDObjectByType(const std::string ObjName); - // MDObject* GetMDObjectByPath(const std::string ObjPath); + Result_t InitInfo(WriterInfo& Info); Result_t OpenMXFRead(const char* filename); Result_t InitMXFIndex(); @@ -223,6 +211,93 @@ namespace ASDCP void Close(); }; + + // state machine for mxf writer + enum WriterState_t { + ST_BEGIN, // waiting for Open() + ST_INIT, // waiting for SetSourceStream() + ST_READY, // ready to write frames + ST_RUNNING, // one or more frames written + ST_FINAL, // index written, file closed + }; + + // implementation of h__WriterState class Goto_* methods +#define Goto_body(s1,s2) if ( m_State != (s1) ) \ + return RESULT_STATE; \ + m_State = (s2); \ + return RESULT_OK + // + class h__WriterState + { + ASDCP_NO_COPY_CONSTRUCT(h__WriterState); + + public: + WriterState_t m_State; + h__WriterState() : m_State(ST_BEGIN) {} + ~h__WriterState() {} + + inline bool Test_BEGIN() { return m_State == ST_BEGIN; } + inline bool Test_INIT() { return m_State == ST_INIT; } + inline bool Test_READY() { return m_State == ST_READY;} + inline bool Test_RUNNING() { return m_State == ST_RUNNING; } + inline bool Test_FINAL() { return m_State == ST_FINAL; } + inline Result_t Goto_INIT() { Goto_body(ST_BEGIN, ST_INIT); } + inline Result_t Goto_READY() { Goto_body(ST_INIT, ST_READY); } + inline Result_t Goto_RUNNING() { Goto_body(ST_READY, ST_RUNNING); } + inline Result_t Goto_FINAL() { Goto_body(ST_RUNNING, ST_FINAL); } + }; + + // + class h__Writer + { + ASDCP_NO_COPY_CONSTRUCT(h__Writer); + + public: + FileWriter m_File; + OPAtomHeader m_HeaderPart; + Partition m_BodyPart; + OPAtomIndexFooter m_FooterPart; + +#if 0 + ui64_t m_EssenceStart; + WriterInfo m_Info; + ASDCP::FrameBuffer m_CtFrameBuf; + + mem_ptr<MXFFile> m_File; + mem_ptr<Metadata> m_Metadata; + mem_ptr<Package> m_FilePackage; + mem_ptr<Partition> m_HeaderPart; + mem_ptr<MDObject> m_EssenceDescriptor; + mem_ptr<Package> m_MaterialPackage; + mem_ptr<Track> m_MPTrack; //! Material Package track for each essence stream + mem_ptr<Track> m_FPTrack; //! File Package track for each essence stream + mem_ptr<TimecodeComponent> m_MPTimecode; + mem_ptr<TimecodeComponent> m_FPTimecode; + mem_ptr<IndexManager> m_IndexMan; + SourceClip* m_MPClip; //! Material Package SourceClip for each essence stream + SourceClip* m_FPClip; //! File Package SourceClip for each essence stream +#endif + + i32_t m_EssenceID; //! Essence stream ID for each essence stream + ui32_t m_FramesWritten; + ui64_t m_StreamOffset; + ASDCP::FrameBuffer m_CtFrameBuf; + h__WriterState m_State; + WriterInfo m_Info; + FrameBuffer m_CryptFrameBuf; + + h__Writer(); + virtual ~h__Writer(); + + Result_t WriteMXFHeader(EssenceType_t EssenceType, Rational& EditRate, + ui32_t TCFrameRate, ui32_t BytesPerEditUnit = 0); + Result_t WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, + const byte_t* EssenceUL, AESEncContext* Ctx, HMACContext* HMAC); + Result_t WriteMXFFooter(EssenceType_t EssenceType); + + }; + + // helper class for calculating Integrity Packs, used by WriteEKLVPacket() below. // class IntegrityPack @@ -258,35 +333,6 @@ namespace ASDCP inline const ui64_t Length() { return m_Length; } inline const ui64_t KLLength() { return m_BERLength + klv_key_size; } Result_t ReadKLFromFile(ASDCP::FileReader& Reader); -#if 0 - // - { - ui32_t read_count; - m_HeaderLength = klv_key_size + klv_length_size; - Result_t result = Reader.Read(m_Key, m_HeaderLength, &read_count); - assert(read_count == m_HeaderLength); - - if ( ASDCP_SUCCESS(result) ) - { - m_BERLength = BER_length(m_Key + klv_key_size); - - if ( m_BERLength != klv_length_size ) - { - ASDCP::DefaultLogSink().Error("Found packet with BER length %lu; being less efficient...\n", - m_BERLength); - // TODO: recover the correct BER value - // and reposition the file pointer - assert(0); - } - - if ( ! read_BER(m_Key + klv_key_size, &m_Length) ) - return RESULT_FAIL; - } - - return result; - } -#endif - }; } // namespace ASDCP diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp index 1dfc33f..92dfd39 100755 --- a/src/asdcp-test.cpp +++ b/src/asdcp-test.cpp @@ -269,24 +269,8 @@ public: case 'V': version_flag = true; break; case 'h': help_flag = true; break; case 'v': verbose_flag = true; break; - case 'g': -#ifdef ASDCP_WITHOUT_OPENSSL - fputs("Program compiled without encryption support.\n", stderr); - return; -#else - genkey_flag = true; -#endif - break; - - case 'u': -#ifdef ASDCP_WITHOUT_OPENSSL - fputs("Program compiled without encryption support.\n", stderr); - return; -#else - genid_flag = true; -#endif - break; - + case 'g': genkey_flag = true; break; + case 'u': genid_flag = true; break; case 'e': encrypt_header_flag = true; break; case 'E': encrypt_header_flag = false; break; case 'M': write_hmac = false; break; @@ -305,10 +289,6 @@ public: break; case 'k': key_flag = true; -#ifdef ASDCP_WITHOUT_OPENSSL - fputs("Program compiled without encryption support.\n", stderr); - return; -#else TEST_EXTRA_ARG(i, 'k'); { ui32_t length; @@ -320,14 +300,9 @@ public: return; } } -#endif break; case 'j': key_id_flag = true; -#ifdef ASDCP_WITHOUT_OPENSSL - fputs("Program compiled without encryption support.\n", stderr); - return; -#else TEST_EXTRA_ARG(i, 'j'); { ui32_t length; @@ -339,7 +314,6 @@ public: return; } } -#endif break; case 'f': @@ -410,7 +384,7 @@ public: //------------------------------------------------------------------------------------------ // MPEG2 essence -#if 0 + // Write a plaintext MPEG2 Video Elementary Stream to a plaintext ASDCP file // Write a plaintext MPEG2 Video Elementary Stream to a ciphertext ASDCP file // @@ -423,11 +397,8 @@ write_MPEG2_file(CommandOptions& Options) MPEG2::Parser Parser; MPEG2::MXFWriter Writer; MPEG2::VideoDescriptor VDesc; - -#ifndef ASDCP_WITHOUT_OPENSSL byte_t IV_buf[CBC_BLOCK_SIZE]; FortunaRNG RNG; -#endif // set up essence parser Result_t result = Parser.OpenRead(Options.filenames[0]); @@ -449,7 +420,6 @@ write_MPEG2_file(CommandOptions& Options) if ( ASDCP_SUCCESS(result) && ! Options.no_write_flag ) { WriterInfo Info = s_MyInfo; // fill in your favorite identifiers here -#ifndef ASDCP_WITHOUT_OPENSSL GenRandomUUID(RNG, Info.AssetUUID); // configure encryption @@ -476,7 +446,6 @@ write_MPEG2_file(CommandOptions& Options) result = HMAC->InitKey(Options.key_value); } } -#endif // ASDCP_WITHOUT_OPENSSL if ( ASDCP_SUCCESS(result) ) result = Writer.OpenWrite(Options.out_file, Info, VDesc); @@ -508,14 +477,12 @@ write_MPEG2_file(CommandOptions& Options) { result = Writer.WriteFrame(FrameBuffer, Context, HMAC); -#ifndef ASDCP_WITHOUT_OPENSSL // The Writer class will forward the last block of ciphertext // to the encryption context for use as the IV for the next // frame. If you want to use non-sequitur IV values, un-comment // the following line of code. // if ( ASDCP_SUCCESS(result) && Options.key_flag ) // Context->SetIVec(RNG.FillRandom(IV_buf, CBC_BLOCK_SIZE)); -#endif } } @@ -528,7 +495,6 @@ write_MPEG2_file(CommandOptions& Options) return result; } -#endif // Read a plaintext MPEG2 Video Elementary Stream from a plaintext ASDCP file // Read a plaintext MPEG2 Video Elementary Stream from a ciphertext ASDCP file @@ -658,7 +624,6 @@ gop_start_test(CommandOptions& Options) return result; } -#if 0 //------------------------------------------------------------------------------------------ // JPEG 2000 essence @@ -674,11 +639,8 @@ write_JP2K_file(CommandOptions& Options) JP2K::FrameBuffer FrameBuffer(Options.fb_size); JP2K::PictureDescriptor PDesc; JP2K::SequenceParser Parser; - -#ifndef ASDCP_WITHOUT_OPENSSL byte_t IV_buf[CBC_BLOCK_SIZE]; FortunaRNG RNG; -#endif // set up essence parser Result_t result = Parser.OpenRead(Options.filenames[0]); @@ -701,7 +663,6 @@ write_JP2K_file(CommandOptions& Options) if ( ASDCP_SUCCESS(result) && ! Options.no_write_flag ) { WriterInfo Info = s_MyInfo; // fill in your favorite identifiers here -#ifndef ASDCP_WITHOUT_OPENSSL GenRandomUUID(RNG, Info.AssetUUID); // configure encryption @@ -728,7 +689,6 @@ write_JP2K_file(CommandOptions& Options) result = HMAC->InitKey(Options.key_value); } } -#endif // ASDCP_WITHOUT_OPENSSL if ( ASDCP_SUCCESS(result) ) result = Writer.OpenWrite(Options.out_file, Info, PDesc); @@ -758,14 +718,13 @@ write_JP2K_file(CommandOptions& Options) if ( ASDCP_SUCCESS(result) && ! Options.no_write_flag ) { result = Writer.WriteFrame(FrameBuffer, Context, HMAC); -#ifndef ASDCP_WITHOUT_OPENSSL + // The Writer class will forward the last block of ciphertext // to the encryption context for use as the IV for the next // frame. If you want to use non-sequitur IV values, un-comment // the following line of code. // if ( ASDCP_SUCCESS(result) && Options.key_flag ) // Context->SetIVec(RNG.FillRandom(IV_buf, CBC_BLOCK_SIZE)); -#endif } } @@ -778,7 +737,6 @@ write_JP2K_file(CommandOptions& Options) return result; } -#endif // Read one or more plaintext JPEG 2000 codestreams from a plaintext ASDCP file // Read one or more plaintext JPEG 2000 codestreams from a ciphertext ASDCP file @@ -858,7 +816,6 @@ read_JP2K_file(CommandOptions& Options) return result; } -#if 0 //------------------------------------------------------------------------------------------ // PCM essence @@ -876,11 +833,8 @@ write_PCM_file(CommandOptions& Options) PCM::FrameBuffer FrameBuffer; PCM::AudioDescriptor ADesc; Rational PictureRate = Options.PictureRate(); - -#ifndef ASDCP_WITHOUT_OPENSSL byte_t IV_buf[CBC_BLOCK_SIZE]; FortunaRNG RNG; -#endif // set up essence parser Result_t result = Parser.OpenRead(Options.file_count, Options.filenames, PictureRate); @@ -906,7 +860,6 @@ write_PCM_file(CommandOptions& Options) if ( ASDCP_SUCCESS(result) && ! Options.no_write_flag ) { WriterInfo Info = s_MyInfo; // fill in your favorite identifiers here -#ifndef ASDCP_WITHOUT_OPENSSL GenRandomUUID(RNG, Info.AssetUUID); // configure encryption @@ -933,7 +886,6 @@ write_PCM_file(CommandOptions& Options) result = HMAC->InitKey(Options.key_value); } } -#endif // ASDCP_WITHOUT_OPENSSL if ( ASDCP_SUCCESS(result) ) result = Writer.OpenWrite(Options.out_file, Info, ADesc); @@ -965,14 +917,12 @@ write_PCM_file(CommandOptions& Options) { result = Writer.WriteFrame(FrameBuffer, Context, HMAC); -#ifndef ASDCP_WITHOUT_OPENSSL // The Writer class will forward the last block of ciphertext // to the encryption context for use as the IV for the next // frame. If you want to use non-sequitur IV values, un-comment // the following line of code. // if ( ASDCP_SUCCESS(result) && Options.key_flag ) // Context->SetIVec(RNG.FillRandom(IV_buf, CBC_BLOCK_SIZE)); -#endif } } } @@ -986,7 +936,6 @@ write_PCM_file(CommandOptions& Options) return result; } -#endif // Read one or more plaintext PCM audio streams from a plaintext ASDCP file // Read one or more plaintext PCM audio streams from a ciphertext ASDCP file @@ -1253,7 +1202,6 @@ main(int argc, const char** argv) { result = gop_start_test(Options); } -#ifndef ASDCP_WITHOUT_OPENSSL else if ( Options.genkey_flag ) { FortunaRNG RNG; @@ -1273,7 +1221,6 @@ main(int argc, const char** argv) bin2hex(bin_buf, KeyLen, str_buf, 40); printf("%s\n", hyphenate_UUID(str_buf, 40)); } -#endif // ASDCP_WITHOUT_OPENSSL else if ( Options.extract_flag ) { EssenceType_t EssenceType; @@ -1307,7 +1254,6 @@ main(int argc, const char** argv) { fprintf(stderr, "ATTENTION! This version of asdcplib does not support writing MXF files.\n"); -#if 0 if ( Options.do_repeat && ! Options.duration_flag ) { fputs("Option -R requires -d <duration>\n", stderr); @@ -1341,7 +1287,6 @@ main(int argc, const char** argv) return 5; } } -#endif } if ( result != RESULT_OK ) diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp index 411f63e..7af5710 100755 --- a/src/h__Writer.cpp +++ b/src/h__Writer.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2004-2005, John Hurst +Copyright (c) 2004-2006, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -32,15 +32,16 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AS_DCP_internal.h" #include "MemIO.h" #include "Timecode.h" +#include "KLV.h" +#include "MDD.h" #include <assert.h> -using namespace mxflib; using namespace ASDCP; +using namespace ASDCP::MXF; ASDCP::h__Writer::h__Writer() : m_FramesWritten(0), m_StreamOffset(0) { - init_mxf_types(); } ASDCP::h__Writer::~h__Writer() @@ -52,6 +53,7 @@ Result_t ASDCP::h__Writer::WriteMXFHeader(EssenceType_t EssenceType, ASDCP::Rational& EditRate, ui32_t TCFrameRate, ui32_t BytesPerEditUnit) { +#if 0 // write the stream metadata m_Metadata = new Metadata(); assert(m_Metadata); @@ -73,18 +75,10 @@ ASDCP::h__Writer::WriteMXFHeader(EssenceType_t EssenceType, ASDCP::Rational& Edi UMID PackageUMID; PackageUMID.MakeUMID(0x0d); // mixed type -#if ASDCP_USE_MXFLIB - mxflib::Rational EditRate_; - EditRate_.Numerator = EditRate.Numerator; - EditRate_.Denominator = EditRate.Denominator; -#else -#define EditRate_ EditRate -#endif - m_MaterialPackage = m_Metadata->AddMaterialPackage("AS-DCP Material Package", PackageUMID); m_Metadata->SetPrimaryPackage(m_MaterialPackage); // This will be overwritten for OP-Atom - TrackPtr MPTimecodeTrack = m_MaterialPackage->AddTimecodeTrack(EditRate_); + TrackPtr MPTimecodeTrack = m_MaterialPackage->AddTimecodeTrack(EditRate); m_MPTimecode = MPTimecodeTrack->AddTimecodeComponent(TCFrameRate, 0, 0); TrackPtr FPTimecodeTrack = 0; @@ -97,29 +91,29 @@ ASDCP::h__Writer::WriteMXFHeader(EssenceType_t EssenceType, ASDCP::Rational& Edi case ESS_MPEG2_VES: PackageUMID.MakeUMID(0x0f, assetUUID); m_FilePackage = m_Metadata->AddFilePackage(1, MPEG_PACKAGE_LABEL, PackageUMID); - m_MPTrack = m_MaterialPackage->AddPictureTrack(EditRate_); - m_FPTrack = m_FilePackage->AddPictureTrack(0, EditRate_); + m_MPTrack = m_MaterialPackage->AddPictureTrack(EditRate); + m_FPTrack = m_FilePackage->AddPictureTrack(0, EditRate); break; case ESS_JPEG_2000: PackageUMID.MakeUMID(0x0f, assetUUID); m_FilePackage = m_Metadata->AddFilePackage(1, JP2K_PACKAGE_LABEL, PackageUMID); - m_MPTrack = m_MaterialPackage->AddPictureTrack(EditRate_); - m_FPTrack = m_FilePackage->AddPictureTrack(0, EditRate_); + m_MPTrack = m_MaterialPackage->AddPictureTrack(EditRate); + m_FPTrack = m_FilePackage->AddPictureTrack(0, EditRate); break; case ESS_PCM_24b_48k: PackageUMID.MakeUMID(0x0f, assetUUID); m_FilePackage = m_Metadata->AddFilePackage(1, PCM_PACKAGE_LABEL, PackageUMID); - m_MPTrack = m_MaterialPackage->AddSoundTrack(EditRate_); - m_FPTrack = m_FilePackage->AddSoundTrack(0, EditRate_); + m_MPTrack = m_MaterialPackage->AddSoundTrack(EditRate); + m_FPTrack = m_FilePackage->AddSoundTrack(0, EditRate); break; default: return RESULT_RAW_ESS; } // Add an essence element - FPTimecodeTrack = m_FilePackage->AddTimecodeTrack(EditRate_); + FPTimecodeTrack = m_FilePackage->AddTimecodeTrack(EditRate); m_FPTimecode = FPTimecodeTrack->AddTimecodeComponent(TCFrameRate, 0/* NDF */, tc_to_frames(TCFrameRate, 1, 0, 0, 0) ); @@ -243,7 +237,8 @@ ASDCP::h__Writer::WriteMXFHeader(EssenceType_t EssenceType, ASDCP::Rational& Edi m_IndexMan->SetBodySID(1); m_IndexMan->SetIndexSID(129); - m_IndexMan->SetEditRate(EditRate_); + m_IndexMan->SetEditRate(EditRate); +#endif return RESULT_OK; } @@ -306,14 +301,14 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte Overhead.WriteUi64BE(FrameBuf.Size()); // write SourceLength Overhead.WriteBER(m_CtFrameBuf.Size(), klv_length_size); // write ESV length - result = m_File->Writev(Overhead.Data(), Overhead.Size()); + result = m_File.Writev(Overhead.Data(), Overhead.Size()); } if ( ASDCP_SUCCESS(result) ) { m_StreamOffset += Overhead.Size(); // write encrypted source value - result = m_File->Writev((byte_t*)m_CtFrameBuf.RoData(), m_CtFrameBuf.Size()); + result = m_File.Writev((byte_t*)m_CtFrameBuf.RoData(), m_CtFrameBuf.Size()); } if ( ASDCP_SUCCESS(result) ) @@ -335,7 +330,7 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte } // write HMAC - result = m_File->Writev(HMACOverhead.Data(), HMACOverhead.Size()); + result = m_File.Writev(HMACOverhead.Data(), HMACOverhead.Size()); m_StreamOffset += HMACOverhead.Size(); } } @@ -343,17 +338,17 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte { Overhead.WriteRaw((byte_t*)EssenceUL, klv_key_size); Overhead.WriteBER(FrameBuf.Size(), klv_length_size); - result = m_File->Writev(Overhead.Data(), Overhead.Size()); + result = m_File.Writev(Overhead.Data(), Overhead.Size()); if ( ASDCP_SUCCESS(result) ) - result = m_File->Writev((byte_t*)FrameBuf.RoData(), FrameBuf.Size()); + result = m_File.Writev((byte_t*)FrameBuf.RoData(), FrameBuf.Size()); if ( ASDCP_SUCCESS(result) ) m_StreamOffset += Overhead.Size() + FrameBuf.Size(); } if ( ASDCP_SUCCESS(result) ) - result = m_File->Writev(); + result = m_File.Writev(); return result; } @@ -364,6 +359,7 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte Result_t ASDCP::h__Writer::WriteMXFFooter(EssenceType_t EssenceType) { +#if 0 // write the index DataChunk IndexChunk; ui32_t IndexSID = 0; @@ -429,10 +425,10 @@ ASDCP::h__Writer::WriteMXFFooter(EssenceType_t EssenceType) m_HeaderPart->UpdateMetadata(m_Metadata); // Actually write the footer - m_File->WritePartitionWithIndex(*m_HeaderPart, &IndexChunk, false); + m_File.WritePartitionWithIndex(*m_HeaderPart, &IndexChunk, false); // Add a RIP - m_File->WriteRIP(); + m_File.WriteRIP(); // // ** Update the header ** @@ -441,15 +437,15 @@ ASDCP::h__Writer::WriteMXFFooter(EssenceType_t EssenceType) // For OP-Atom re-write the entire header // ASDCP::fpos_t FooterPos = m_HeaderPart->GetUint64("FooterPartition"); - m_File->Seek(0); + m_File.Seek(0); m_HeaderPart->ChangeType("ClosedCompleteHeader"); m_HeaderPart->SetUint64("FooterPartition", FooterPos); m_HeaderPart->SetUint64("BodySID", 1); - m_File->ReWritePartition(*m_HeaderPart); - m_File->Close(); - + m_File.ReWritePartition(*m_HeaderPart); + m_File.Close(); +#endif return RESULT_OK; } |
