CWS-TOOLING: integrate CWS cmcfixes70
This commit is contained in:
@@ -30,22 +30,16 @@
|
||||
|
||||
#include <tools/solar.h>
|
||||
|
||||
#ifdef SYSTEM_JPEG
|
||||
#define INT32 JPEG_INT32
|
||||
#endif
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#define INT32 JPEG_INT32
|
||||
#include "stdio.h"
|
||||
#include "jpeg.h"
|
||||
#include "jpeglib.h"
|
||||
#include "jerror.h"
|
||||
#undef INT32
|
||||
}
|
||||
|
||||
#ifdef SYSTEM_JPEG
|
||||
#undef INT32
|
||||
#endif
|
||||
|
||||
#define _JPEGPRIVATE
|
||||
#include <vcl/bmpacc.hxx>
|
||||
#include "jpeg.hxx"
|
||||
@@ -396,11 +390,7 @@ void* JPEGReader::CreateBitmap( void* pParam )
|
||||
|
||||
if(
|
||||
( bGray && ( BMP_FORMAT_8BIT_PAL == nFormat ) ) ||
|
||||
#ifndef SYSTEM_JPEG
|
||||
( !bGray && ( BMP_FORMAT_24BIT_TC_BGR == nFormat ) )
|
||||
#else
|
||||
( !bGray && ( BMP_FORMAT_24BIT_TC_RGB == nFormat ) )
|
||||
#endif
|
||||
)
|
||||
{
|
||||
pBmpBuf = pAcc->GetBuffer();
|
||||
@@ -463,15 +453,9 @@ void JPEGReader::FillBitmap()
|
||||
|
||||
for( long nX = 0L; nX < nWidth; nX++ )
|
||||
{
|
||||
#ifndef SYSTEM_JPEG
|
||||
aColor.SetBlue( *pTmp++ );
|
||||
aColor.SetGreen( *pTmp++ );
|
||||
aColor.SetRed( *pTmp++ );
|
||||
#else
|
||||
aColor.SetRed( *pTmp++ );
|
||||
aColor.SetGreen( *pTmp++ );
|
||||
aColor.SetBlue( *pTmp++ );
|
||||
#endif
|
||||
pAcc->SetPixel( nY, nX, aColor );
|
||||
}
|
||||
}
|
||||
@@ -651,19 +635,11 @@ void* JPEGWriter::GetScanline( long nY )
|
||||
for( long nX = 0L; nX < nWidth; nX++ )
|
||||
{
|
||||
aColor = pAcc->GetPaletteColor( (BYTE) pAcc->GetPixel( nY, nX ) );
|
||||
#ifndef SYSTEM_JPEG
|
||||
*pTmp++ = aColor.GetBlue();
|
||||
if ( bGreys )
|
||||
continue;
|
||||
*pTmp++ = aColor.GetGreen();
|
||||
*pTmp++ = aColor.GetRed();
|
||||
#else
|
||||
*pTmp++ = aColor.GetRed();
|
||||
if ( bGreys )
|
||||
continue;
|
||||
*pTmp++ = aColor.GetGreen();
|
||||
*pTmp++ = aColor.GetBlue();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -671,19 +647,11 @@ void* JPEGWriter::GetScanline( long nY )
|
||||
for( long nX = 0L; nX < nWidth; nX++ )
|
||||
{
|
||||
aColor = pAcc->GetPixel( nY, nX );
|
||||
#ifndef SYSTEM_JPEG
|
||||
*pTmp++ = aColor.GetBlue();
|
||||
if ( bGreys )
|
||||
continue;
|
||||
*pTmp++ = aColor.GetGreen();
|
||||
*pTmp++ = aColor.GetRed();
|
||||
#else
|
||||
*pTmp++ = aColor.GetRed();
|
||||
if ( bGreys )
|
||||
continue;
|
||||
*pTmp++ = aColor.GetGreen();
|
||||
*pTmp++ = aColor.GetBlue();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -738,14 +706,7 @@ BOOL JPEGWriter::Write( const Graphic& rGraphic )
|
||||
|
||||
if( pAcc )
|
||||
{
|
||||
if ( bGreys )
|
||||
bNative = ( pAcc->GetScanlineFormat() == BMP_FORMAT_8BIT_PAL );
|
||||
else
|
||||
#ifndef SYSTEM_JPEG
|
||||
bNative = ( pAcc->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_BGR );
|
||||
#else
|
||||
bNative = ( pAcc->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_RGB );
|
||||
#endif
|
||||
bNative = ( pAcc->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_RGB );
|
||||
|
||||
if( !bNative )
|
||||
pBuffer = new BYTE[ AlignedWidth4Bytes( bGreys ? pAcc->Width() * 8L : pAcc->Width() * 24L ) ];
|
||||
|
@@ -31,7 +31,8 @@
|
||||
#include "jpeglib.h"
|
||||
#include "jerror.h"
|
||||
#include "jpeg.h"
|
||||
|
||||
#include "rtl/alloc.h"
|
||||
#include "osl/diagnose.h"
|
||||
|
||||
struct my_error_mgr
|
||||
{
|
||||
@@ -78,6 +79,9 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
|
||||
long nWidth;
|
||||
long nHeight;
|
||||
long nAlignedWidth;
|
||||
JSAMPLE * range_limit;
|
||||
HPBYTE pScanLineBuffer = NULL;
|
||||
long nScanLineBufferComponents = 0;
|
||||
// declare bDecompCreated volatile because of gcc
|
||||
// warning: variable 'bDecompCreated' might be clobbered by `longjmp' or `vfork'
|
||||
volatile long bDecompCreated = 0;
|
||||
@@ -103,8 +107,12 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
|
||||
cinfo.output_gamma = 1.0;
|
||||
cinfo.raw_data_out = FALSE;
|
||||
cinfo.quantize_colors = FALSE;
|
||||
if ( cinfo.jpeg_color_space != JCS_GRAYSCALE )
|
||||
if ( cinfo.jpeg_color_space == JCS_YCbCr )
|
||||
cinfo.out_color_space = JCS_RGB;
|
||||
else if ( cinfo.jpeg_color_space == JCS_YCCK )
|
||||
cinfo.out_color_space = JCS_CMYK;
|
||||
|
||||
OSL_ASSERT(cinfo.out_color_space == JCS_CMYK || cinfo.out_color_space == JCS_GRAYSCALE || cinfo.out_color_space == JCS_RGB);
|
||||
|
||||
/* change scale for preview import */
|
||||
if( nPreviewWidth || nPreviewHeight )
|
||||
@@ -148,6 +156,14 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
|
||||
aCreateBitmapParam.bGray = cinfo.output_components == 1;
|
||||
pDIB = CreateBitmap( pJPEGReader, &aCreateBitmapParam );
|
||||
nAlignedWidth = aCreateBitmapParam.nAlignedWidth;
|
||||
range_limit=cinfo.sample_range_limit;
|
||||
|
||||
if ( cinfo.out_color_space == JCS_CMYK )
|
||||
{
|
||||
nScanLineBufferComponents = cinfo.output_width * 4;
|
||||
pScanLineBuffer = rtl_allocateMemory( nScanLineBufferComponents );
|
||||
}
|
||||
|
||||
if( pDIB )
|
||||
{
|
||||
if( aCreateBitmapParam.bTopDown )
|
||||
@@ -160,17 +176,37 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
|
||||
|
||||
for ( *pLines = 0; *pLines < nHeight; (*pLines)++ )
|
||||
{
|
||||
if (pScanLineBuffer!=NULL) { // in other words cinfo.out_color_space == JCS_CMYK
|
||||
int i;
|
||||
int j;
|
||||
jpeg_read_scanlines( &cinfo, (JSAMPARRAY) &pScanLineBuffer, 1 );
|
||||
// convert CMYK to RGB
|
||||
for( i=0, j=0; i < nScanLineBufferComponents; i+=4, j+=3 )
|
||||
{
|
||||
int c_=255-pScanLineBuffer[i+0];
|
||||
int m_=255-pScanLineBuffer[i+1];
|
||||
int y_=255-pScanLineBuffer[i+2];
|
||||
int k_=255-pScanLineBuffer[i+3];
|
||||
pTmp[j+0]=range_limit[ 255L - ( c_ + k_ ) ];
|
||||
pTmp[j+1]=range_limit[ 255L - ( m_ + k_ ) ];
|
||||
pTmp[j+2]=range_limit[ 255L - ( y_ + k_ ) ];
|
||||
}
|
||||
} else {
|
||||
jpeg_read_scanlines( &cinfo, (JSAMPARRAY) &pTmp, 1 );
|
||||
|
||||
}
|
||||
/* PENDING ??? */
|
||||
if ( cinfo.err->msg_code == 113 )
|
||||
break;
|
||||
break;
|
||||
|
||||
pTmp += nAlignedWidth;
|
||||
}
|
||||
}
|
||||
|
||||
jpeg_finish_decompress( &cinfo );
|
||||
if (pScanLineBuffer!=NULL) {
|
||||
rtl_freeMemory( pScanLineBuffer );
|
||||
pScanLineBuffer=NULL;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
|
@@ -35,10 +35,6 @@ TARGET=jpeg
|
||||
.INCLUDE : settings.mk
|
||||
.INCLUDE : $(PRJ)$/util$/svt.pmk
|
||||
|
||||
.IF "$(SYSTEM_JPEG)" == "YES"
|
||||
CFLAGS+=-DSYSTEM_JPEG
|
||||
.ENDIF
|
||||
|
||||
SOLARINC+=-I../../inc
|
||||
|
||||
# --- Files --------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user