public override bool Init()
{
Debug.Assert(m_scheme == Compression.JPEG);
/*
* Merge codec-specific tag information and override parent get/set
* field methods.
*/
m_tif.MergeFieldInfo(jpegFieldInfo, jpegFieldInfo.Length);
/*
* Allocate state block so tag methods have storage to record values.
*/
cleanState();
m_err = new JpegErrorManager(this);
m_parentTagMethods = m_tif.m_tagmethods;
m_tif.m_tagmethods = m_tagMethods;
/* Default values for codec-specific fields */
m_jpegquality = 75; /* Default IJG quality */
m_jpegcolormode = JpegColorMode.RGB;
m_jpegtablesmode = JpegTablesMode.QUANT | JpegTablesMode.HUFF;
m_tif.m_flags |= TiffFlags.NOBITREV; // no bit reversal, please
/*
** Create a JPEGTables field if no directory has yet been created.
** We do this just to ensure that sufficient space is reserved for
** the JPEGTables field. It will be properly created the right
** size later.
*/
if (m_tif.m_diroff == 0)
{
const int SIZE_OF_JPEGTABLES = 2000;
// The following line assumes incorrectly that all JPEG-in-TIFF
// files will have a JPEGTABLES tag generated and causes
// null-filled JPEGTABLES tags to be written when the JPEG data
// is placed with WriteRawStrip. The field bit should be
// set, anyway, later when actual JPEGTABLES header is
// generated, so removing it here hopefully is harmless.
//
// m_tif.setFieldBit(FIELD_JPEGTABLES);
//
m_jpegtables_length = SIZE_OF_JPEGTABLES;
m_jpegtables = new byte[m_jpegtables_length];
}
/*
* Mark the YCBCRSAMPLES as present even if it is not
* see: JPEGFixupTestSubsampling().
*/
m_tif.setFieldBit(FieldBit.YCbCrSubsampling);
return true;
}