diff options
| author | cah <cah@ableton.com> | 2022-12-16 23:17:51 +0100 |
|---|---|---|
| committer | cah <cah@ableton.com> | 2022-12-16 23:17:51 +0100 |
| commit | 30b1a7cb4983a0e95056969ed64bddc8f3494a2d (patch) | |
| tree | 814e91060746766ce4b88723ce804809d46a0bc9 | |
| parent | 3f9fd2c3c3fffcccd53016619475b32642ed6aa5 (diff) | |
Hack to make DoM/libdcp build.dom-hack-upstream-master
| -rwxr-xr-x | src/AS_DCP.h | 11 | ||||
| -rwxr-xr-x | src/AS_DCP_JP2K.cpp | 33 | ||||
| -rwxr-xr-x | src/JP2K_Codestream_Parser.cpp | 37 |
3 files changed, 64 insertions, 17 deletions
diff --git a/src/AS_DCP.h b/src/AS_DCP.h index aab7f77..ec2064d 100755 --- a/src/AS_DCP.h +++ b/src/AS_DCP.h @@ -204,7 +204,7 @@ namespace ASDCP { enum EssenceType_t { ESS_UNKNOWN, // the file is not a supported AS-DCP or AS-02 essence container - // + // ESS_MPEG2_VES, // the file contains an MPEG-2 video elementary stream // d-cinema essence types (AS-DCP) @@ -1106,7 +1106,7 @@ namespace ASDCP { { ui32_t Pcap; // Pcap = 0 means that no extended capabilities are required i8_t N; // Number of Ccap elements, or NoExtendedCapabilitiesSignaled if no Extended Capabilities are signaled - ui16_t Ccap[MaxCapabilities]; + ui16_t Ccap[MaxCapabilities]; }; struct Profile_t // ISO 15444-1 @@ -1146,7 +1146,7 @@ namespace ASDCP { QuantizationDefault_t QuantizationDefault; ExtendedCapabilities_t ExtendedCapabilities; Profile_t Profile; - CorrespondingProfile_t CorrespondingProfile; + CorrespondingProfile_t CorrespondingProfile; }; // Print debugging information to std::ostream @@ -1186,6 +1186,7 @@ namespace ASDCP { // byte of the data segment. Set this value to zero if you want // encrypted headers. Result_t OpenReadFrame(const std::string& filename, FrameBuffer&) const; + Result_t OpenReadFrame(const unsigned char* data, int size, FrameBuffer&) const; // Fill a PictureDescriptor struct with the values from the file's codestream. // Returns RESULT_INIT if the file is not open. @@ -1274,6 +1275,8 @@ namespace ASDCP { // Closes the MXF file, writing the index and revised header. Result_t Finalize(); + + ui64_t Tell() const; }; // @@ -1389,6 +1392,8 @@ namespace ASDCP { // Closes the MXF file, writing the index and revised header. Returns // RESULT_SPHASE if WriteFrame was called an odd number of times. Result_t Finalize(); + + ui64_t Tell() const; }; // diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index 06f86cd..6744c09 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -203,7 +203,7 @@ ASDCP::JP2K::PictureDescriptorDump(const PictureDescriptor& PDesc, FILE* stream) PDesc.ImageComponents[i].YRsize ); } - + fprintf(stream, " Scod: %hhu\n", PDesc.CodingStyleDefault.Scod); fprintf(stream, " ProgressionOrder: %hhu\n", PDesc.CodingStyleDefault.SGcod.ProgressionOrder); fprintf(stream, " NumberOfLayers: %hd\n", @@ -273,7 +273,7 @@ ASDCP::JP2K::PictureDescriptorDump(const PictureDescriptor& PDesc, FILE* stream) } } - + } @@ -349,9 +349,9 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc, // Corresponding profile if (PDesc.CorrespondingProfile.N == 0) { - + EssenceSubDescriptor.J2KCorrespondingProfile.set_has_value(false); - + } else { EssenceSubDescriptor.J2KCorrespondingProfile.get().resize(PDesc.CorrespondingProfile.N); @@ -442,7 +442,7 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::GenericPictureEssenceDescriptor& Esse memcpy(&PDesc.QuantizationDefault, EssenceSubDescriptor.QuantizationDefault.const_get().RoData(), EssenceSubDescriptor.QuantizationDefault.const_get().Length()); - + PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.const_get().Length() - 1; // Profile @@ -589,7 +589,7 @@ lh__Reader::OpenRead(const std::string& filename, EssenceType_t type) { DefaultLogSink().Warn("EditRate and SampleRate do not match (%.03f, %.03f).\n", m_EditRate.Quotient(), m_SampleRate.Quotient()); - + if ( ( m_EditRate == EditRate_24 && m_SampleRate == EditRate_48 ) || ( m_EditRate == EditRate_25 && m_SampleRate == EditRate_50 ) || ( m_EditRate == EditRate_30 && m_SampleRate == EditRate_60 ) @@ -737,7 +737,7 @@ ASDCP::JP2K::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const stream = stderr; fprintf(stream, "Frame: %06u, %7u bytes", m_FrameNumber, m_Size); - + fputc('\n', stream); if ( dump_len > 0 ) @@ -917,7 +917,7 @@ public: Result_t result = RESULT_OK; if ( phase == SP_LEFT ) - { + { if ( FilePosition != m_LastPosition ) { m_LastPosition = FilePosition; @@ -1264,14 +1264,14 @@ lh__Writer::WriteFrame(const JP2K::FrameBuffer& FrameBuf, bool add_index, if ( m_State.Test_READY() ) result = m_State.Goto_RUNNING(); // first time through - + ui64_t StreamOffset = m_StreamOffset; if ( ASDCP_SUCCESS(result) ) result = WriteEKLVPacket(FrameBuf, m_EssenceUL, MXF_BER_LENGTH, Ctx, HMAC); if ( ASDCP_SUCCESS(result) && add_index ) - { + { IndexTableSegment::IndexEntry Entry; Entry.StreamOffset = StreamOffset; m_FooterPart.PushIndexEntry(Entry); @@ -1413,6 +1413,13 @@ ASDCP::JP2K::MXFWriter::Finalize() } +ui64_t +ASDCP::JP2K::MXFWriter::Tell() const +{ + return m_Writer->m_File.TellPosition(); +} + + //------------------------------------------------------------------------------------------ // @@ -1617,6 +1624,12 @@ ASDCP::JP2K::MXFSWriter::Finalize() return m_Writer->Finalize(); } +ui64_t +ASDCP::JP2K::MXFSWriter::Tell() const +{ + return m_Writer->m_File.TellPosition(); +} + // // end AS_DCP_JP2K.cpp // diff --git a/src/JP2K_Codestream_Parser.cpp b/src/JP2K_Codestream_Parser.cpp index d68b52a..878f6a1 100755 --- a/src/JP2K_Codestream_Parser.cpp +++ b/src/JP2K_Codestream_Parser.cpp @@ -90,6 +90,28 @@ public: return result; } + + Result_t OpenReadFrame(const unsigned char* data, unsigned int size, FrameBuffer& FB) + { + if ( FB.Capacity() < size ) + { + DefaultLogSink().Error("FrameBuf.Capacity: %u frame length: %u\n", FB.Capacity(), (ui32_t)size); + return RESULT_SMALLBUF; + } + + ui32_t read_count; + + memcpy(FB.Data(), data, size); + FB.Size(size); + + byte_t start_of_data = 0; // out param + const Result_t result = ParseMetadataIntoDesc(FB, m_PDesc, &start_of_data); + + if ( ASDCP_SUCCESS(result) ) + FB.PlaintextOffset(start_of_data); + + return result; + } }; ASDCP::Result_t @@ -148,7 +170,7 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe DefaultLogSink().Error("Unexpected number of components: %u\n", PDesc.Csize); return RESULT_RAW_FORMAT; } - + for ( i = 0; i < PDesc.Csize; i++ ) SIZ_.ReadComponent(i, PDesc.ImageComponents[i]); } @@ -162,7 +184,7 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe DefaultLogSink().Error("Unexpectedly large CodingStyle data: %u\n", NextMarker.m_DataSize); return RESULT_RAW_FORMAT; } - + memcpy(&PDesc.CodingStyleDefault, NextMarker.m_Data, NextMarker.m_DataSize); break; @@ -174,7 +196,7 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe DefaultLogSink().Error("No quantization signaled. QCD size=%s.\n", NextMarker.m_DataSize); return RESULT_RAW_FORMAT; } - + if ( NextMarker.m_DataSize > MaxDefaults ) { DefaultLogSink().Error("Quantization Default length exceeds maximum %d\n", NextMarker.m_DataSize); @@ -188,7 +210,7 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe case MRK_CAP: { Accessor::CAP CAP_(NextMarker); - + PDesc.ExtendedCapabilities.Pcap = CAP_.pcap(); PDesc.ExtendedCapabilities.N = CAP_.N(); @@ -271,6 +293,13 @@ ASDCP::JP2K::CodestreamParser::OpenReadFrame(const std::string& filename, FrameB return m_Parser->OpenReadFrame(filename, FB); } +ASDCP::Result_t +ASDCP::JP2K::CodestreamParser::OpenReadFrame(const unsigned char* data, int size, FrameBuffer& FB) const +{ + const_cast<ASDCP::JP2K::CodestreamParser*>(this)->m_Parser = new h__CodestreamParser; + return m_Parser->OpenReadFrame(data, size, FB); +} + // ASDCP::Result_t ASDCP::JP2K::CodestreamParser::FillPictureDescriptor(PictureDescriptor& PDesc) const |
