summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/AS_DCP_JP2K.cpp24
-rw-r--r--src/AS_DCP_TimedText.cpp4
-rwxr-xr-xsrc/AS_DCP_internal.h2
-rw-r--r--src/MDD.cpp8
-rwxr-xr-xsrc/MDD.h4
-rwxr-xr-xsrc/Metadata.cpp56
-rwxr-xr-xsrc/Metadata.h20
-rwxr-xr-xsrc/asdcp-test.cpp26
-rwxr-xr-xsrc/h__Writer.cpp2
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 }
};
diff --git a/src/MDD.h b/src/MDD.h
index ba415bc..4218f9d 100755
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -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);