diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/AS_DCP_JP2K.cpp | 24 | ||||
| -rw-r--r-- | src/AS_DCP_TimedText.cpp | 4 | ||||
| -rwxr-xr-x | src/AS_DCP_internal.h | 2 | ||||
| -rw-r--r-- | src/MDD.cpp | 8 | ||||
| -rwxr-xr-x | src/MDD.h | 4 | ||||
| -rwxr-xr-x | src/Metadata.cpp | 56 | ||||
| -rwxr-xr-x | src/Metadata.h | 20 | ||||
| -rwxr-xr-x | src/asdcp-test.cpp | 26 | ||||
| -rwxr-xr-x | src/h__Writer.cpp | 2 |
9 files changed, 112 insertions, 34 deletions
diff --git a/src/AS_DCP_JP2K.cpp b/src/AS_DCP_JP2K.cpp index b3c4663..0271d23 100755 --- a/src/AS_DCP_JP2K.cpp +++ b/src/AS_DCP_JP2K.cpp @@ -40,12 +40,6 @@ static std::string JP2K_PACKAGE_LABEL = "File Package: SMPTE 429-4 frame wrappin static std::string JP2K_S_PACKAGE_LABEL = "File Package: SMPTE 429-10 frame wrapping of stereoscopic JPEG 2000 codestreams"; static std::string PICT_DEF_LABEL = "Picture Track"; - -//22 - -// 7f18 7f00 7f00 7ebc 76ea 76ea 76bc 6f4c 6f4c 6f64 5803 5803 5845 5fd2 5fd2 5f61 - - int s_exp_lookup[16] = { 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,2048, 4096, 8192, 16384, 32768 }; // @@ -503,7 +497,7 @@ public: ~lh__Writer(){} - Result_t OpenWrite(const char*, ui32_t HeaderSize); + Result_t OpenWrite(const char*, EssenceType_t type, ui32_t HeaderSize); Result_t SetSourceStream(const PictureDescriptor&, const std::string& label, ASDCP::Rational LocalEditRate = ASDCP::Rational(0,0)); Result_t WriteFrame(const JP2K::FrameBuffer&, bool add_index, AESEncContext*, HMACContext*); @@ -578,7 +572,7 @@ lh__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc) // Open the file for writing. The file must not exist. Returns error if // the operation cannot be completed. ASDCP::Result_t -lh__Writer::OpenWrite(const char* filename, ui32_t HeaderSize) +lh__Writer::OpenWrite(const char* filename, EssenceType_t type, ui32_t HeaderSize) { if ( ! m_State.Test_BEGIN() ) return RESULT_STATE; @@ -594,11 +588,19 @@ lh__Writer::OpenWrite(const char* filename, ui32_t HeaderSize) m_EssenceDescriptor = tmp_rgba; m_EssenceSubDescriptor = new JPEG2000PictureSubDescriptor; - m_EssenceSubDescriptorList.push_back((FileDescriptor*)m_EssenceSubDescriptor); + m_EssenceSubDescriptorList.push_back((InterchangeObject*)m_EssenceSubDescriptor); GenRandomValue(m_EssenceSubDescriptor->InstanceUID); m_EssenceDescriptor->SubDescriptors.push_back(m_EssenceSubDescriptor->InstanceUID); + if ( type == ASDCP::ESS_JPEG_2000_S ) + { + InterchangeObject* StereoSubDesc = new StereoscopicPictureSubDescriptor; + m_EssenceSubDescriptorList.push_back(StereoSubDesc); + GenRandomValue(StereoSubDesc->InstanceUID); + m_EssenceDescriptor->SubDescriptors.push_back(StereoSubDesc->InstanceUID); + } + result = m_State.Goto_INIT(); } @@ -705,7 +707,7 @@ ASDCP::JP2K::MXFWriter::OpenWrite(const char* filename, const WriterInfo& Info, { m_Writer = new h__Writer; - Result_t result = m_Writer->OpenWrite(filename, HeaderSize); + Result_t result = m_Writer->OpenWrite(filename, ASDCP::ESS_JPEG_2000, HeaderSize); if ( ASDCP_SUCCESS(result) ) { @@ -807,7 +809,7 @@ ASDCP::JP2K::MXFSWriter::OpenWrite(const char* filename, const WriterInfo& Info, return RESULT_FORMAT; } - Result_t result = m_Writer->OpenWrite(filename, HeaderSize); + Result_t result = m_Writer->OpenWrite(filename, ASDCP::ESS_JPEG_2000_S, HeaderSize); if ( ASDCP_SUCCESS(result) ) { diff --git a/src/AS_DCP_TimedText.cpp b/src/AS_DCP_TimedText.cpp index ff68e62..bab3a6a 100644 --- a/src/AS_DCP_TimedText.cpp +++ b/src/AS_DCP_TimedText.cpp @@ -126,7 +126,7 @@ ASDCP::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedText::TimedTe TDesc.EditRate = TDescObj->SampleRate; TDesc.ContainerDuration = TDescObj->ContainerDuration; - memcpy(TDesc.AssetID, TDescObj->AssetID.Value(), UUIDlen); + memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen); TDesc.NamespaceName = TDescObj->RootNamespaceName; TDesc.EncodingName = TDescObj->UTFEncoding; @@ -426,7 +426,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::TimedText_TDesc_to_MD(TimedText::TimedTe TDescObj->SampleRate = TDesc.EditRate; TDescObj->ContainerDuration = TDesc.ContainerDuration; - TDescObj->AssetID.Set(TDesc.AssetID); + TDescObj->ResourceID.Set(TDesc.AssetID); TDescObj->RootNamespaceName = TDesc.NamespaceName; TDescObj->UTFEncoding = TDesc.EncodingName; diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index 86ccc20..7f1ef25 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -177,7 +177,7 @@ namespace ASDCP SourcePackage* m_FilePackage; FileDescriptor* m_EssenceDescriptor; - std::list<FileDescriptor*> m_EssenceSubDescriptorList; + std::list<InterchangeObject*> m_EssenceSubDescriptorList; ui32_t m_FramesWritten; ui64_t m_StreamOffset; diff --git a/src/MDD.cpp b/src/MDD.cpp index 2c8353b..c7ddd7c 100644 --- a/src/MDD.cpp +++ b/src/MDD.cpp @@ -809,7 +809,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { {0}, false, "DCTimedTextDescriptor" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x00, 0x01, 0x01, 0x01, // 258 0x0d, 0x01, 0x03, 0x01, 0xfa, 0xce, 0x00, 0x03 }, - {0}, false, "DCTimedTextDescriptor_AssetID" }, + {0}, false, "DCTimedTextDescriptor_ResourceID" }, { { 0x06, 0x0e, 0x2b, 0x34, 0x00, 0x01, 0x01, 0x01, // 259 0x0d, 0x01, 0x03, 0x01, 0xfa, 0xce, 0x00, 0x04 }, {0}, false, "DCTimedTextDescriptor_UTFEncoding" }, @@ -840,9 +840,9 @@ static const ASDCP::MDDEntry s_MDD_Table[] = { { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 268 0x01, 0x07, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00 }, {0x61, 0x02}, false, "DMSegment_TrackIDList" }, - { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 269 - 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00 }, - {0x61, 0x02}, false, "StereoscopicPictureSubDescriptor" }, + { { 0x06, 0x0e, 0x2b, 0x34, 0x00, 0x01, 0x01, 0x01, // 269 + 0x0d, 0x01, 0x03, 0x01, 0xfa, 0xce, 0x00, 0xf6 }, + {0}, false, "StereoscopicPictureSubDescriptor" }, { {0}, {0}, false, 0 } }; @@ -293,13 +293,13 @@ namespace ASDCP { MDD_DCTimedTextWrapping, // 255 MDD_DCTimedTextEssence, // 256 MDD_DCTimedTextDescriptor, // 257 - MDD_DCTimedTextDescriptor_AssetID, // 258 + MDD_DCTimedTextDescriptor_ResourceID, // 258 MDD_DCTimedTextDescriptor_UTFEncoding, // 259 MDD_DCTimedTextDescriptor_RootNamespaceName, // 260 MDD_DCTimedTextResourceDescriptor, // 261 MDD_DCTimedTextResourceDescriptor_ResourceID, // 262 MDD_DCTimedTextResourceDescriptor_ResourceMIMEType, // 263 - MDD_DCTimedTextResourceDescriptor_ResourceSID, //264 + MDD_DCTimedTextResourceDescriptor_ResourceSID, // 264 MDD_GenericStreamPartition, // 265 MDD_DMSegment_DataDefinition, // 266 MDD_DMSegment_Duration, // 267 diff --git a/src/Metadata.cpp b/src/Metadata.cpp index 7e6a5e1..c9eb689 100755 --- a/src/Metadata.cpp +++ b/src/Metadata.cpp @@ -67,6 +67,8 @@ static InterchangeObject* CryptographicContext_Factory() { return new Cryptograp static InterchangeObject* GenericDataEssenceDescriptor_Factory() { return new GenericDataEssenceDescriptor; } static InterchangeObject* DCTimedTextDescriptor_Factory() { return new DCTimedTextDescriptor; } static InterchangeObject* DCTimedTextResourceDescriptor_Factory() { return new DCTimedTextResourceDescriptor; } +static InterchangeObject* StereoscopicPictureSubDescriptor_Factory() { return new StereoscopicPictureSubDescriptor; } + void ASDCP::MXF::Metadata_InitTypes() @@ -98,6 +100,7 @@ ASDCP::MXF::Metadata_InitTypes() SetObjectFactory(Dict::ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory); SetObjectFactory(Dict::ul(MDD_DCTimedTextDescriptor), DCTimedTextDescriptor_Factory); SetObjectFactory(Dict::ul(MDD_DCTimedTextResourceDescriptor), DCTimedTextResourceDescriptor_Factory); + SetObjectFactory(Dict::ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory); } //------------------------------------------------------------------------------------------ @@ -1577,7 +1580,7 @@ ASDCP::Result_t DCTimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet) { Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, AssetID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, ResourceID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, UTFEncoding)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, RootNamespaceName)); return result; @@ -1588,7 +1591,7 @@ ASDCP::Result_t DCTimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet) { Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet); - if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, AssetID)); + if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, ResourceID)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, UTFEncoding)); if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, RootNamespaceName)); return result; @@ -1605,7 +1608,7 @@ DCTimedTextDescriptor::Dump(FILE* stream) stream = stderr; GenericDataEssenceDescriptor::Dump(stream); - fprintf(stream, " %22s = %s\n", "AssetID", AssetID.EncodeString(identbuf, IdentBufferLen)); + fprintf(stream, " %22s = %s\n", "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "UTFEncoding", UTFEncoding.EncodeString(identbuf, IdentBufferLen)); fprintf(stream, " %22s = %s\n", "RootNamespaceName", RootNamespaceName.EncodeString(identbuf, IdentBufferLen)); } @@ -1683,6 +1686,53 @@ DCTimedTextResourceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) return InterchangeObject::WriteToBuffer(Buffer); } +//------------------------------------------------------------------------------------------ +// StereoscopicPictureSubDescriptor + +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet) +{ + Result_t result = InterchangeObject::InitFromTLVSet(TLVSet); + return result; +} + +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet) +{ + Result_t result = InterchangeObject::WriteToTLVSet(TLVSet); + return result; +} + +// +void +StereoscopicPictureSubDescriptor::Dump(FILE* stream) +{ + char identbuf[IdentBufferLen]; + *identbuf = 0; + + if ( stream == 0 ) + stream = stderr; + + InterchangeObject::Dump(stream); +} + +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l) +{ + m_Typeinfo = &Dict::Type(MDD_StereoscopicPictureSubDescriptor); + return InterchangeObject::InitFromBuffer(p, l); +} + +// +ASDCP::Result_t +StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer) +{ + m_Typeinfo = &Dict::Type(MDD_StereoscopicPictureSubDescriptor); + return InterchangeObject::WriteToBuffer(Buffer); +} // // end Metadata.cpp diff --git a/src/Metadata.h b/src/Metadata.h index 035dfd3..bcd3b6f 100755 --- a/src/Metadata.h +++ b/src/Metadata.h @@ -572,7 +572,7 @@ namespace ASDCP ASDCP_NO_COPY_CONSTRUCT(DCTimedTextDescriptor); public: - UUID AssetID; + UUID ResourceID; UTF16String UTFEncoding; UTF16String RootNamespaceName; @@ -605,6 +605,24 @@ namespace ASDCP virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l); virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&); }; + + // + class StereoscopicPictureSubDescriptor : public InterchangeObject + { + ASDCP_NO_COPY_CONSTRUCT(StereoscopicPictureSubDescriptor); + + public: + + StereoscopicPictureSubDescriptor() {} + virtual ~StereoscopicPictureSubDescriptor() {} + virtual const char* HasName() { return "StereoscopicPictureSubDescriptor"; } + 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/asdcp-test.cpp b/src/asdcp-test.cpp index b7dd356..22743aa 100755 --- a/src/asdcp-test.cpp +++ b/src/asdcp-test.cpp @@ -1592,17 +1592,19 @@ template<class ReaderT, class DescriptorT> class FileInfoWrapper { public: - static void + static Result_t file_info(CommandOptions& Options, const char* type_string, FILE* stream = 0) { assert(type_string); if ( stream == 0 ) stream = stdout; + Result_t result = RESULT_OK; + if ( Options.verbose_flag || Options.showheader_flag ) { ReaderT Reader; - Result_t result = Reader.OpenRead(Options.filenames[0]); + result = Reader.OpenRead(Options.filenames[0]); if ( ASDCP_SUCCESS(result) ) { @@ -1627,6 +1629,8 @@ public: Reader.DumpHeaderMetadata(stream); } } + + return result; } }; @@ -1642,27 +1646,27 @@ show_file_info(CommandOptions& Options) return result; if ( EssenceType == ESS_MPEG2_VES ) - FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor>::file_info(Options, "MPEG2 video"); + result = FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor>::file_info(Options, "MPEG2 video"); else if ( EssenceType == ESS_PCM_24b_48k ) - FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor>::file_info(Options, "PCM audio"); + result = FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor>::file_info(Options, "PCM audio"); else if ( EssenceType == ESS_JPEG_2000 ) { if ( Options.stereo_image_flag ) - FileInfoWrapper<ASDCP::JP2K::MXFSReader, + result = FileInfoWrapper<ASDCP::JP2K::MXFSReader, MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures"); else - FileInfoWrapper<ASDCP::JP2K::MXFReader, + result = FileInfoWrapper<ASDCP::JP2K::MXFReader, MyPictureDescriptor>::file_info(Options, "JPEG 2000 pictures"); } else if ( EssenceType == ESS_JPEG_2000_S ) - FileInfoWrapper<ASDCP::JP2K::MXFSReader, + result = FileInfoWrapper<ASDCP::JP2K::MXFSReader, MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures"); else if ( EssenceType == ESS_TIMED_TEXT ) - FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>::file_info(Options, "Timed Text"); + result = FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>::file_info(Options, "Timed Text"); else { @@ -1878,7 +1882,11 @@ main(int argc, const char** argv) { fputs("Program stopped on error.\n", stderr); - if ( result != RESULT_FAIL ) + if ( result == RESULT_SFORMAT ) + { + fputs("Use option '-3' to force stereoscopic mode.\n", stderr); + } + else if ( result != RESULT_FAIL ) { fputs(result, stderr); fputc('\n', stderr); diff --git a/src/h__Writer.cpp b/src/h__Writer.cpp index 9f1d3fe..06d81c0 100755 --- a/src/h__Writer.cpp +++ b/src/h__Writer.cpp @@ -376,7 +376,7 @@ ASDCP::h__Writer::AddEssenceDescriptor(const UL& WrappingUL) m_HeaderPart.m_Preface->EssenceContainers = m_HeaderPart.EssenceContainers; m_HeaderPart.AddChildObject(m_EssenceDescriptor); - std::list<FileDescriptor*>::iterator sdli = m_EssenceSubDescriptorList.begin(); + std::list<InterchangeObject*>::iterator sdli = m_EssenceSubDescriptorList.begin(); for ( ; sdli != m_EssenceSubDescriptorList.end(); sdli++ ) m_HeaderPart.AddChildObject(*sdli); |
