TIFF loader: Allocate large enough buffer when (bpp * ncn) > 8.
Conflicts: modules/highgui/src/grfmt_tiff.cpp floodfill return value removed
This commit is contained in:
@@ -247,7 +247,8 @@ bool TiffDecoder::readData( Mat& img )
|
||||
(!is_tiled && tile_height0 == std::numeric_limits<uint32>::max()) )
|
||||
tile_height0 = m_height;
|
||||
|
||||
AutoBuffer<uchar> _buffer( size_t(8) * tile_height0*tile_width0);
|
||||
const size_t buffer_size = bpp * ncn * tile_height0 * tile_width0;
|
||||
AutoBuffer<uchar> _buffer( buffer_size );
|
||||
uchar* buffer = _buffer;
|
||||
ushort* buffer16 = (ushort*)buffer;
|
||||
float* buffer32 = (float*)buffer;
|
||||
@@ -313,9 +314,9 @@ bool TiffDecoder::readData( Mat& img )
|
||||
case 16:
|
||||
{
|
||||
if( !is_tiled )
|
||||
ok = (int)TIFFReadEncodedStrip( tif, tileidx, (uint32*)buffer, (tsize_t)-1 ) >= 0;
|
||||
ok = (int)TIFFReadEncodedStrip( tif, tileidx, (uint32*)buffer, buffer_size ) >= 0;
|
||||
else
|
||||
ok = (int)TIFFReadEncodedTile( tif, tileidx, (uint32*)buffer, (tsize_t)-1 ) >= 0;
|
||||
ok = (int)TIFFReadEncodedTile( tif, tileidx, (uint32*)buffer, buffer_size ) >= 0;
|
||||
|
||||
if( !ok )
|
||||
{
|
||||
@@ -384,9 +385,9 @@ bool TiffDecoder::readData( Mat& img )
|
||||
case 64:
|
||||
{
|
||||
if( !is_tiled )
|
||||
ok = (int)TIFFReadEncodedStrip( tif, tileidx, buffer, (tsize_t)-1 ) >= 0;
|
||||
ok = (int)TIFFReadEncodedStrip( tif, tileidx, buffer, buffer_size ) >= 0;
|
||||
else
|
||||
ok = (int)TIFFReadEncodedTile( tif, tileidx, buffer, (tsize_t)-1 ) >= 0;
|
||||
ok = (int)TIFFReadEncodedTile( tif, tileidx, buffer, buffer_size ) >= 0;
|
||||
|
||||
if( !ok || ncn != 1 )
|
||||
{
|
||||
|
Reference in New Issue
Block a user