diff options
| author | jhurst <jhurst@cinecert.com> | 2010-11-15 17:04:13 +0000 |
|---|---|---|
| committer | jhurst <> | 2010-11-15 17:04:13 +0000 |
| commit | 87d8df7af62597f68645cbb7b07cb130ab2a1adb (patch) | |
| tree | 497d70ef10e1f222537eecf9a7c36794dc4a5724 /src | |
| parent | b6fd53ca44570ef077932b468402dc6797e71f95 (diff) | |
release!
Diffstat (limited to 'src')
| -rwxr-xr-x | src/AS_DCP_JP2K.cpp | 6 | ||||
| -rwxr-xr-x | src/AS_DCP_MPEG2.cpp | 6 | ||||
| -rwxr-xr-x | src/AS_DCP_PCM.cpp | 5 | ||||
| -rwxr-xr-x | src/KLV.cpp | 6 | ||||
| -rwxr-xr-x | src/KLV.h | 11 | ||||
| -rw-r--r-- | src/KM_xml.cpp | 12 | ||||
| -rw-r--r-- | src/MDD.cpp | 2 | ||||
| -rw-r--r-- | src/Makefile.am | 18 | ||||
| -rwxr-xr-x | src/Metadata.cpp | 57 | ||||
| -rwxr-xr-x | src/Metadata.h | 20 | ||||
| -rw-r--r-- | src/TimedText_Parser.cpp | 19 | ||||
| -rwxr-xr-x | src/asdcp-test.cpp | 5 | ||||
| -rwxr-xr-x | src/h__Writer.cpp | 3 | ||||
| -rwxr-xr-x | src/klvwalk.cpp | 5 |
14 files changed, 156 insertions, 19 deletions
diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index 58bc0c9..811ece6 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -842,9 +842,13 @@ lh__Writer::SetSourceStream(const PictureDescriptor& PDesc, const std::string& l } if ( ASDCP_SUCCESS(result) ) + { + ui32_t TCFrameRate = ( m_PDesc.EditRate == EditRate_23_98 ) ? 24 : m_PDesc.EditRate.Numerator; + result = WriteMXFHeader(label, UL(m_Dict->ul(MDD_JPEG_2000Wrapping)), PICT_DEF_LABEL, UL(m_EssenceUL), UL(m_Dict->ul(MDD_PictureDataDef)), - LocalEditRate, 24 /* TCFrameRate */); + LocalEditRate, TCFrameRate); + } return result; } diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 5801349..5bd998c 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -469,9 +469,13 @@ ASDCP::MPEG2::MXFWriter::h__Writer::SetSourceStream(const VideoDescriptor& VDesc } if ( ASDCP_SUCCESS(result) ) + { + ui32_t TCFrameRate = ( m_VDesc.EditRate == EditRate_23_98 ) ? 24 : m_VDesc.EditRate.Numerator; + result = WriteMXFHeader(MPEG_PACKAGE_LABEL, UL(m_Dict->ul(MDD_MPEG2_VESWrapping)), PICT_DEF_LABEL, UL(m_EssenceUL), UL(m_Dict->ul(MDD_PictureDataDef)), - m_VDesc.EditRate, 24 /* TCFrameRate */); + m_VDesc.EditRate, TCFrameRate); + } return result; } diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index 4639c93..635c176 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -450,7 +450,6 @@ ASDCP::PCM::MXFWriter::h__Writer::SetSourceStream(const AudioDescriptor& ADesc) assert(m_Dict); m_ADesc = ADesc; - ui32_t TCFrameRate = ( ADesc.EditRate == EditRate_23_98 ) ? 24 : m_ADesc.EditRate.Numerator; Result_t result = PCM_ADesc_to_MD(m_ADesc, (WaveAudioDescriptor*)m_EssenceDescriptor); @@ -462,9 +461,13 @@ ASDCP::PCM::MXFWriter::h__Writer::SetSourceStream(const AudioDescriptor& ADesc) } if ( ASDCP_SUCCESS(result) ) + { + ui32_t TCFrameRate = ( m_ADesc.EditRate == EditRate_23_98 ) ? 24 : m_ADesc.EditRate.Numerator; + result = WriteMXFHeader(PCM_PACKAGE_LABEL, UL(m_Dict->ul(MDD_WAVWrapping)), SOUND_DEF_LABEL, UL(m_EssenceUL), UL(m_Dict->ul(MDD_SoundDataDef)), m_ADesc.EditRate, TCFrameRate, calc_CBR_frame_size(m_Info, m_ADesc)); + } return result; } diff --git a/src/KLV.cpp b/src/KLV.cpp index a91d32b..40fb442 100755 --- a/src/KLV.cpp +++ b/src/KLV.cpp @@ -56,6 +56,12 @@ ASDCP::KLVPacket::InitFromBuffer(const byte_t* buf, ui32_t buf_len, const UL& la } // +ASDCP::UL +ASDCP::KLVPacket::GetUL() { + return UL(m_KeyStart); +} + +// ASDCP::Result_t ASDCP::KLVPacket::InitFromBuffer(const byte_t* buf, ui32_t buf_len) { @@ -150,7 +150,7 @@ inline const char* ui64sz(ui64_t i, char* buf) Dictionary(); ~Dictionary(); - bool operator==(const Dictionary& rhs) const { return this == &rhs; } + // bool operator==(const Dictionary& rhs) const { return this == &rhs; } void Init(); bool AddEntry(const MDDEntry& Entry, ui32_t index); @@ -201,6 +201,15 @@ inline const char* ui64sz(ui64_t i, char* buf) return m_KLLength + m_ValueLength; } + ui32_t ValueLength() { + return m_ValueLength; + } + + ui32_t KLLength() { + return m_KLLength; + } + + virtual UL GetUL(); virtual bool HasUL(const byte_t*); virtual Result_t InitFromBuffer(const byte_t*, ui32_t); virtual Result_t InitFromBuffer(const byte_t*, ui32_t, const UL& label); diff --git a/src/KM_xml.cpp b/src/KM_xml.cpp index a33d45c..44442d2 100644 --- a/src/KM_xml.cpp +++ b/src/KM_xml.cpp @@ -660,7 +660,11 @@ Kumu::XercesString_to_UTF_8(const XMLCh* in_str, std::string& out_str) { while ( str_len > 0 ) { - ui32_t read_count = 0; +#if XERCES_VERSION_MAJOR < 3 + ui32_t read_count = 0; +#else + XMLSize_t read_count = 0; +#endif ui32_t write_count = sg_coder->transcodeTo(in_str + read_total, str_len, (XMLByte*)sg_coder_buf, sg_coder_buf_len, read_count, XMLTranscoder::UnRep_Throw); @@ -699,7 +703,11 @@ Kumu::UTF_8_to_XercesString(const char* in_str, Kumu::XercesString& out_str) { while ( str_len > 0 ) { - ui32_t read_count = 0; +#if XERCES_VERSION_MAJOR < 3 + ui32_t read_count = 0; +#else + XMLSize_t read_count = 0; +#endif ui32_t write_count = sg_coder->transcodeFrom((const XMLByte*)(in_str + read_total), str_len, (XMLCh*)sg_coder_buf, sg_coder_buf_len / sizeof(XMLCh), read_count, sg_coder_counts); diff --git a/src/MDD.cpp b/src/MDD.cpp index aabd4c9..aa53e35 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -98,7 +98,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x07, // 20 0x02, 0x09, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "MICAlgorithm_HMAC_SHA1" }, - { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, // 21 + { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 21 0x03, 0x01, 0x02, 0x10, 0x01, 0x00, 0x00, 0x00 }, {0}, false, "KLVFill" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, // 22 diff --git a/src/Makefile.am b/src/Makefile.am index 85cb2a6..72ff916 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -83,7 +83,7 @@ libasdcp_la_CPPFLAGS = -DASDCP_PLATFORM=\"@host@\" # Python extension if PYTHON_USE -lib_LTLIBRARIES += libpyasdcp.la +lib_LTLIBRARIES += libpyasdcp.la libnapali.la nodist_libpyasdcp_la_SOURCES = \ kumu_python.cpp kumu_python.h \ @@ -92,16 +92,21 @@ nodist_libpyasdcp_la_SOURCES = \ asdcp_python_misc.cpp asdcp_python_writerinfo.h \ asdcp_wrappers.h asdcp_python_mxf.cpp asdcp_python_mxf_text.cpp -# asdcp_python_reader.cpp asdcp_python_writer.cpp +nodist_libnapali_la_SOURCES = \ + napali_python.cpp napali_python.h libpyasdcp_la_CPPFLAGS = @PYTHON_CPPFLAGS@ libpyasdcp_la_LDFLAGS = @PYTHON_LSPEC@ -release @VERSION@ libpyasdcp_la_LIBADD = libkumu.la libasdcp.la +libnapali_la_CPPFLAGS = @PYTHON_CPPFLAGS@ +libnapali_la_LDFLAGS = @PYTHON_LSPEC@ -release @VERSION@ +libnapali_la_LIBADD = libkumu.la libasdcp.la + pyexecdir = @PYTHON_EXECDIR@ pyexec_includedir = $(PYTHON_PREFIX)/include/python$(PYTHON_SHORTVERSION) -nodist_pyexec_include_HEADERS = kumu_python.h asdcp_python.h asdcp_wrappers.h -pyexec_LTLIBRARIES = kumu.la asdcp.la +nodist_pyexec_include_HEADERS = kumu_python.h asdcp_python.h napali_python.h asdcp_wrappers.h +pyexec_LTLIBRARIES = kumu.la asdcp.la napali.la nodist_kumu_la_SOURCES = pykumu.cpp kumu_python.h kumu_la_CPPFLAGS = @PYTHON_CPPFLAGS@ @@ -112,6 +117,11 @@ nodist_asdcp_la_SOURCES = pyasdcp.cpp kumu_python.h asdcp_python.h asdcp_wrapper asdcp_la_CPPFLAGS = @PYTHON_CPPFLAGS@ asdcp_la_LDFLAGS = @PYTHON_LSPEC@ -avoid-version -module asdcp_la_LIBADD = libpyasdcp.la + +nodist_napali_la_SOURCES = pynapali.cpp kumu_python.h napali_python.h +napali_la_CPPFLAGS = @PYTHON_CPPFLAGS@ +napali_la_LDFLAGS = @PYTHON_LSPEC@ -avoid-version -module +napali_la_LIBADD = libnapali.la libpyasdcp.la endif # list of programs to be built and installed diff --git a/src/Metadata.cpp b/src/Metadata.cpp index fccf5a6..aeedbde 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -68,6 +68,7 @@ static InterchangeObject* GenericDataEssenceDescriptor_Factory(const Dictionary* static InterchangeObject* TimedTextDescriptor_Factory(const Dictionary*& Dict) { return new TimedTextDescriptor(Dict); } static InterchangeObject* TimedTextResourceSubDescriptor_Factory(const Dictionary*& Dict) { return new TimedTextResourceSubDescriptor(Dict); } static InterchangeObject* StereoscopicPictureSubDescriptor_Factory(const Dictionary*& Dict) { return new StereoscopicPictureSubDescriptor(Dict); } +static InterchangeObject* NetworkLocator_Factory(const Dictionary*& Dict) { return new NetworkLocator(Dict); } void @@ -102,6 +103,7 @@ ASDCP::MXF::Metadata_InitTypes(const Dictionary*& Dict) SetObjectFactory(Dict->ul(MDD_TimedTextDescriptor), TimedTextDescriptor_Factory); SetObjectFactory(Dict->ul(MDD_TimedTextResourceSubDescriptor), TimedTextResourceSubDescriptor_Factory); SetObjectFactory(Dict->ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory); + SetObjectFactory(Dict->ul(MDD_NetworkLocator), NetworkLocator_Factory); } //------------------------------------------------------------------------------------------ @@ -1849,6 +1851,61 @@ StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) return InterchangeObject::WriteToBuffer(Buffer); } +//------------------------------------------------------------------------------------------ +// NetworkLocator + +// +ASDCP::Result_t +NetworkLocator::InitFromTLVSet(TLVReader& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(NetworkLocator, URLString)); + return result; +} + +// +ASDCP::Result_t +NetworkLocator::WriteToTLVSet(TLVWriter& TLVSet) +{ + assert(m_Dict); + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(NetworkLocator, URLString)); + return result; +} + +// +void +NetworkLocator::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); + fprintf(stream, " %22s = %s\n", "URLString", URLString.EncodeString(identbuf, IdentBufferLen)); +} + +// +ASDCP::Result_t +NetworkLocator::InitFromBuffer(const byte_t* p, ui32_t l) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_NetworkLocator)); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +NetworkLocator::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + assert(m_Dict); + m_Typeinfo = &(m_Dict->Type(MDD_NetworkLocator)); + return InterchangeObject::WriteToBuffer(Buffer); +} + // // end Metadata.cpp // diff --git a/src/Metadata.h b/src/Metadata.h index 4c83034..891d155 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -683,6 +683,26 @@ namespace ASDCP virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&); }; + // + class NetworkLocator : public InterchangeObject + { + ASDCP_NO_COPY_CONSTRUCT(NetworkLocator); + NetworkLocator(); + + public: + const Dictionary*& m_Dict; + UTF16String URLString; + + NetworkLocator(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {} + virtual ~NetworkLocator() {} + virtual const char* HasName() { return "NetworkLocator"; } + virtual Result_t InitFromTLVSet(TLVReader& TLVSet); + virtual Result_t WriteToTLVSet(TLVWriter& TLVSet); + virtual void Dump(FILE* = 0); + virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l); + virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&); + }; + } // namespace MXF } // namespace ASDCP diff --git a/src/TimedText_Parser.cpp b/src/TimedText_Parser.cpp index 397fd51..191a353 100644 --- a/src/TimedText_Parser.cpp +++ b/src/TimedText_Parser.cpp @@ -233,9 +233,16 @@ ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead() m_TDesc.EditRate = decode_rational(EditRate->GetBody().c_str()); - if ( m_TDesc.EditRate != EditRate_24 && m_TDesc.EditRate != EditRate_48 ) + if ( m_TDesc.EditRate != EditRate_23_98 + && m_TDesc.EditRate != EditRate_24 + && m_TDesc.EditRate != EditRate_25 + && m_TDesc.EditRate != EditRate_30 + && m_TDesc.EditRate != EditRate_48 + && m_TDesc.EditRate != EditRate_50 + && m_TDesc.EditRate != EditRate_60 ) { - DefaultLogSink(). Error("EditRate must be 24/1 or 48/1\n"); + DefaultLogSink(). Error("Unexpected EditRate: %d/%d\n", + m_TDesc.EditRate.Numerator, m_TDesc.EditRate.Denominator); return RESULT_FORMAT; } @@ -296,11 +303,11 @@ ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead() return RESULT_FORMAT; } - // assumes 24/1 or 48/1 as constrained above - assert(m_TDesc.EditRate.Denominator == 1); + // assumes edit rate is constrained above + ui32_t TCFrameRate = ( m_TDesc.EditRate == EditRate_23_98 ) ? 24 : m_TDesc.EditRate.Numerator; S12MTimecode beginTC; - beginTC.SetFPS(m_TDesc.EditRate.Numerator); + beginTC.SetFPS(TCFrameRate); XMLElement* StartTime = m_Root.GetChildWithName("StartTime"); if ( StartTime != 0 ) @@ -308,7 +315,7 @@ ASDCP::TimedText::DCSubtitleParser::h__SubtitleParser::OpenRead() for ( ei = InstanceList.begin(); ei != InstanceList.end(); ei++ ) { - S12MTimecode tmpTC((*ei)->GetAttrWithName("TimeOut"), m_TDesc.EditRate.Numerator); + S12MTimecode tmpTC((*ei)->GetAttrWithName("TimeOut"), TCFrameRate); if ( end_count < tmpTC.GetFrames() ) end_count = tmpTC.GetFrames(); } diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp index 8b72ebc..d571922 100755 --- a/src/asdcp-test.cpp +++ b/src/asdcp-test.cpp @@ -176,7 +176,7 @@ Read/Write Options:\n\ is no label (valid for Interop only).\n\ -L - Write SMPTE UL values instead of MXF Interop\n\ -p <rate> - fps of picture when wrapping PCM or JP2K:\n\ - Use one of [23|24|48], 24 is default\n\ + Use one of [23|24|25|30|48|50|60], 24 is default\n\ -R - Repeat the first frame over the entire file (picture\n\ essence only, requires -c, -d)\n\ -S - Split Wave essence to stereo WAV files during extract.\n\ @@ -286,6 +286,7 @@ public: Rational PictureRate() { if ( picture_rate == 23 ) return EditRate_23_98; + if ( picture_rate == 24 ) return EditRate_24; if ( picture_rate == 25 ) return EditRate_25; if ( picture_rate == 30 ) return EditRate_30; if ( picture_rate == 48 ) return EditRate_48; @@ -298,6 +299,7 @@ public: const char* szPictureRate() { if ( picture_rate == 23 ) return "23.976"; + if ( picture_rate == 24 ) return "24"; if ( picture_rate == 25 ) return "25"; if ( picture_rate == 30 ) return "30"; if ( picture_rate == 48 ) return "48"; @@ -1356,6 +1358,7 @@ read_PCM_file(CommandOptions& Options) if ( ADesc.EditRate != EditRate_23_98 && ADesc.EditRate != EditRate_24 && ADesc.EditRate != EditRate_25 + && ADesc.EditRate != EditRate_30 && ADesc.EditRate != EditRate_48 && ADesc.EditRate != EditRate_50 && ADesc.EditRate != EditRate_60 ) diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp index 2882e33..db263bb 100755 --- a/src/h__Writer.cpp +++ b/src/h__Writer.cpp @@ -548,6 +548,9 @@ ASDCP::h__Writer::WriteEKLVPacket(const ASDCP::FrameBuffer& FrameBuf, const byte { BER_length = Kumu::get_BER_length_for_value(ETLength); + // the packet is longer by the difference in expected vs. actual BER length + ETLength += BER_length - MXF_BER_LENGTH; + if ( BER_length == 0 ) result = RESULT_KLV_CODING; } diff --git a/src/klvwalk.cpp b/src/klvwalk.cpp index 6715060..92e7a3f 100755 --- a/src/klvwalk.cpp +++ b/src/klvwalk.cpp @@ -245,7 +245,8 @@ main(int argc, const char** argv) { Kumu::FileReader Reader; KLVFilePacket KP; - + ui64_t pos = 0; + result = Reader.OpenRead((*fi).c_str()); if ( ASDCP_SUCCESS(result) ) @@ -253,7 +254,9 @@ main(int argc, const char** argv) while ( ASDCP_SUCCESS(result) ) { + fprintf(stdout, "@0x%08qx: ", pos); KP.Dump(stdout, DefaultCompositeDict(), true); + pos = Reader.Tell(); result = KP.InitFromFile(Reader); } |
