summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvo Hinkelmann <ihi@openoffice.org>2010-03-03 13:37:01 +0100
committerIvo Hinkelmann <ihi@openoffice.org>2010-03-03 13:37:01 +0100
commitf696d8ce6bbcc8cded7b075049a8c163c20c3782 (patch)
treeb75d7f933d15335bca8b07bbd12c5abaf9dbd999
parent44fdb66e124afe5d1bcfe778e83573f63d005215 (diff)
parent8ada07c6a96fd24cfbb7d0099795abdfe9fb81d1 (diff)
CWS-TOOLING: integrate CWS cmcfixes70
Notes
split repo tag: libs-gui_ooo/DEV300_m74
-rw-r--r--svtools/source/filter.vcl/jpeg/jpeg.cxx45
-rw-r--r--svtools/source/filter.vcl/jpeg/jpegc.c44
-rw-r--r--svtools/source/filter.vcl/jpeg/makefile.mk4
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 --------------------------------------------------------