vcl/source/filter/graphicfilter.cxx | 43 +++++++----------------------------- 1 file changed, 9 insertions(+), 34 deletions(-)
New commits: commit da2a69f3ec931613b0a079a0518fc351401be89c Author: Mike Kaganski <[email protected]> AuthorDate: Wed Oct 1 14:04:48 2025 +0200 Commit: Mike Kaganski <[email protected]> CommitDate: Wed Oct 1 15:29:38 2025 +0200 Simplify GraphicFilter::readJPEG No need to call ImportJPEG twice, only to create the bitmap first time: the function does everything internally. Splitting ImportJPEG into two calls was implemented in commit e8a05109d91bb9e82fcec5204514766f4bdbbee8 (vcl: split jpeg import into two parts, 2017-05-08), with the goal to parallelize expensive reading of pixel data. The parallel processing itself was implemented in commit 0d860007d692f9fb15b5699b49c314eb72eae79b (vcl: parallelize JPEG import from ImportGraphics(), 2017-05-24). This seems unrelated to readJPEG. aImportOutput.moBitmap can't be empty after successful return from it (and the previous code dereferenced it unconditionally before checking). Change-Id: Ifa721822d33963c4b77f7b370e1739cfaa7efcbe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191727 Tested-by: Jenkins Reviewed-by: Mike Kaganski <[email protected]> diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 49b385628de6..de177cb56854 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -941,8 +941,6 @@ ErrCode GraphicFilter::readPNG(SvStream & rStream, Graphic& rGraphic, GfxLinkTyp ErrCode GraphicFilter::readJPEG(SvStream & rStream, Graphic & rGraphic, GfxLinkType & rLinkType, GraphicFilterImportFlags nImportFlags) { - ErrCode aReturnCode = ERRCODE_NONE; - // set LOGSIZE flag always, if not explicitly disabled // (see #90508 and #106763) if (!(nImportFlags & GraphicFilterImportFlags::DontSetLogsizeForJpeg)) @@ -950,48 +948,25 @@ ErrCode GraphicFilter::readJPEG(SvStream & rStream, Graphic & rGraphic, GfxLinkT nImportFlags |= GraphicFilterImportFlags::SetLogsizeForJpeg; } - sal_uInt64 nPosition = rStream.Tell(); ImportOutput aImportOutput; - if (!ImportJPEG(rStream, aImportOutput, nImportFlags | GraphicFilterImportFlags::OnlyCreateBitmap, nullptr)) - { - aReturnCode = ERRCODE_GRFILTER_FILTERERROR; - } - else + if (!ImportJPEG(rStream, aImportOutput, nImportFlags, nullptr)) { - Bitmap& rBitmap = *aImportOutput.moBitmap; - BitmapScopedWriteAccess pWriteAccess(rBitmap); - rStream.Seek(nPosition); - if (!ImportJPEG(rStream, aImportOutput, nImportFlags | GraphicFilterImportFlags::UseExistingBitmap, &pWriteAccess)) - { - aReturnCode = ERRCODE_GRFILTER_FILTERERROR; - } - else - { - if (aImportOutput.moBitmap) - { - rGraphic = Graphic(*aImportOutput.moBitmap); - rLinkType = GfxLinkType::NativeJpg; - } - else - { - aReturnCode = ERRCODE_GRFILTER_FILTERERROR; - } - } + return ERRCODE_GRFILTER_FILTERERROR; } + rGraphic = Graphic(*aImportOutput.moBitmap); + rLinkType = GfxLinkType::NativeJpg; + // Get Orientation from EXIF data - GraphicNativeMetadata aMetadata; - if (aMetadata.read(rStream)) + if (GraphicNativeMetadata aMetadata; aMetadata.read(rStream)) { - Degree10 aRotation = aMetadata.getRotation(); - if (aRotation) + if (Degree10 aRotation = aMetadata.getRotation()) { - GraphicNativeTransform aTransform(rGraphic); - aTransform.rotate(aRotation); + GraphicNativeTransform(rGraphic).rotate(aRotation); } } - return aReturnCode; + return ERRCODE_NONE; } ErrCode GraphicFilter::readSVG(SvStream & rStream, Graphic & rGraphic, GfxLinkType & rLinkType, BinaryDataContainer& rpGraphicContent)
