diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2020-10-09 15:20:43 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2020-10-12 15:09:27 +0200 |
commit | 6036b2486cdc5ba8eac8636b2e087658e3550586 (patch) | |
tree | 0801f1f507629c8319315662ccab33e7fc5f47b1 /vcl/source/gdi/bmpacc.cxx | |
parent | a879daa45f40fd84373a92242e098eaf6a493508 (diff) |
implement fast bitmap variant for CopyScanline()
JPEG reads RGB, but e.g. with Skia the default bitmap format is BGRA.
Change-Id: Iad1a9e99f286b03db0fa683c14d70b8ad48d3d9d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104120
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'vcl/source/gdi/bmpacc.cxx')
-rw-r--r-- | vcl/source/gdi/bmpacc.cxx | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/vcl/source/gdi/bmpacc.cxx b/vcl/source/gdi/bmpacc.cxx index a406951cd7f7..3994f9c1889a 100644 --- a/vcl/source/gdi/bmpacc.cxx +++ b/vcl/source/gdi/bmpacc.cxx @@ -24,6 +24,7 @@ #include <salbmp.hxx> #include <svdata.hxx> #include <salinst.hxx> +#include <bmpfast.hxx> #include <string.h> #include <sal/log.hxx> @@ -344,11 +345,14 @@ void BitmapWriteAccess::CopyScanline( long nY, const BitmapReadAccess& rReadAcc } else { - // TODO: use fastbmp infrastructure - Scanline pScanline = GetScanline( nY ); - Scanline pScanlineRead = rReadAcc.GetScanline(nY); - for( long nX = 0, nWidth = std::min( mpBuffer->mnWidth, rReadAcc.Width() ); nX < nWidth; nX++ ) - SetPixelOnData( pScanline, nX, rReadAcc.GetPixelFromData( pScanlineRead, nX ) ); + long nWidth = std::min( mpBuffer->mnWidth, rReadAcc.Width() ); + if(!ImplFastCopyScanline( nY, *ImplGetBitmapBuffer(), *rReadAcc.ImplGetBitmapBuffer())) + { + Scanline pScanline = GetScanline( nY ); + Scanline pScanlineRead = rReadAcc.GetScanline(nY); + for( long nX = 0; nX < nWidth; nX++ ) + SetPixelOnData( pScanline, nX, rReadAcc.GetPixelFromData( pScanlineRead, nX ) ); + } } } @@ -371,13 +375,13 @@ void BitmapWriteAccess::CopyScanline( long nY, ConstScanline aSrcScanline, memcpy(GetScanline(nY), aSrcScanline, nCount); else { + if(ImplFastCopyScanline( nY, *ImplGetBitmapBuffer(), aSrcScanline, nSrcScanlineFormat, nSrcScanlineSize )) + return; + DBG_ASSERT( nFormat != ScanlineFormat::N8BitTcMask && nFormat != ScanlineFormat::N32BitTcMask, "No support for pixel formats with color masks yet!" ); - - // TODO: use fastbmp infrastructure FncGetPixel pFncGetPixel; - switch( nFormat ) { case ScanlineFormat::N1BitMsbPal: pFncGetPixel = GetPixelForN1BitMsbPal; break; |