summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Richter <thomas.richter@iis.fraunhofer.de>2022-02-03 10:57:36 +0100
committerThomas Richter <thomas.richter@iis.fraunhofer.de>2022-02-03 10:57:36 +0100
commit04dfb231f7639a2a8252e240c51baf59991411c7 (patch)
tree2edca57447eee8fc3003fa572cb14047683823f5
parent07f0749c9df03ec871e9aab0f82254467c46e02f (diff)
Enabled JPEG XS in as-02-info.
-rw-r--r--src/AS_02_JXS.cpp2
-rwxr-xr-xsrc/AS_DCP_MXF.cpp4
-rw-r--r--src/as-02-info.cpp98
3 files changed, 103 insertions, 1 deletions
diff --git a/src/AS_02_JXS.cpp b/src/AS_02_JXS.cpp
index ded65ee..103436e 100644
--- a/src/AS_02_JXS.cpp
+++ b/src/AS_02_JXS.cpp
@@ -44,7 +44,7 @@ using Kumu::GenRandomValue;
//------------------------------------------------------------------------------------------
-static std::string JXS_PACKAGE_LABEL = "File Package: SMPTE ST 422 / ST 2124 frame wrapping of JPEG XS codestreams";
+static std::string JXS_PACKAGE_LABEL = "File Package: SMPTE ST 2124 frame wrapping of JPEG XS codestreams";
static std::string PICT_DEF_LABEL = "Image Track";
//------------------------------------------------------------------------------------------
diff --git a/src/AS_DCP_MXF.cpp b/src/AS_DCP_MXF.cpp
index 129edf1..643e274 100755
--- a/src/AS_DCP_MXF.cpp
+++ b/src/AS_DCP_MXF.cpp
@@ -248,6 +248,10 @@ ASDCP::EssenceType(const std::string& filename, EssenceType_t& type, const Kumu:
{
type = ESS_AS02_JPEG_2000;
}
+ else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(JPEGXSPictureSubDescriptor))) )
+ {
+ type = ESS_AS02_JPEG_XS;
+ }
else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(WaveAudioDescriptor), &md_object)) )
{
assert(md_object);
diff --git a/src/as-02-info.cpp b/src/as-02-info.cpp
index b9b281c..a1235ac 100644
--- a/src/as-02-info.cpp
+++ b/src/as-02-info.cpp
@@ -40,6 +40,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <AS_DCP.h>
#include <AS_02.h>
#include <AS_02_IAB.h>
+#include <AS_02_JXS.h>
#include <JP2K.h>
#include <AS_02_ACES.h>
#include <ACES.h>
@@ -592,6 +593,98 @@ class MyTextDescriptor : public TimedText::TimedTextDescriptor
}
};
+class MyJXSDescriptor
+{
+ RGBAEssenceDescriptor *m_RGBADescriptor;
+ CDCIEssenceDescriptor *m_CDCIDescriptor;
+ JPEGXSPictureSubDescriptor *m_JPEGXSSubDescriptor;
+public:
+ ui64_t ContainerDuration;
+ ASDCP::MXF::Rational m_SampleRate;
+ ASDCP::MXF::Rational m_EditRate;
+
+ public:
+ MyJXSDescriptor() :
+ m_RGBADescriptor(0),
+ m_CDCIDescriptor(0),
+ m_JPEGXSSubDescriptor(0),
+ ContainerDuration(0)
+ {}
+
+ void FillDescriptor(AS_02::JXS::MXFReader& Reader)
+ {
+ m_CDCIDescriptor = get_descriptor_by_type<AS_02::JXS::MXFReader, CDCIEssenceDescriptor>
+ (Reader, DefaultCompositeDict().ul(MDD_CDCIEssenceDescriptor));
+
+ m_RGBADescriptor = get_descriptor_by_type<AS_02::JXS::MXFReader, RGBAEssenceDescriptor>
+ (Reader, DefaultCompositeDict().ul(MDD_RGBAEssenceDescriptor));
+
+ if ( m_RGBADescriptor != 0 )
+ {
+ m_SampleRate = m_RGBADescriptor->SampleRate;
+ if ( ! m_RGBADescriptor->ContainerDuration.empty() )
+ {
+ ContainerDuration = m_RGBADescriptor->ContainerDuration;
+ }
+ }
+ else if ( m_CDCIDescriptor != 0 )
+ {
+ m_SampleRate = m_CDCIDescriptor->SampleRate;
+ if ( ! m_CDCIDescriptor->ContainerDuration.empty() )
+ {
+ ContainerDuration = m_CDCIDescriptor->ContainerDuration;
+ }
+ }
+ else
+ {
+ DefaultLogSink().Error("Picture descriptor not found.\n");
+ }
+
+ m_JPEGXSSubDescriptor = get_descriptor_by_type<AS_02::JXS::MXFReader, JPEGXSPictureSubDescriptor>
+ (Reader, DefaultCompositeDict().ul(MDD_JPEGXSPictureSubDescriptor));
+
+ if ( m_JPEGXSSubDescriptor == 0 )
+ {
+ DefaultLogSink().Error("JPEGXSPictureSubDescriptor not found.\n");
+ }
+
+ std::list<InterchangeObject*> ObjectList;
+ Reader.OP1aHeader().GetMDObjectsByType(DefaultCompositeDict().ul(MDD_Track), ObjectList);
+
+ if ( ObjectList.empty() )
+ {
+ DefaultLogSink().Error("MXF Metadata contains no Track Sets.\n");
+ }
+
+ m_EditRate = ((Track*)ObjectList.front())->EditRate;
+ }
+
+ void MyDump(FILE* stream) {
+ if ( stream == 0 )
+ {
+ stream = stderr;
+ }
+
+ if ( m_CDCIDescriptor != 0 )
+ {
+ m_CDCIDescriptor->Dump(stream);
+ }
+ else if ( m_RGBADescriptor != 0 )
+ {
+ m_RGBADescriptor->Dump(stream);
+ }
+ else
+ {
+ return;
+ }
+
+ if ( m_JPEGXSSubDescriptor != 0 )
+ {
+ m_JPEGXSSubDescriptor->Dump(stream);
+ }
+ }
+};
+
struct RateInfo
{
UL ul;
@@ -954,6 +1047,11 @@ show_file_info(CommandOptions& Options, const Kumu::IFileReaderFactory& fileRead
if ( ASDCP_SUCCESS(result) && Options.showcoding_flag )
wrapper.dump_WaveAudioDescriptor(stdout);
}
+ else if ( EssenceType == ESS_AS02_JPEG_XS )
+ {
+ FileInfoWrapper<AS_02::JXS::MXFReader, MyJXSDescriptor> wrapper(fileReaderFactory);
+ result = wrapper.file_info(Options, "JPEG XS");
+ }
else if ( EssenceType == ESS_AS02_IAB )
{
FileInfoWrapper<AS_02::IAB::MXFReader, MyIabDescriptor> wrapper(fileReaderFactory);