/*
-Copyright (c) 2004, John Hurst
+Copyright (c) 2004-2006, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
\brief AS-DCP library, JPEG 2000 codestream essence reader implementation
*/
+#include <KM_fileio.h>
#include <AS_DCP.h>
-#include <FileIO.h>
#include <JP2K.h>
#include <assert.h>
+#include <KM_log.h>
+using Kumu::DefaultLogSink;
//------------------------------------------------------------------------------------------
public:
PictureDescriptor m_PDesc;
- FileReader m_File;
+ Kumu::FileReader m_File;
h__CodestreamParser()
{
if ( ASDCP_SUCCESS(result) )
{
- fsize_t file_size = m_File.Size();
+ Kumu::fsize_t file_size = m_File.Size();
if ( FB.Capacity() < file_size )
{
- DefaultLogSink().Error("FrameBuf.Capacity: %lu frame length: %lu\n", FB.Capacity(), (ui32_t)file_size);
+ DefaultLogSink().Error("FrameBuf.Capacity: %u frame length: %u\n", FB.Capacity(), (ui32_t)file_size);
return RESULT_SMALLBUF;
}
}
while ( p < end_p && ASDCP_SUCCESS(result) )
{
result = GetNextMarker(&p, NextMarker);
-#if 0
- fprintf(stderr, "%s Length: %lu\n",
- GetMarkerString(NextMarker.m_Type), NextMarker.m_DataSize);
-#endif
+
+ if ( ASDCP_FAILURE(result) )
+ {
+ result = RESULT_RAW_ESS;
+ break;
+ }
switch ( NextMarker.m_Type )
{
if ( m_PDesc.Csize != 3 )
{
- DefaultLogSink().Error("Unexpected number of components: %lu\n", m_PDesc.Csize);
+ DefaultLogSink().Error("Unexpected number of components: %u\n", m_PDesc.Csize);
return RESULT_RAW_FORMAT;
}
break;
case MRK_COD:
- if ( NextMarker.m_DataSize > DefaultCodingDataLength )
+ memset(&m_PDesc.CodingStyleDefault, 0, sizeof(CodingStyleDefault_t));
+
+ if ( NextMarker.m_DataSize > sizeof(CodingStyleDefault_t) )
{
- DefaultLogSink().Error("Unexpectedly large CodingStyle data: %lu\n", NextMarker.m_DataSize);
+ DefaultLogSink().Error("Unexpectedly large CodingStyle data: %u\n", NextMarker.m_DataSize);
return RESULT_RAW_FORMAT;
}
- m_PDesc.CodingStyleLength = NextMarker.m_DataSize;
- memcpy(m_PDesc.CodingStyle, NextMarker.m_Data, m_PDesc.CodingStyleLength);
+ memcpy(&m_PDesc.CodingStyleDefault, NextMarker.m_Data, NextMarker.m_DataSize);
break;
case MRK_QCD:
- if ( NextMarker.m_DataSize > DefaultCodingDataLength )
+ memset(&m_PDesc.QuantizationDefault, 0, sizeof(QuantizationDefault_t));
+
+ if ( NextMarker.m_DataSize < 16 )
+ {
+ DefaultLogSink().Error("No quantization signaled\n");
+ return RESULT_RAW_FORMAT;
+ }
+
+ if ( NextMarker.m_DataSize > MaxDefaults )
{
- DefaultLogSink().Error("Unexpectedly large QuantDefault data: %lu\n", NextMarker.m_DataSize);
+ DefaultLogSink().Error("Quantization Default length exceeds maximum %d\n", NextMarker.m_DataSize);
return RESULT_RAW_FORMAT;
}
- m_PDesc.QuantDefaultLength = NextMarker.m_DataSize;
- memcpy(m_PDesc.QuantDefault, NextMarker.m_Data, m_PDesc.QuantDefaultLength);
+ memcpy(&m_PDesc.QuantizationDefault, NextMarker.m_Data, NextMarker.m_DataSize);
+ m_PDesc.QuantizationDefault.SPqcdLength = NextMarker.m_DataSize - 1;
break;
}
}