vcl/source/filter/jpeg/jpeg.cxx | 3 +- vcl/source/filter/jpeg/jpeg.h | 2 - vcl/source/filter/jpeg/jpeg.hxx | 5 ++- vcl/source/filter/jpeg/jpegc.c | 60 ++++++++++++++++++---------------------- 4 files changed, 34 insertions(+), 36 deletions(-)
New commits: commit 2c04523b33335bb8b36509789a536542d0f89e02 Author: Tomaž Vajngerl <qui...@gmail.com> Date: Fri Mar 29 18:54:36 2013 +0100 We are in 2013 - remove "goto" in jpeg filter. Change-Id: I39cea3e90f0ac57168e1cd2d4a9af9199e1416fb diff --git a/vcl/source/filter/jpeg/jpegc.c b/vcl/source/filter/jpeg/jpegc.c index 929c216..a18f197 100644 --- a/vcl/source/filter/jpeg/jpegc.c +++ b/vcl/source/filter/jpeg/jpegc.c @@ -74,23 +74,15 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines ) 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; - - /* Falls der Stream nicht ausreicht (IO_PENDING) - wird ueber ein longjmp in der Schleife nach Exit - gesprungen, wir geben dann die Anzahl - der bisher bearbeiteten Scanlines zurueck*/ + if ( setjmp( jerr.setjmp_buffer ) ) - goto Exit; + return; cinfo.err = jpeg_std_error( &jerr.pub ); jerr.pub.error_exit = my_error_exit; jerr.pub.output_message = my_output_message; jpeg_create_decompress( &cinfo ); - bDecompCreated = 1; jpeg_svstream_src( &cinfo, pIStm ); jpeg_read_header( &cinfo, sal_True ); @@ -207,10 +199,7 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines ) pScanLineBuffer=NULL; } -Exit: - - if( bDecompCreated ) - jpeg_destroy_decompress( &cinfo ); + jpeg_destroy_decompress( &cinfo ); } long WriteJPEG( void* pJPEGWriter, void* pOStm, @@ -221,21 +210,15 @@ long WriteJPEG( void* pJPEGWriter, void* pOStm, struct my_error_mgr jerr; void* pScanline; long nY; - // declare bCompCreated, bRet volatile because of gcc - // warning: variable 'bCompCreated' might be clobbered by `longjmp' or `vfork' - volatile long bCompCreated = 0; - volatile long bRet = 0; if ( setjmp( jerr.setjmp_buffer ) ) - goto Exit; + return 0; cinfo.err = jpeg_std_error( &jerr.pub ); jerr.pub.error_exit = my_error_exit; jerr.pub.output_message = my_output_message; jpeg_create_compress( &cinfo ); - bCompCreated = 1; - jpeg_svstream_dest( &cinfo, pOStm ); cinfo.image_width = (JDIMENSION) nWidth; @@ -283,19 +266,16 @@ long WriteJPEG( void* pJPEGWriter, void* pOStm, jpeg_write_scanlines( &cinfo, (JSAMPARRAY) &pScanline, 1 ); if( JPEGCallback( pCallbackData, nY * 100L / nHeight ) ) - goto Exit; + { + jpeg_destroy_compress( &cinfo ); + return 0; + } } - bRet = 1; - jpeg_finish_compress(&cinfo); + jpeg_destroy_compress( &cinfo ); -Exit: - - if ( bCompCreated ) - jpeg_destroy_compress( &cinfo ); - - return bRet; + return 1; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit dc10b3d739ed3a8b6a2a6b54f748f2bac0edf205 Author: Tomaž Vajngerl <qui...@gmail.com> Date: Fri Mar 29 18:04:54 2013 +0100 Add Chroma subsampling options to jpeg writer. Change-Id: I247a261bb96b0c437a43922070777892cdcbc1f6 diff --git a/vcl/source/filter/jpeg/jpeg.cxx b/vcl/source/filter/jpeg/jpeg.cxx index 206c92d..837e7c5 100644 --- a/vcl/source/filter/jpeg/jpeg.cxx +++ b/vcl/source/filter/jpeg/jpeg.cxx @@ -562,6 +562,7 @@ JPEGWriter::JPEGWriter( SvStream& rStm, const uno::Sequence< beans::PropertyValu FilterConfigItem aConfigItem( (uno::Sequence< beans::PropertyValue >*)pFilterData ); bGreys = aConfigItem.ReadInt32( "ColorMode", 0 ) != 0; nQuality = aConfigItem.ReadInt32( "Quality", 75 ); + aChromaSubsampling = aConfigItem.ReadInt32( "ChromaSubsamplingMode", 0 ); if ( pFilterData ) { @@ -676,7 +677,7 @@ sal_Bool JPEGWriter::Write( const Graphic& rGraphic ) JPEGCallbackStruct aCallbackData; aCallbackData.xStatusIndicator = xStatusIndicator; - bRet = (sal_Bool) WriteJPEG( this, &rOStm, pAcc->Width(), pAcc->Height(), bGreys, nQuality, &aCallbackData ); + bRet = (sal_Bool) WriteJPEG( this, &rOStm, pAcc->Width(), pAcc->Height(), bGreys, nQuality, aChromaSubsampling, &aCallbackData ); delete[] pBuffer; pBuffer = NULL; diff --git a/vcl/source/filter/jpeg/jpeg.h b/vcl/source/filter/jpeg/jpeg.h index a6b5f0f..cebf81c 100644 --- a/vcl/source/filter/jpeg/jpeg.h +++ b/vcl/source/filter/jpeg/jpeg.h @@ -49,7 +49,7 @@ void JPEGFree( void *ptr ); long JPEGCallback( void* pCallbackData, long nPercent ); long WriteJPEG( void* pJPEGWriter, void* pOStm, long nWidth, long nHeight, long bGreyScale, - long nQualityPercent, void* pCallbackData ); + long nQualityPercent, long aChromaSubsampling, void* pCallbackData ); void* GetScanline( void* pJPEGWriter, long nY ); void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines ); diff --git a/vcl/source/filter/jpeg/jpeg.hxx b/vcl/source/filter/jpeg/jpeg.hxx index bd1adae..b77f6c3 100644 --- a/vcl/source/filter/jpeg/jpeg.hxx +++ b/vcl/source/filter/jpeg/jpeg.hxx @@ -71,11 +71,12 @@ class JPEGWriter SvStream& rOStm; Bitmap aBmp; BitmapReadAccess* pAcc; - sal_uInt8* pBuffer; - sal_Bool bNative; + sal_uInt8* pBuffer; + sal_Bool bNative; sal_Bool bGreys; sal_Int32 nQuality; + sal_Int32 aChromaSubsampling; bool* pExpWasGrey; diff --git a/vcl/source/filter/jpeg/jpegc.c b/vcl/source/filter/jpeg/jpegc.c index 16711d9..929c216 100644 --- a/vcl/source/filter/jpeg/jpegc.c +++ b/vcl/source/filter/jpeg/jpegc.c @@ -91,7 +91,7 @@ void ReadJPEG( void* pJPEGReader, void* pIStm, long* pLines ) jpeg_create_decompress( &cinfo ); bDecompCreated = 1; - jpeg_svstream_src( &cinfo, pIStm ); + jpeg_svstream_src( &cinfo, pIStm ); jpeg_read_header( &cinfo, sal_True ); cinfo.scale_num = 1; @@ -215,7 +215,7 @@ Exit: long WriteJPEG( void* pJPEGWriter, void* pOStm, long nWidth, long nHeight, long bGreys, - long nQualityPercent, void* pCallbackData ) + long nQualityPercent, long aChromaSubsampling, void* pCallbackData ) { struct jpeg_compress_struct cinfo; struct my_error_mgr jerr; @@ -257,6 +257,22 @@ long WriteJPEG( void* pJPEGWriter, void* pOStm, if ( ( nWidth > 128 ) || ( nHeight > 128 ) ) jpeg_simple_progression( &cinfo ); + if (aChromaSubsampling == 1) // YUV 4:4:4 + { + cinfo.comp_info[0].h_samp_factor = 1; + cinfo.comp_info[0].v_samp_factor = 1; + } + else if (aChromaSubsampling == 2) // YUV 4:2:2 + { + cinfo.comp_info[0].h_samp_factor = 2; + cinfo.comp_info[0].v_samp_factor = 1; + } + else if (aChromaSubsampling == 3) // YUV 4:2:0 + { + cinfo.comp_info[0].h_samp_factor = 2; + cinfo.comp_info[0].v_samp_factor = 2; + } + jpeg_start_compress( &cinfo, sal_True ); for( nY = 0; nY < nHeight; nY++ )
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits