summaryrefslogtreecommitdiff
path: root/src/JP2K_Codestream_Parser.cpp
diff options
context:
space:
mode:
authorJohn Hurst <jhurst@cinecert.com>2019-12-30 14:03:53 -0800
committerGitHub <noreply@github.com>2019-12-30 14:03:53 -0800
commit9e269bd45830f54551722a65b0d7aa8f327e17dc (patch)
tree6e03793692f45418ea89c55edcb95ce89d9aad5b /src/JP2K_Codestream_Parser.cpp
parenta67f55782d4758355190fe3f14ac6159b9d79e1e (diff)
parent39d533e10e9f5248c557caa0777c8c10ed5d737c (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-xsrc/JP2K_Codestream_Parser.cpp66
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;
+
}
}