summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWolfgang Ruppel <imftool@t-online.de>2019-02-22 20:31:07 +0100
committerGitHub <noreply@github.com>2019-02-22 20:31:07 +0100
commit9d5360955e77f4cd1028e028d4d748dd84151933 (patch)
treef7e99f6587825108142dbb9cd0519af0072e29f3
parentc22d49a2d1bc4ee13c36484b22de2032015c7830 (diff)
parent08e954ce809d49e2e7e886154000077b7fd78196 (diff)
Merge pull request #1 from cinecert/master
2.10.32 pre-release
-rwxr-xr-xCHANGES (renamed from README)153
-rwxr-xr-xREADME.md113
-rw-r--r--src/KM_xml.cpp22
-rwxr-xr-xsrc/Metadata.cpp37
-rwxr-xr-xsrc/Metadata.h6
5 files changed, 147 insertions, 184 deletions
diff --git a/README b/CHANGES
index ab7cb60..34957a7 100755
--- a/README
+++ b/CHANGES
@@ -1,157 +1,7 @@
-$Id$
-
-The asdcplib library is a set of objects that offer
-simplified access to files conforming to the sound and
-picture track file formats developed by the SMPTE Working
-Group DC28.20 (now TC 21DC).
-
-Recently, support has also been added for SMPTE draft ST
-2067-5 "IMF Essence Component", AKA "AS-02". This code was
-donated by Fraunhofer IIS. It carries additional copyright
-information which should be listed whenever you link the
-AS-02 elements of the library. Please look at the top of
-the AS-02 files to see this copyright information.
-
-AS-02 support is carried in separate object modules, so
-unless you #include <AS_02.h> and link libas-02.so you are
-still using plain old asdcp.
-
-This work was originally funded by Digital Cinema Initiatives,
-LLC (DCI). Subsequent efforts have been funded by Deluxe
-Laboratories, Doremi Labs, CineCert LLC, Avica Technology
-and others.
-
-**The asdcplib project was originally housed on SourceForge.
-The project has moved to http://www.cinecert.com/asdcplib/
-
-The project formerly depended upon the mxflib project. Because
-of its focus on covering the whole of the MXF specifications,
-mxflib is considerably larger and more complex that what I
-require for this application. For this reason I have created
-a dedicated MXF implementation that is now part of this
-library. Special thanks to Matt Beard and Oliver Morgan for
-their great work and support.
-
-Thanks also to the members of the SMPTE DC28.20 packaging
-ad-hoc group and the members of the MXF Interop Initiative
-for their encouragement and support. Special thanks to
-Jim Whittlesey and Howard Lukk at DCI for proposing and
-supporting this project.
-
-
-Design Notes
-
-This library is intended (but of course not limited) for
-use by developers of commercial D-Cinema products (and now
-IMF!). It is designed to be easily integrated into a wide
-variety of development environments. Commercial users are
-strongly urged to use static linking (at least where you use
-this library) to prevent malicious in-field replacement of
-critical system modules. This recommendation should be
-considered wherever Open Source or Free software is being
-used in conjunction with critical security parameters, such
-as cryptographic keys.
-
-The author strives mightily to provide an API that is completely
-independent of operating system and other library dependencies,
-and which allows selective replacement of some modules for
-local needs. Specifically, the essence parsers and OpenSSL
-crypto functions can be replaced by linking to alternative
-implementations of the ASDCP:: objects which provide those
-services.
-
-AS_DCP.h contains the entire AS-DCP API. You do not need to
-read any of the other files, except maybe asdcp-test.cpp which
-contains detailed usage examples of each of the API's services.
-The KM_* files may be of interest for general development
-support, but may be ignored if all you want is simple AS-DCP
-support.
-
-Likewise, draft 2067-5 "IMF Essence Component" (AS-02) support
-is entirely contained in AS-02.h
-
-
-Build Instructions
-
-On more-or-less POSIX systems (OS X, Linux, and BSD), GNU make and
-autotools are required to build asdcplib. The same configure script
-will also build this package on Windows machines with Cygwin and
-MinGW installed. For those Windows users who would prefer to build
-this natively, an "nmake" build file and instructions can be found
-in the win32 subdirectory.
-
-OpenSSL is also required, any recent version should be fine. See
-http://www.openssl.org/ for more information and download instructions.
-
-Optional support for writing Timed Text Track Files is supported by
-either Xerces-C or Expat. See http://xerces.apache.org/xerces-c/ or
-http://expat.sourceforge.net/ for source and build instructions.
-
-To configure and build, type './configure' followed by 'make'. There
-are several test targets on the POSIX side, but you need to assemble
-a set of test files to use them. AS-02 support can be enabled with
- --enable-as-02.
-
-I have tested this build on win32, Linux, OpenBSD, and Darwin
-platforms. Others may work as well.
-
-
-
-
-Utilities
-
-asdcp-test - Writes, reads and verifies AS-DCP (MXF) track files.
-
-asdcp-wrap - Writes AS-DCP (MXF) track files.
-
-asdcp-unwrap - Extracts essence from AS-DCP (MXF) track files.
-
-asdcp-info - Displays information about AS-DCP (MXF) track files.
-
-asdcp-util - Calculates digests and generates random numbers and UUIDs.
-
-as-02-wrap - Writes AS-02 Essence Component files.
-
-as-02-unwrap - Extracts essence from AS-02 Essence Component files.
-
-kmfilegen - Writes and verifies large files using a platform-
-independent format. Use it to test issues related to large files.
-
-kmuuidgen, kmrandgen - generate UUID values and random numbers.
-
-wavesplit - Splits a WAVE file into two or more output files. Used
- to untangle incorrectly-paired DCDM sound files.
-
-blackwave - Write a WAVE file of zeros.
-
-pinkwave - Write a WAVE file of SMPTE ST 2095 pink noise.
-
-j2c-test - Displays information about JP2K codestreams.
-
-Experimental feature: Prototype for High Dynamic Range is a wrapper
-for the IMF application that allows JPEG-2000 codestreams to be paired
-with opaque blobs of metadata. AS-02 support must be enabled to
-build this feature, so --enable-as-02 must be enabled if
---enable-phdr is to be used. The following executable programs will be
-built:
-
-phdr-wrap - Writes AS-02 PHDR Essence Component files.
-
-phdr-unwrap - Extracts essence from AS-02 PHDR Essence Component files.
-
-
-Documentation
-
-The API documentation is mostly in AS_DCP.h. and AS_02.h Read those
-files for a detailed description of the library's capabilities. Read
-asdcp-*.cpp and as-02-*.cpp files for library usage examples. The
-command-line utilities all respond to -h.
-
-
Change History
-2019-02-12 - 2.10.32 -- bug fixes
+2019-02-22 - 2.10.32 -- bug fixes
o Fixed parsing of as-02-wrap -tfr (ACES) option value
o Fixed ISXD bugs:
o Incorrect UTF_8_Text_DataEssenceCoding UL
@@ -161,6 +11,7 @@ Change History
o Added wide-char support for filenames on Win32, allows UTF-8 characters in
calls to Kumu::File*::Open*(). The macro KM_WIN32_UTF8 must be defined to
enable this feature.
+ o CMake fixed to extract version form configure.ac
2018-10-15 - 2.10.31
diff --git a/README.md b/README.md
new file mode 100755
index 0000000..eb411af
--- /dev/null
+++ b/README.md
@@ -0,0 +1,113 @@
+
+# AS-DCP Lib
+
+## Introduction
+
+The asdcplib library is an API and command-line tool set that offers
+access to files conforming to the sound and picture track file formats
+developed by the SMPTE Working Group DC28.20 (now TC 21DC).
+
+Support has since been added for SMPTE ST 2067-5 "IMF Essence
+Component", AKA "AS-02", which was published and is maintained by
+SMPTE TC 35 PM. The initial draft of this code was donated by
+Fraunhofer IIS and was created by Robert Scheler and Heiko Sparenberg.
+It carries additional copyright information which should be listed
+whenever you link the AS-02 elements of the library. Please look at
+the top of the AS-02 files to see this copyright information.
+
+Support for ST 20XX OpenEXR was developed and contributed by Bjoern
+Stresing, Patrick Bichiou and Wolfgang Ruppel, supported by AMPAS.
+It carries additional copyright information which should be listed
+whenever you link the AS-02 elements of the library. Please look at
+the top of the AS-02 files to see this copyright information.
+
+AS-02 support is carried in separate object modules, so unless you
+`#include <AS_02.h>` and link `libas-02.so` you are still using plain old
+asdcp.
+
+
+## Documentation
+
+This library is intended (but of course not limited) for use by
+developers of commercial D-Cinema and IMF products and for commercial
+mastering toolchains. The documentation is terse and sparse.
+
+The API documentation is mostly in AS_DCP.h. and AS_02.h Read those
+files for a detailed description of the library's capabilities. Read
+asdcp-*.cpp and as-02-*.cpp files for library usage examples. The
+command-line utilities all respond to -h.
+
+Also, of course, the various SMPTE and ISO standards that underly all
+of this work should be well understood if you want to tinker with
+anything, or, in some cases, understand what properties are required
+in a particular supported use case (e.g., selecting audio channel labels.)
+
+
+## CLI Programs
+
+### Standard Utilities
+
+`asdcp-test` - DEPRECATED Writes, reads and verifies AS-DCP (MXF) track files.
+
+`asdcp-wrap` - Writes AS-DCP (MXF) track files.
+
+`asdcp-unwrap` - Extracts essence from AS-DCP (MXF) track files.
+
+`asdcp-info` - Displays information about AS-DCP (MXF) track files.
+
+`asdcp-util` - Calculates digests and generates random numbers and UUIDs.
+
+`as-02-wrap` - Writes AS-02 Essence Component files.
+
+`as-02-unwrap` - Extracts essence from AS-02 Essence Component files.
+
+`kmfilegen` - Writes and verifies large files using a platform-independent format. Use it to test issues related to large files.
+
+`kmuuidgen`, `kmrandgen` - generate UUID values and random numbers.
+
+`wavesplit` - Splits a WAVE file into two or more output files. Used to untangle incorrectly-paired DCDM sound files.
+
+`blackwave` - Write a WAVE file of zeros.
+
+`pinkwave` - Write a WAVE file of SMPTE ST 2095 pink noise.
+
+`j2c-test` - Displays information about JP2K codestreams.
+
+### PHDR
+
+An experimental feature, Prototype for High Dynamic Range is a wrapper
+for the IMF application that allows JPEG-2000 codestreams to be paired
+with opaque blobs of metadata. AS-02 support must be enabled to
+build this feature, so --enable-as-02 must be enabled if
+--enable-phdr is to be used. The following executable programs will be
+built:
+
+`phdr-wrap` - Writes AS-02 PHDR Essence Component files.
+
+`phdr-unwrap` - Extracts essence from AS-02 PHDR Essence Component files.
+
+
+## Historical Notes
+
+This work was originally funded by Digital Cinema Initiatives, LLC
+(DCI). Subsequent efforts have been funded by Deluxe Laboratories,
+Doremi Labs, CineCert LLC, Avica Technology and others.
+
+The asdcplib project was originally exchanged by FTP. The project was
+on [SourceForge](https://sourceforge.net/projects/asdcplib) between
+2005 and 2008, when it moved to a release-only distribution via
+[CineCert](https://www.cinecert.com/asdcplib/download). As of late
+February 2019, its new home is on [github](https://github.com/cinecert/asdcplib).
+
+In the eraliest days, the project depended upon the
+[mxflib](http://sourceforge.net/projects/mxflib) project. Because of
+its focus on covering the whole of the MXF specifications, mxflib is
+considerably larger and more complex that what was required for the
+AS-DCP application. For this reason I developed a dedicated MXF
+implementation. Special thanks to Matt Beard and Oliver Morgan for
+their great work and support.
+
+Thanks also to the members of the SMPTE DC28.20 packaging ad-hoc group
+and the members of the MXF Interop Initiative for their encouragement
+and support. Special thanks to Jim Whittlesey and Howard Lukk at DCI
+for proposing and supporting this project.
diff --git a/src/KM_xml.cpp b/src/KM_xml.cpp
index e7250af..68839a1 100644
--- a/src/KM_xml.cpp
+++ b/src/KM_xml.cpp
@@ -612,9 +612,6 @@ Kumu::XMLElement::ParseFirstFromString(const char* document, ui32_t doc_len)
if ( ! XML_Parse(Parser, document, doc_len, 1) )
{
- DefaultLogSink().Error("XML Parse error on line %d: %s\n",
- XML_GetCurrentLineNumber(Parser),
- XML_ErrorString(XML_GetErrorCode(Parser)));
XML_ParserFree(Parser);
return false;
}
@@ -1025,28 +1022,15 @@ Kumu::XMLElement::ParseFirstFromString(const char* document, ui32_t doc_len)
++errorCount;
}
}
- catch (const XMLException& e)
- {
- char* message = XMLString::transcode(e.getMessage());
- DefaultLogSink().Error("Parser error: %s\n", message);
- XMLString::release(&message);
- errorCount++;
- }
- catch (const SAXParseException& e)
- {
- char* message = XMLString::transcode(e.getMessage());
- DefaultLogSink().Error("Parser error: %s at line %d\n", message, e.getLineNumber());
- XMLString::release(&message);
- errorCount++;
- }
catch (...)
{
- DefaultLogSink().Error("Unexpected XML parser error\n");
errorCount++;
}
if ( errorCount == 0 )
- m_NamespaceOwner = (void*)docHandler->TakeNamespaceMap();
+ {
+ m_NamespaceOwner = (void*)docHandler->TakeNamespaceMap();
+ }
delete parser;
delete docHandler;
diff --git a/src/Metadata.cpp b/src/Metadata.cpp
index 8147e31..b21dc23 100755
--- a/src/Metadata.cpp
+++ b/src/Metadata.cpp
@@ -2538,7 +2538,7 @@ MPEG2VideoDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
//
-DMSegment::DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0)
+DMSegment::DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d)
{
assert(m_Dict);
m_UL = m_Dict->ul(MDD_DMSegment);
@@ -2559,9 +2559,18 @@ DMSegment::InitFromTLVSet(TLVReader& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DataDefinition));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, EventStartPosition));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi64(OBJ_READ_ARGS(DMSegment, Duration));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, EventComment));
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(DMSegment, Duration));
+ Duration.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadUi64(OBJ_READ_ARGS_OPT(DMSegment, EventStartPosition));
+ EventStartPosition.set_has_value( result == RESULT_OK );
+ }
+ if ( ASDCP_SUCCESS(result) ) {
+ result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(DMSegment, EventComment));
+ EventComment.set_has_value( result == RESULT_OK );
+ }
if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DMSegment, DMFramework));
return result;
}
@@ -2573,9 +2582,9 @@ DMSegment::WriteToTLVSet(TLVWriter& TLVSet)
assert(m_Dict);
Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DataDefinition));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, EventStartPosition));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS(DMSegment, Duration));
- if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, EventComment));
+ if ( ASDCP_SUCCESS(result) && ! Duration.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(DMSegment, Duration));
+ if ( ASDCP_SUCCESS(result) && ! EventStartPosition.empty() ) result = TLVSet.WriteUi64(OBJ_WRITE_ARGS_OPT(DMSegment, EventStartPosition));
+ if ( ASDCP_SUCCESS(result) && ! EventComment.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(DMSegment, EventComment));
if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DMSegment, DMFramework));
return result;
}
@@ -2586,8 +2595,8 @@ DMSegment::Copy(const DMSegment& rhs)
{
InterchangeObject::Copy(rhs);
DataDefinition = rhs.DataDefinition;
- EventStartPosition = rhs.EventStartPosition;
Duration = rhs.Duration;
+ EventStartPosition = rhs.EventStartPosition;
EventComment = rhs.EventComment;
DMFramework = rhs.DMFramework;
}
@@ -2604,9 +2613,15 @@ DMSegment::Dump(FILE* stream)
InterchangeObject::Dump(stream);
fprintf(stream, " %22s = %s\n", "DataDefinition", DataDefinition.EncodeString(identbuf, IdentBufferLen));
- fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition, identbuf));
- fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration, identbuf));
- fprintf(stream, " %22s = %s\n", "EventComment", EventComment.EncodeString(identbuf, IdentBufferLen));
+ if ( ! Duration.empty() ) {
+ fprintf(stream, " %22s = %s\n", "Duration", i64sz(Duration.get(), identbuf));
+ }
+ if ( ! EventStartPosition.empty() ) {
+ fprintf(stream, " %22s = %s\n", "EventStartPosition", i64sz(EventStartPosition.get(), identbuf));
+ }
+ if ( ! EventComment.empty() ) {
+ fprintf(stream, " %22s = %s\n", "EventComment", EventComment.get().EncodeString(identbuf, IdentBufferLen));
+ }
fprintf(stream, " %22s = %s\n", "DMFramework", DMFramework.EncodeString(identbuf, IdentBufferLen));
}
diff --git a/src/Metadata.h b/src/Metadata.h
index ebdb288..b2466ef 100755
--- a/src/Metadata.h
+++ b/src/Metadata.h
@@ -658,9 +658,9 @@ namespace ASDCP
public:
const Dictionary*& m_Dict;
UL DataDefinition;
- ui64_t EventStartPosition;
- ui64_t Duration;
- UTF16String EventComment;
+ optional_property<ui64_t > Duration;
+ optional_property<ui64_t > EventStartPosition;
+ optional_property<UTF16String > EventComment;
UUID DMFramework;
DMSegment(const Dictionary*& d);