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)

Reply via email to