diff options
author | Ivo Hinkelmann <ihi@openoffice.org> | 2010-03-03 13:37:01 +0100 |
---|---|---|
committer | Ivo Hinkelmann <ihi@openoffice.org> | 2010-03-03 13:37:01 +0100 |
commit | f696d8ce6bbcc8cded7b075049a8c163c20c3782 (patch) | |
tree | b75d7f933d15335bca8b07bbd12c5abaf9dbd999 | |
parent | 44fdb66e124afe5d1bcfe778e83573f63d005215 (diff) | |
parent | 8ada07c6a96fd24cfbb7d0099795abdfe9fb81d1 (diff) |
CWS-TOOLING: integrate CWS cmcfixes70
Notes
split repo tag: libs-gui_ooo/DEV300_m74
-rw-r--r-- | svtools/source/filter.vcl/jpeg/jpeg.cxx | 45 | ||||
-rw-r--r-- | svtools/source/filter.vcl/jpeg/jpegc.c | 44 | ||||
-rw-r--r-- | svtools/source/filter.vcl/jpeg/makefile.mk | 4 |
3 files changed, 43 insertions, 50 deletions
diff --git a/svtools/source/filter.vcl/jpeg/jpeg.cxx b/svtools/source/filter.vcl/jpeg/jpeg.cxx index 045dd00cc96f..7fd2e09a82dd 100644 --- a/svtools/source/filter.vcl/jpeg/jpeg.cxx +++ b/svtools/source/filter.vcl/jpeg/jpeg.cxx @@ -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 ) ]; diff --git a/svtools/source/filter.vcl/jpeg/jpegc.c b/svtools/source/filter.vcl/jpeg/jpegc.c index 78602556097b..29b4749a7b51 100644 --- a/svtools/source/filter.vcl/jpeg/jpegc.c +++ b/svtools/source/filter.vcl/jpeg/jpegc.c @@ -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: diff --git a/svtools/source/filter.vcl/jpeg/makefile.mk b/svtools/source/filter.vcl/jpeg/makefile.mk index 653ca77ed7eb..c782c520324c 100644 --- a/svtools/source/filter.vcl/jpeg/makefile.mk +++ b/svtools/source/filter.vcl/jpeg/makefile.mk @@ -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 -------------------------------------------------------- |