vcl/source/filter/jpeg/JpegReader.cxx |   78 ++--------------------------------
 vcl/source/filter/jpeg/JpegReader.hxx |   14 +-----
 vcl/source/filter/jpeg/jpeg.cxx       |   26 ++---------
 vcl/source/filter/jpeg/jpeg.h         |    2 
 vcl/source/filter/jpeg/jpegc.cxx      |   10 ++--
 5 files changed, 21 insertions(+), 109 deletions(-)

New commits:
commit 315960e7bb7acd3bdd5fe570de06624120e32f18
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Sun Mar 24 20:26:07 2024 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Thu Jun 27 03:03:10 2024 +0200

    vcl: remove partial JPEG image loading
    
    Change-Id: Ibacf2c0eac963cdaf233f2af3f2277bc2b79c590
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165213
    Reviewed-by: Tomaž Vajngerl <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/source/filter/jpeg/JpegReader.cxx 
b/vcl/source/filter/jpeg/JpegReader.cxx
index 186105603904..7e4b3dc25f63 100644
--- a/vcl/source/filter/jpeg/JpegReader.cxx
+++ b/vcl/source/filter/jpeg/JpegReader.cxx
@@ -172,7 +172,6 @@ void jpeg_svstream_src (j_decompress_ptr cinfo, void* input)
 JPEGReader::JPEGReader( SvStream& rStream, GraphicFilterImportFlags 
nImportFlags ) :
     mrStream         ( rStream ),
     mnLastPos        ( rStream.Tell() ),
-    mnLastLines      ( 0 ),
     mbSetLogSize     ( nImportFlags & 
GraphicFilterImportFlags::SetLogsizeForJpeg )
 {
     maUpperName = "SVIJPEG";
@@ -180,7 +179,6 @@ JPEGReader::JPEGReader( SvStream& rStream, 
GraphicFilterImportFlags nImportFlags
     if (!(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap))
     {
         mpBitmap.emplace();
-        mpIncompleteAlpha.emplace();
     }
 }
 
@@ -242,90 +240,26 @@ bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam const 
& rParam)
     return true;
 }
 
-Graphic JPEGReader::CreateIntermediateGraphic(tools::Long nLines)
+ReadState JPEGReader::Read(Graphic& rGraphic, GraphicFilterImportFlags 
nImportFlags, BitmapScopedWriteAccess* ppAccess )
 {
-    Graphic aGraphic;
-    const Size aSizePixel(mpBitmap->GetSizePixel());
-
-    if (!mnLastLines)
-    {
-        mpIncompleteAlpha.emplace(aSizePixel);
-        mpIncompleteAlpha->Erase(255);
-    }
-
-    if (nLines && (nLines < aSizePixel.Height()))
-    {
-        const tools::Long nNewLines = nLines - mnLastLines;
-
-        if (nNewLines > 0)
-        {
-            {
-                BitmapScopedWriteAccess pAccess(*mpIncompleteAlpha);
-                pAccess->SetFillColor(COL_ALPHA_OPAQUE);
-                pAccess->FillRect(tools::Rectangle(Point(0, mnLastLines), 
Size(pAccess->Width(), nNewLines)));
-            }
-
-            aGraphic = BitmapEx(*mpBitmap, *mpIncompleteAlpha);
-        }
-        else
-        {
-            aGraphic = BitmapEx(*mpBitmap);
-        }
-    }
-    else
-    {
-        aGraphic = BitmapEx(*mpBitmap);
-    }
-
-    mnLastLines = nLines;
-
-    return aGraphic;
-}
-
-ReadState JPEGReader::Read( Graphic& rGraphic, GraphicFilterImportFlags 
nImportFlags, BitmapScopedWriteAccess* ppAccess )
-{
-    ReadState   eReadState;
-    bool        bRet = false;
+    bool bRet = false;
 
     // seek back to the original position
     mrStream.Seek( mnLastPos );
 
     // read the (partial) image
-    tools::Long nLines;
-    ReadJPEG( this, &mrStream, &nLines, nImportFlags, ppAccess );
+    ReadJPEG(this, &mrStream, nImportFlags, ppAccess);
 
     auto bUseExistingBitmap = static_cast<bool>(nImportFlags & 
GraphicFilterImportFlags::UseExistingBitmap);
     if (bUseExistingBitmap || !mpBitmap->IsEmpty())
     {
-        if( mrStream.GetError() == ERRCODE_IO_PENDING )
-        {
-            rGraphic = CreateIntermediateGraphic(nLines);
-        }
-        else
-        {
-            if (!bUseExistingBitmap)
-                rGraphic = BitmapEx(*mpBitmap);
-        }
+        if (!bUseExistingBitmap)
+            rGraphic = BitmapEx(*mpBitmap);
 
         bRet = true;
     }
-    else if( mrStream.GetError() == ERRCODE_IO_PENDING )
-    {
-        bRet = true;
-    }
-
-    // Set status ( Pending has priority )
-    if (mrStream.GetError() == ERRCODE_IO_PENDING)
-    {
-        eReadState = JPEGREAD_NEED_MORE;
-        mrStream.ResetError();
-    }
-    else
-    {
-        eReadState = bRet ? JPEGREAD_OK : JPEGREAD_ERROR;
-    }
 
-    return eReadState;
+    return bRet ? JPEGREAD_OK : JPEGREAD_ERROR;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/filter/jpeg/JpegReader.hxx 
b/vcl/source/filter/jpeg/JpegReader.hxx
index 6282cb4ed069..0e541c75916f 100644
--- a/vcl/source/filter/jpeg/JpegReader.hxx
+++ b/vcl/source/filter/jpeg/JpegReader.hxx
@@ -30,8 +30,7 @@ enum class GraphicFilterImportFlags;
 enum ReadState
 {
     JPEGREAD_OK,
-    JPEGREAD_ERROR,
-    JPEGREAD_NEED_MORE
+    JPEGREAD_ERROR
 };
 
 struct JPEGCreateBitmapParam
@@ -47,15 +46,10 @@ struct JPEGCreateBitmapParam
 
 class JPEGReader : public GraphicReader
 {
-    SvStream&           mrStream;
+    SvStream& mrStream;
     std::optional<Bitmap> mpBitmap;
-    std::optional<AlphaMask> mpIncompleteAlpha;
-
-    tools::Long                mnLastPos;
-    tools::Long                mnLastLines;
-    bool                mbSetLogSize;
-
-    Graphic CreateIntermediateGraphic(tools::Long nLines);
+    tools::Long mnLastPos;
+    bool mbSetLogSize;
 
 public:
             JPEGReader( SvStream& rStream, GraphicFilterImportFlags 
nImportFlags );
diff --git a/vcl/source/filter/jpeg/jpeg.cxx b/vcl/source/filter/jpeg/jpeg.cxx
index e7158b858b68..956a1e413def 100644
--- a/vcl/source/filter/jpeg/jpeg.cxx
+++ b/vcl/source/filter/jpeg/jpeg.cxx
@@ -25,29 +25,13 @@
 
 VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, 
GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* ppAccess )
 {
-    bool        bReturn = true;
+    JPEGReader aJPEGReader(rInputStream, nImportFlags);
 
-    std::shared_ptr<GraphicReader> pContext = rGraphic.GetReaderContext();
-    rGraphic.SetReaderContext(nullptr);
-    JPEGReader* pJPEGReader = dynamic_cast<JPEGReader*>( pContext.get() );
-    if (!pJPEGReader)
-    {
-        pContext = std::make_shared<JPEGReader>( rInputStream, nImportFlags );
-        pJPEGReader = static_cast<JPEGReader*>( pContext.get() );
-    }
+    ReadState eReadState = aJPEGReader.Read(rGraphic, nImportFlags, ppAccess);
 
-    ReadState eReadState = pJPEGReader->Read( rGraphic, nImportFlags, ppAccess 
);
-
-    if( eReadState == JPEGREAD_ERROR )
-    {
-        bReturn = false;
-    }
-    else if( eReadState == JPEGREAD_NEED_MORE )
-    {
-        rGraphic.SetReaderContext( pContext );
-    }
-
-    return bReturn;
+    if (eReadState == JPEGREAD_ERROR)
+        return false;
+    return true;
 }
 
 bool ExportJPEG(SvStream& rOutputStream, const Graphic& rGraphic,
diff --git a/vcl/source/filter/jpeg/jpeg.h b/vcl/source/filter/jpeg/jpeg.h
index 0ab27fb2fb9c..495204524121 100644
--- a/vcl/source/filter/jpeg/jpeg.h
+++ b/vcl/source/filter/jpeg/jpeg.h
@@ -45,7 +45,7 @@ bool    WriteJPEG( JPEGWriter* pJPEGWriter, void* 
pOutputStream,
                    tools::Long nQualityPercent, tools::Long aChromaSubsampling,
                    css::uno::Reference<css::task::XStatusIndicator> const & 
status);
 
-void    ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, tools::Long* 
pLines,
+void    ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream,
                   GraphicFilterImportFlags nImportFlags,
                   BitmapScopedWriteAccess* ppAccess );
 
diff --git a/vcl/source/filter/jpeg/jpegc.cxx b/vcl/source/filter/jpeg/jpegc.cxx
index 5b50bd3d394e..bac3079df04c 100644
--- a/vcl/source/filter/jpeg/jpegc.cxx
+++ b/vcl/source/filter/jpeg/jpegc.cxx
@@ -184,7 +184,7 @@ void progress_monitor(j_common_ptr cinfo)
 
 }
 
-static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* 
pInputStream, tools::Long* pLines,
+static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* 
pInputStream,
               GraphicFilterImportFlags nImportFlags,
               BitmapScopedWriteAccess* ppAccess)
 {
@@ -311,9 +311,9 @@ static void ReadJPEG(JpegStuff& rContext, JPEGReader* 
pJPEGReader, void* pInputS
             }
 
             // tdf#138950 allow up to one short read 
(no_data_available_failures <= 1) to not trigger cancelling import
-            for (*pLines = 0; *pLines < nHeight && 
source->no_data_available_failures <= 1; (*pLines)++)
+            for (tools::Long nLine = 0; nLine < nHeight && 
source->no_data_available_failures <= 1; nLine++)
             {
-                size_t yIndex = *pLines;
+                size_t yIndex = nLine;
 
                 sal_uInt8* p = (rContext.cinfo.out_color_space == JCS_CMYK) ? 
rContext.pCYMKBuffer.data() : rContext.pScanLineBuffer.data();
                 jpeg_read_scanlines(&rContext.cinfo, 
reinterpret_cast<JSAMPARRAY>(&p), 1);
@@ -362,12 +362,12 @@ static void ReadJPEG(JpegStuff& rContext, JPEGReader* 
pJPEGReader, void* pInputS
     }
 }
 
-void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, tools::Long* 
pLines,
+void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream,
                GraphicFilterImportFlags nImportFlags,
                BitmapScopedWriteAccess* ppAccess )
 {
     JpegStuff aContext;
-    ReadJPEG(aContext, pJPEGReader, pInputStream, pLines, nImportFlags, 
ppAccess);
+    ReadJPEG(aContext, pJPEGReader, pInputStream, nImportFlags, ppAccess);
 }
 
 bool WriteJPEG( JPEGWriter* pJPEGWriter, void* pOutputStream,

Reply via email to