summaryrefslogtreecommitdiff
path: root/src/as-02-info.cpp
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 /src/as-02-info.cpp
parent07f0749c9df03ec871e9aab0f82254467c46e02f (diff)
Enabled JPEG XS in as-02-info.
Diffstat (limited to 'src/as-02-info.cpp')
-rw-r--r--src/as-02-info.cpp98
1 files changed, 98 insertions, 0 deletions
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);