[Libreoffice-commits] core.git: vcl/source
Tomaž Vajngerl
quikee at gmail.com
Tue Apr 2 11:54:34 PDT 2013
vcl/source/filter/jpeg/jpeg.cxx | 48 +++++++++++++++++++++++-----------------
vcl/source/filter/jpeg/jpeg.hxx | 24 +++++++++-----------
vcl/source/filter/jpeg/jpegc.c | 22 ++++++++++--------
3 files changed, 51 insertions(+), 43 deletions(-)
New commits:
commit a05ebaa139562c8b8b208d967daa08e0b3992d05
Author: Tomaž Vajngerl <quikee at gmail.com>
Date: Tue Apr 2 20:48:02 2013 +0200
Jpeg filter: destroy cinfo at setjmp + minor code clenups
Change-Id: Iceaaf6cf98a4c64a17e88e4d3191cd7649940e82
diff --git a/vcl/source/filter/jpeg/jpeg.cxx b/vcl/source/filter/jpeg/jpeg.cxx
index 837e7c5..a4d1b2d 100644
--- a/vcl/source/filter/jpeg/jpeg.cxx
+++ b/vcl/source/filter/jpeg/jpeg.cxx
@@ -73,7 +73,7 @@ typedef struct
JOCTET * buffer; /* start of buffer */
} my_destination_mgr;
-typedef my_destination_mgr * my_dest_ptr;
+typedef my_destination_mgr* my_dest_ptr;
extern "C" void init_destination (j_compress_ptr cinfo)
{
@@ -281,7 +281,7 @@ JPEGReader::JPEGReader( SvStream& rStm, void* /*pCallData*/, sal_Bool bSetLS ) :
nLastLines ( 0 ),
bSetLogSize ( bSetLS )
{
- maUpperName = rtl::OUString("SVIJPEG");
+ maUpperName = OUString("SVIJPEG");
nFormerPos = nLastPos;
}
@@ -483,10 +483,10 @@ ReadState JPEGReader::Read( Graphic& rGraphic )
long nEndPos;
long nLines;
ReadState eReadState;
- sal_Bool bRet = sal_False;
- sal_uInt8 cDummy;
+ sal_Bool bRet = sal_False;
+ sal_uInt8 cDummy;
-#if 1 // TODO: is it possible to get rid of this seek to the end?
+ // TODO: is it possible to get rid of this seek to the end?
// check if the stream's end is already available
rIStm.Seek( STREAM_SEEK_TO_END );
rIStm >> cDummy;
@@ -505,7 +505,7 @@ ReadState JPEGReader::Read( Graphic& rGraphic )
// seek back to the original position
rIStm.Seek( nLastPos );
-#endif
+
Size aPreviewSize = GetPreviewSize();
SetJpegPreviewSizeHint( aPreviewSize.Width(), aPreviewSize.Height() );
@@ -526,16 +526,20 @@ ReadState JPEGReader::Read( Graphic& rGraphic )
pAcc = NULL;
if( rIStm.GetError() == ERRCODE_IO_PENDING )
+ {
rGraphic = CreateIntermediateGraphic( aBmp, nLines );
+ }
else
+ {
rGraphic = aBmp;
+ }
bRet = sal_True;
}
else if( rIStm.GetError() == ERRCODE_IO_PENDING )
bRet = sal_True;
- // Status setzen ( Pending hat immer Vorrang )
+ // Set status ( Pending has priority )
if( rIStm.GetError() == ERRCODE_IO_PENDING )
{
eReadState = JPEGREAD_NEED_MORE;
@@ -553,13 +557,13 @@ ReadState JPEGReader::Read( Graphic& rGraphic )
return eReadState;
}
-JPEGWriter::JPEGWriter( SvStream& rStm, const uno::Sequence< beans::PropertyValue >* pFilterData, bool* pExportWasGrey ) :
- rOStm ( rStm ),
+JPEGWriter::JPEGWriter( SvStream& rStream, const uno::Sequence< beans::PropertyValue >* pFilterData, bool* pExportWasGrey ) :
+ rOStm ( rStream ),
pAcc ( NULL ),
pBuffer ( NULL ),
pExpWasGrey ( pExportWasGrey )
{
- FilterConfigItem aConfigItem( (uno::Sequence< beans::PropertyValue >*)pFilterData );
+ FilterConfigItem aConfigItem( (uno::Sequence< beans::PropertyValue >*) pFilterData );
bGreys = aConfigItem.ReadInt32( "ColorMode", 0 ) != 0;
nQuality = aConfigItem.ReadInt32( "Quality", 75 );
aChromaSubsampling = aConfigItem.ReadInt32( "ChromaSubsamplingMode", 0 );
@@ -586,12 +590,14 @@ void* JPEGWriter::GetScanline( long nY )
if( pAcc )
{
if( bNative )
+ {
pScanline = pAcc->GetScanline( nY );
+ }
else if( pBuffer )
{
BitmapColor aColor;
long nWidth = pAcc->Width();
- sal_uInt8* pTmp = pBuffer;
+ sal_uInt8* pTmp = pBuffer;
if( pAcc->HasPalette() )
{
@@ -599,10 +605,11 @@ void* JPEGWriter::GetScanline( long nY )
{
aColor = pAcc->GetPaletteColor( (sal_uInt8) pAcc->GetPixel( nY, nX ) );
*pTmp++ = aColor.GetRed();
- if ( bGreys )
- continue;
- *pTmp++ = aColor.GetGreen();
- *pTmp++ = aColor.GetBlue();
+ if ( !bGreys )
+ {
+ *pTmp++ = aColor.GetGreen();
+ *pTmp++ = aColor.GetBlue();
+ }
}
}
else
@@ -611,10 +618,11 @@ void* JPEGWriter::GetScanline( long nY )
{
aColor = pAcc->GetPixel( nY, nX );
*pTmp++ = aColor.GetRed();
- if ( bGreys )
- continue;
- *pTmp++ = aColor.GetGreen();
- *pTmp++ = aColor.GetBlue();
+ if ( !bGreys )
+ {
+ *pTmp++ = aColor.GetGreen();
+ *pTmp++ = aColor.GetBlue();
+ }
}
}
@@ -631,7 +639,7 @@ sal_Bool JPEGWriter::Write( const Graphic& rGraphic )
if ( xStatusIndicator.is() )
{
- rtl::OUString aMsg;
+ OUString aMsg;
xStatusIndicator->start( aMsg, 100 );
}
diff --git a/vcl/source/filter/jpeg/jpeg.hxx b/vcl/source/filter/jpeg/jpeg.hxx
index b77f6c3..e2f11b6 100644
--- a/vcl/source/filter/jpeg/jpeg.hxx
+++ b/vcl/source/filter/jpeg/jpeg.hxx
@@ -56,9 +56,6 @@ public:
void* CreateBitmap( void* JPEGCreateBitmapParam );
public:
-
-
-
JPEGReader( SvStream& rStm, void* pCallData, sal_Bool bSetLogSize );
virtual ~JPEGReader();
@@ -84,24 +81,25 @@ class JPEGWriter
public:
- void* GetScanline( long nY );
+ void* GetScanline( long nY );
+
+ JPEGWriter( SvStream& rOStm,
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >* pFilterData,
+ bool* pExportWasGrey = NULL );
- JPEGWriter( SvStream& rOStm, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >* pFilterData,
- bool* pExportWasGrey = NULL );
- ~JPEGWriter() {};
+ ~JPEGWriter() {};
- sal_Bool Write( const Graphic& rGraphic );
+ sal_Bool Write( const Graphic& rGraphic );
};
#endif // _JPEGPRIVATE
sal_Bool ImportJPEG( SvStream& rStream, Graphic& rGraphic, void* pCallerData, sal_Int32 nImportFlags );
-sal_Bool ExportJPEG( SvStream& rStream,
- const Graphic& rGraphic,
- const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >* pFilterData,
- bool* pExportWasGrey = NULL
- );
+sal_Bool ExportJPEG(SvStream& rStream,
+ const Graphic& rGraphic,
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >* pFilterData,
+ bool* pExportWasGrey = NULL);
#endif // _JPEG_HXX
diff --git a/vcl/source/filter/jpeg/jpegc.c b/vcl/source/filter/jpeg/jpegc.c
index a18f197..29d4ef0 100644
--- a/vcl/source/filter/jpeg/jpegc.c
+++ b/vcl/source/filter/jpeg/jpegc.c
@@ -35,8 +35,7 @@ struct my_error_mgr
void jpeg_svstream_src (j_decompress_ptr cinfo, void* infile);
void jpeg_svstream_dest (j_compress_ptr cinfo, void* outfile);
-METHODDEF( void )
-my_error_exit (j_common_ptr cinfo)
+METHODDEF( void ) my_error_exit (j_common_ptr cinfo)
{
my_error_ptr myerr = (my_error_ptr) cinfo->err;
(*cinfo->err->output_message) (cinfo);
@@ -44,8 +43,7 @@ my_error_exit (j_common_ptr cinfo)
}
-METHODDEF( void )
-my_output_message (j_common_ptr cinfo)
+METHODDEF( void ) my_output_message (j_common_ptr cinfo)
{
char buffer[JMSG_LENGTH_MAX];
(*cinfo->err->format_message) (cinfo, buffer);
@@ -76,7 +74,10 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
long nScanLineBufferComponents = 0;
if ( setjmp( jerr.setjmp_buffer ) )
+ {
+ jpeg_destroy_decompress( &cinfo );
return;
+ }
cinfo.err = jpeg_std_error( &jerr.pub );
jerr.pub.error_exit = my_error_exit;
@@ -144,7 +145,7 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
if ( cinfo.out_color_space == JCS_CMYK )
{
- nScanLineBufferComponents = cinfo.output_width * 4;
+ nScanLineBufferComponents = cinfo.output_width * 4;
pScanLineBuffer = rtl_allocateMemory( nScanLineBufferComponents );
}
@@ -187,14 +188,12 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines )
}
if ( pDIB )
- {
jpeg_finish_decompress( &cinfo );
- }
else
- {
jpeg_abort_decompress( &cinfo );
- }
- if (pScanLineBuffer!=NULL) {
+
+ if (pScanLineBuffer!=NULL)
+ {
rtl_freeMemory( pScanLineBuffer );
pScanLineBuffer=NULL;
}
@@ -212,7 +211,10 @@ long WriteJPEG( void* pJPEGWriter, void* pOStm,
long nY;
if ( setjmp( jerr.setjmp_buffer ) )
+ {
+ jpeg_destroy_compress( &cinfo );
return 0;
+ }
cinfo.err = jpeg_std_error( &jerr.pub );
jerr.pub.error_exit = my_error_exit;
More information about the Libreoffice-commits
mailing list