diff options
| author | Thomas Richter <thomas.richter@iis.fraunhofer.de> | 2022-02-03 10:57:36 +0100 |
|---|---|---|
| committer | Thomas Richter <thomas.richter@iis.fraunhofer.de> | 2022-02-03 10:57:36 +0100 |
| commit | 04dfb231f7639a2a8252e240c51baf59991411c7 (patch) | |
| tree | 2edca57447eee8fc3003fa572cb14047683823f5 | |
| parent | 07f0749c9df03ec871e9aab0f82254467c46e02f (diff) | |
Enabled JPEG XS in as-02-info.
| -rw-r--r-- | src/AS_02_JXS.cpp | 2 | ||||
| -rwxr-xr-x | src/AS_DCP_MXF.cpp | 4 | ||||
| -rw-r--r-- | src/as-02-info.cpp | 98 |
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); |
