diff options
| author | John Hurst <jhurst@cinecert.com> | 2019-12-30 14:03:53 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-30 14:03:53 -0800 |
| commit | 9e269bd45830f54551722a65b0d7aa8f327e17dc (patch) | |
| tree | 6e03793692f45418ea89c55edcb95ce89d9aad5b /src/JP2K_Codestream_Parser.cpp | |
| parent | a67f55782d4758355190fe3f14ac6159b9d79e1e (diff) | |
| parent | 39d533e10e9f5248c557caa0777c8c10ed5d737c (diff) | |
Merge pull request #20 from cinecert/htj2c
WIP: add support for ST 422:2019
Diffstat (limited to 'src/JP2K_Codestream_Parser.cpp')
| -rwxr-xr-x | src/JP2K_Codestream_Parser.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/JP2K_Codestream_Parser.cpp b/src/JP2K_Codestream_Parser.cpp index 0ed2649..9d55409 100755 --- a/src/JP2K_Codestream_Parser.cpp +++ b/src/JP2K_Codestream_Parser.cpp @@ -101,6 +101,12 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe const byte_t* p = FB.RoData(); const byte_t* end_p = p + FB.Size(); + /* initialize optional items */ + + PDesc.ExtendedCapabilities.N = JP2K::NoExtendedCapabilitiesSignaled; + PDesc.Profile.N = 0; + PDesc.CorrespondingProfile.N = 0; + while ( p < end_p && ASDCP_SUCCESS(result) ) { result = GetNextMarker(&p, NextMarker); @@ -178,6 +184,66 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe memcpy(&PDesc.QuantizationDefault, NextMarker.m_Data, NextMarker.m_DataSize); PDesc.QuantizationDefault.SPqcdLength = NextMarker.m_DataSize - 1; break; + + case MRK_CAP: + { + Accessor::CAP CAP_(NextMarker); + + PDesc.ExtendedCapabilities.Pcap = CAP_.pcap(); + + PDesc.ExtendedCapabilities.N = CAP_.N(); + + for (i32_t i = 0; i < CAP_.N(); i++) { + + PDesc.ExtendedCapabilities.Ccap[i] = CAP_.ccap(i); + + } + + } + break; + + case MRK_PRF: + { + Accessor::PRF PRF_(NextMarker); + + ui16_t n = PRF_.N(); + + if ( n > MaxPRFN ) + { + DefaultLogSink().Error("Number (%d) of Pprf^i exceeds maximum supported\n", n); + return RESULT_RAW_FORMAT; + } + + PDesc.Profile.N = n; + + for(i32_t i = 0; i < n ; i++) { + + PDesc.Profile.Pprf[i] = PRF_.pprf(i+1); + } + } + break; + + case MRK_CPF: + { + Accessor::CPF CPF_(NextMarker); + + ui16_t n = CPF_.N(); + + if ( n > MaxCPFN ) + { + DefaultLogSink().Error("Number (%d) of Pcpf^i exceeds maximum supported\n", n); + return RESULT_RAW_FORMAT; + } + + PDesc.CorrespondingProfile.N = n; + + for(i32_t i = 0; i < n; i++) { + + PDesc.CorrespondingProfile.Pcpf[i] = CPF_.pcpf(i+1); + } + } + break; + } } |
