[Libreoffice-commits] core.git: include/vcl vcl/inc vcl/source vcl/workben

Miklos Vajna vmiklos at collabora.co.uk
Mon May 8 17:21:16 UTC 2017


 include/vcl/bitmapex.hxx              |    2 +
 include/vcl/graph.hxx                 |    2 +
 include/vcl/graphicfilter.hxx         |    6 +++-
 vcl/inc/impgraph.hxx                  |    2 +
 vcl/source/filter/graphicfilter.cxx   |   13 ++++++++--
 vcl/source/filter/jpeg/JpegReader.cxx |   44 ++++++++++++++++++++--------------
 vcl/source/filter/jpeg/JpegReader.hxx |   13 ++++++----
 vcl/source/filter/jpeg/jpeg.cxx       |    6 ++--
 vcl/source/filter/jpeg/jpeg.h         |    5 +++
 vcl/source/filter/jpeg/jpeg.hxx       |    3 +-
 vcl/source/filter/jpeg/jpegc.cxx      |   24 ++++++++++++++----
 vcl/source/gdi/bitmapex.cxx           |    5 +++
 vcl/source/gdi/graph.cxx              |    5 +++
 vcl/source/gdi/impgraph.cxx           |    5 +++
 vcl/workben/fftester.cxx              |    2 -
 vcl/workben/jpgfuzzer.cxx             |    2 -
 16 files changed, 101 insertions(+), 38 deletions(-)

New commits:
commit e8a05109d91bb9e82fcec5204514766f4bdbbee8
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon May 8 16:52:00 2017 +0200

    vcl: split jpeg import into two parts
    
    Split the import into two:
    
    1) Just create the bitmap, this part is not thread-safe (e.g.
    OpenGLContext::makeCurrent() is called when OpenGL is enabled).
    
    2) Import the image into an existing bitmap.
    
    The point is that the second part takes much more time than the first,
    and in the future that part may be executed on a thread, while without
    such a split the whole ImportJPEG() can't do that. For now
    GraphicFilter::ImportGraphic() simply invokes the two parts after each
    other, so no real functional changes yet.
    
    Change-Id: Iee742a2cd3c581aeaf1a1ed9f55cd543955a85e0
    Reviewed-on: https://gerrit.libreoffice.org/37397
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/include/vcl/bitmapex.hxx b/include/vcl/bitmapex.hxx
index d7bedddb8606..58395fe7d0e4 100644
--- a/include/vcl/bitmapex.hxx
+++ b/include/vcl/bitmapex.hxx
@@ -71,6 +71,8 @@ public:
     TransparentType     GetTransparentType() const { return eTransparent; }
 
     Bitmap              GetBitmap( const Color* pTransReplaceColor = nullptr ) const;
+    /// Gives direct access to the contained bitmap.
+    const Bitmap&       GetBitmapRef() const;
     Bitmap              GetMask() const;
 
     bool                IsAlpha() const;
diff --git a/include/vcl/graph.hxx b/include/vcl/graph.hxx
index 8509670dca41..8dcf5925f87f 100644
--- a/include/vcl/graph.hxx
+++ b/include/vcl/graph.hxx
@@ -147,6 +147,8 @@ public:
     // before.
     Bitmap          GetBitmap(const GraphicConversionParameters& rParameters = GraphicConversionParameters()) const;
     BitmapEx        GetBitmapEx(const GraphicConversionParameters& rParameters = GraphicConversionParameters()) const;
+    /// Gives direct access to the contained BitmapEx.
+    const BitmapEx& GetBitmapExRef() const;
 
     Animation       GetAnimation() const;
     const GDIMetaFile& GetGDIMetaFile() const;
diff --git a/include/vcl/graphicfilter.hxx b/include/vcl/graphicfilter.hxx
index c0bbb3d62a77..8b8a7cef3008 100644
--- a/include/vcl/graphicfilter.hxx
+++ b/include/vcl/graphicfilter.hxx
@@ -56,10 +56,14 @@ enum class GraphicFilterImportFlags
     DontSetLogsizeForJpeg  = 0x002,
     ForPreview             = 0x004,
     AllowPartialStreamRead = 0x010,
+    /// Only create a bitmap, do not read pixel data.
+    OnlyCreateBitmap       = 0x020,
+    /// Read pixel data into an existing bitmap.
+    UseExistingBitmap      = 0x040,
 };
 namespace o3tl
 {
-    template<> struct typed_flags<GraphicFilterImportFlags> : is_typed_flags<GraphicFilterImportFlags, 0x0017> {};
+    template<> struct typed_flags<GraphicFilterImportFlags> : is_typed_flags<GraphicFilterImportFlags, 0x0077> {};
 }
 
 #define IMP_BMP                 "SVBMP"
diff --git a/vcl/inc/impgraph.hxx b/vcl/inc/impgraph.hxx
index 574a907346b5..6260a62e874e 100644
--- a/vcl/inc/impgraph.hxx
+++ b/vcl/inc/impgraph.hxx
@@ -85,6 +85,8 @@ private:
 
     Bitmap              ImplGetBitmap(const GraphicConversionParameters& rParameters) const;
     BitmapEx            ImplGetBitmapEx(const GraphicConversionParameters& rParameters) const;
+    /// Gives direct access to the contained BitmapEx.
+    const BitmapEx&     ImplGetBitmapExRef() const;
     Animation           ImplGetAnimation() const;
     const GDIMetaFile&  ImplGetGDIMetaFile() const;
 
diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx
index 274126dd920a..1638ae023eb9 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -1493,10 +1493,19 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat
             if( !( nImportFlags & GraphicFilterImportFlags::DontSetLogsizeForJpeg ) )
                 nImportFlags |= GraphicFilterImportFlags::SetLogsizeForJpeg;
 
-            if( !ImportJPEG( rIStream, rGraphic, nImportFlags ) )
+            sal_uInt64 nPosition = rIStream.Tell();
+            if( !ImportJPEG( rIStream, rGraphic, nImportFlags | GraphicFilterImportFlags::OnlyCreateBitmap, nullptr ) )
                 nStatus = GRFILTER_FILTERERROR;
             else
-                eLinkType = GfxLinkType::NativeJpg;
+            {
+                Bitmap& rBitmap = const_cast<Bitmap&>(rGraphic.GetBitmapExRef().GetBitmapRef());
+                Bitmap::ScopedWriteAccess pWriteAccess(rBitmap);
+                rIStream.Seek(nPosition);
+                if( !ImportJPEG( rIStream, rGraphic, nImportFlags | GraphicFilterImportFlags::UseExistingBitmap, &pWriteAccess ) )
+                    nStatus = GRFILTER_FILTERERROR;
+                else
+                    eLinkType = GfxLinkType::NativeJpg;
+            }
         }
         else if( aFilterName.equalsIgnoreAsciiCase( IMP_SVG ) )
         {
diff --git a/vcl/source/filter/jpeg/JpegReader.cxx b/vcl/source/filter/jpeg/JpegReader.cxx
index b7136d6442c2..014cdfd5d772 100644
--- a/vcl/source/filter/jpeg/JpegReader.cxx
+++ b/vcl/source/filter/jpeg/JpegReader.cxx
@@ -161,13 +161,19 @@ void jpeg_svstream_src (j_decompress_ptr cinfo, void* input)
     source->pub.next_input_byte = nullptr; /* until buffer loaded */
 }
 
-JPEGReader::JPEGReader( SvStream& rStream, bool bSetLogSize ) :
+JPEGReader::JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags ) :
     mrStream         ( rStream ),
     mnLastPos        ( rStream.Tell() ),
     mnLastLines      ( 0 ),
-    mbSetLogSize     ( bSetLogSize )
+    mbSetLogSize     ( nImportFlags & GraphicFilterImportFlags::SetLogsizeForJpeg )
 {
     maUpperName = "SVIJPEG";
+
+    if (!(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap))
+    {
+        mpBitmap.reset(new Bitmap());
+        mpIncompleteAlpha.reset(new Bitmap());
+    }
 }
 
 JPEGReader::~JPEGReader()
@@ -185,7 +191,7 @@ bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam& rParam)
     Size aSize(rParam.nWidth, rParam.nHeight);
     bool bGray = rParam.bGray;
 
-    maBitmap = Bitmap();
+    mpBitmap.reset(new Bitmap());
 
     sal_uInt64 nSize = aSize.Width() * aSize.Height();
 
@@ -202,11 +208,11 @@ bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam& rParam)
             aGrayPal[ n ] = BitmapColor( cGray, cGray, cGray );
         }
 
-        maBitmap = Bitmap(aSize, 8, &aGrayPal);
+        mpBitmap.reset(new Bitmap(aSize, 8, &aGrayPal));
     }
     else
     {
-        maBitmap = Bitmap(aSize, 24);
+        mpBitmap.reset(new Bitmap(aSize, 24));
     }
 
     if (mbSetLogSize)
@@ -221,8 +227,8 @@ bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam& rParam)
             MapMode     aMapMode( nUnit == 1 ? MapUnit::MapInch : MapUnit::MapCM, aEmptyPoint, aFractX, aFractY );
             Size        aPrefSize = OutputDevice::LogicToLogic( aSize, aMapMode, MapUnit::Map100thMM );
 
-            maBitmap.SetPrefSize(aPrefSize);
-            maBitmap.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
+            mpBitmap->SetPrefSize(aPrefSize);
+            mpBitmap->SetPrefMapMode(MapMode(MapUnit::Map100thMM));
         }
     }
 
@@ -232,12 +238,12 @@ bool JPEGReader::CreateBitmap(JPEGCreateBitmapParam& rParam)
 Graphic JPEGReader::CreateIntermediateGraphic(long nLines)
 {
     Graphic aGraphic;
-    const Size aSizePixel(maBitmap.GetSizePixel());
+    const Size aSizePixel(mpBitmap->GetSizePixel());
 
     if (!mnLastLines)
     {
-        maIncompleteAlpha = Bitmap(aSizePixel, 1);
-        maIncompleteAlpha.Erase(Color(COL_WHITE));
+        mpIncompleteAlpha.reset(new Bitmap(aSizePixel, 1));
+        mpIncompleteAlpha->Erase(Color(COL_WHITE));
     }
 
     if (nLines && (nLines < aSizePixel.Height()))
@@ -247,21 +253,21 @@ Graphic JPEGReader::CreateIntermediateGraphic(long nLines)
         if (nNewLines > 0)
         {
             {
-                Bitmap::ScopedWriteAccess pAccess(maIncompleteAlpha);
+                Bitmap::ScopedWriteAccess pAccess(*mpIncompleteAlpha);
                 pAccess->SetFillColor(Color(COL_BLACK));
                 pAccess->FillRect(tools::Rectangle(Point(0, mnLastLines), Size(pAccess->Width(), nNewLines)));
             }
 
-            aGraphic = BitmapEx(maBitmap, maIncompleteAlpha);
+            aGraphic = BitmapEx(*mpBitmap, *mpIncompleteAlpha);
         }
         else
         {
-            aGraphic = maBitmap;
+            aGraphic = *mpBitmap;
         }
     }
     else
     {
-        aGraphic = maBitmap;
+        aGraphic = *mpBitmap;
     }
 
     mnLastLines = nLines;
@@ -269,7 +275,7 @@ Graphic JPEGReader::CreateIntermediateGraphic(long nLines)
     return aGraphic;
 }
 
-ReadState JPEGReader::Read( Graphic& rGraphic )
+ReadState JPEGReader::Read( Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, Bitmap::ScopedWriteAccess* ppAccess )
 {
     ReadState   eReadState;
     bool        bRet = false;
@@ -279,9 +285,10 @@ ReadState JPEGReader::Read( Graphic& rGraphic )
 
     // read the (partial) image
     long nLines;
-    ReadJPEG( this, &mrStream, &nLines, GetPreviewSize() );
+    ReadJPEG( this, &mrStream, &nLines, GetPreviewSize(), nImportFlags, ppAccess );
 
-    if (!maBitmap.IsEmpty())
+    auto bUseExistingBitmap = static_cast<bool>(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap);
+    if (bUseExistingBitmap || !mpBitmap->IsEmpty())
     {
         if( mrStream.GetError() == ERRCODE_IO_PENDING )
         {
@@ -289,7 +296,8 @@ ReadState JPEGReader::Read( Graphic& rGraphic )
         }
         else
         {
-            rGraphic = maBitmap;
+            if (!bUseExistingBitmap)
+                rGraphic = *mpBitmap;
         }
 
         bRet = true;
diff --git a/vcl/source/filter/jpeg/JpegReader.hxx b/vcl/source/filter/jpeg/JpegReader.hxx
index 58ba82cf342d..6c4f1dc3803b 100644
--- a/vcl/source/filter/jpeg/JpegReader.hxx
+++ b/vcl/source/filter/jpeg/JpegReader.hxx
@@ -21,10 +21,13 @@
 #define INCLUDED_VCL_SOURCE_FILTER_JPEG_JPEGREADER_HXX
 
 #include <vcl/graph.hxx>
+#include <vcl/bitmap.hxx>
 #include <vcl/fltcall.hxx>
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <com/sun/star/task/XStatusIndicator.hpp>
 
+enum class GraphicFilterImportFlags;
+
 enum ReadState
 {
     JPEGREAD_OK,
@@ -46,8 +49,8 @@ struct JPEGCreateBitmapParam
 class JPEGReader : public GraphicReader
 {
     SvStream&           mrStream;
-    Bitmap              maBitmap;
-    Bitmap              maIncompleteAlpha;
+    std::unique_ptr<Bitmap> mpBitmap;
+    std::unique_ptr<Bitmap> mpIncompleteAlpha;
 
     long                mnLastPos;
     long                mnLastLines;
@@ -56,14 +59,14 @@ class JPEGReader : public GraphicReader
     Graphic CreateIntermediateGraphic(long nLines);
 
 public:
-            JPEGReader( SvStream& rStream, bool bSetLogSize );
+            JPEGReader( SvStream& rStream, GraphicFilterImportFlags nImportFlags );
     virtual ~JPEGReader() override;
 
-    ReadState Read(Graphic& rGraphic);
+    ReadState Read(Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, Bitmap::ScopedWriteAccess* ppAccess);
 
     bool CreateBitmap(JPEGCreateBitmapParam& param);
 
-    Bitmap& GetBitmap() { return maBitmap; }
+    Bitmap& GetBitmap() { return *mpBitmap; }
 };
 
 #endif // INCLUDED_VCL_SOURCE_FILTER_JPEG_JPEGREADER_HXX
diff --git a/vcl/source/filter/jpeg/jpeg.cxx b/vcl/source/filter/jpeg/jpeg.cxx
index f1cb2eb2ed65..5b067153dc30 100644
--- a/vcl/source/filter/jpeg/jpeg.cxx
+++ b/vcl/source/filter/jpeg/jpeg.cxx
@@ -25,7 +25,7 @@
 #include <vcl/FilterConfigItem.hxx>
 #include <vcl/graphicfilter.hxx>
 
-VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, GraphicFilterImportFlags nImportFlags )
+VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, Bitmap::ScopedWriteAccess* ppAccess )
 {
     bool        bReturn = true;
 
@@ -34,7 +34,7 @@ VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, Graphi
     JPEGReader* pJPEGReader = dynamic_cast<JPEGReader*>( pContext.get() );
     if (!pJPEGReader)
     {
-        pContext = std::make_shared<JPEGReader>( rInputStream, bool( nImportFlags & GraphicFilterImportFlags::SetLogsizeForJpeg ) );
+        pContext = std::make_shared<JPEGReader>( rInputStream, nImportFlags );
         pJPEGReader = static_cast<JPEGReader*>( pContext.get() );
     }
 
@@ -47,7 +47,7 @@ VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, Graphi
         pJPEGReader->DisablePreviewMode();
     }
 
-    ReadState eReadState = pJPEGReader->Read( rGraphic );
+    ReadState eReadState = pJPEGReader->Read( rGraphic, nImportFlags, ppAccess );
 
     if( eReadState == JPEGREAD_ERROR )
     {
diff --git a/vcl/source/filter/jpeg/jpeg.h b/vcl/source/filter/jpeg/jpeg.h
index bb6c73fc5834..9e9a23c549c0 100644
--- a/vcl/source/filter/jpeg/jpeg.h
+++ b/vcl/source/filter/jpeg/jpeg.h
@@ -25,6 +25,7 @@
 #include <com/sun/star/uno/Reference.hxx>
 #include <sal/types.h>
 #include <basegfx/vector/b2dsize.hxx>
+#include <vcl/bitmap.hxx>
 
 #include <jpeglib.h>
 
@@ -35,6 +36,7 @@ class JPEGReader;
 class JPEGWriter;
 class Size;
 class SvStream;
+enum class GraphicFilterImportFlags;
 
 void jpeg_svstream_src (j_decompress_ptr cinfo, void* infile);
 
@@ -46,7 +48,8 @@ bool    WriteJPEG( JPEGWriter* pJPEGWriter, void* pOutputStream,
                    css::uno::Reference<css::task::XStatusIndicator> const & status);
 
 void    ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, long* pLines,
-                  Size const & previewSize );
+                  Size const & previewSize, GraphicFilterImportFlags nImportFlags,
+                  Bitmap::ScopedWriteAccess* ppAccess );
 
 void    Transform(void* pInputStream, void* pOutputStream, long nAngle);
 
diff --git a/vcl/source/filter/jpeg/jpeg.hxx b/vcl/source/filter/jpeg/jpeg.hxx
index f8f900ace03d..776e7d60042f 100644
--- a/vcl/source/filter/jpeg/jpeg.hxx
+++ b/vcl/source/filter/jpeg/jpeg.hxx
@@ -23,11 +23,12 @@
 #include <vcl/graph.hxx>
 #include <vcl/graphicfilter.hxx>
 #include <vcl/fltcall.hxx>
+#include <vcl/bitmap.hxx>
 #include <com/sun/star/uno/Sequence.h>
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <com/sun/star/task/XStatusIndicator.hpp>
 
-VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, GraphicFilterImportFlags nImportFlags );
+VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, GraphicFilterImportFlags nImportFlags, Bitmap::ScopedWriteAccess* ppAccess );
 
 bool ExportJPEG(SvStream& rOutputStream,
                     const Graphic& rGraphic,
diff --git a/vcl/source/filter/jpeg/jpegc.cxx b/vcl/source/filter/jpeg/jpegc.cxx
index 2e836ade2b8b..694c0c2cd7ab 100644
--- a/vcl/source/filter/jpeg/jpegc.cxx
+++ b/vcl/source/filter/jpeg/jpegc.cxx
@@ -36,6 +36,7 @@ extern "C" {
 #include <JpegWriter.hxx>
 #include <memory>
 #include <vcl/bitmapaccess.hxx>
+#include <vcl/graphicfilter.hxx>
 
 extern "C" void errorExit (j_common_ptr cinfo)
 {
@@ -81,7 +82,8 @@ private:
 };
 
 void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, long* pLines,
-               Size const & previewSize )
+               Size const & previewSize, GraphicFilterImportFlags nImportFlags,
+               Bitmap::ScopedWriteAccess* ppAccess )
 {
     try
     {
@@ -159,11 +161,23 @@ void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, long* pLines,
         aCreateBitmapParam.Y_density = cinfo.Y_density;
         aCreateBitmapParam.bGray = bGray;
 
-        bool bBitmapCreated = pJPEGReader->CreateBitmap(aCreateBitmapParam);
+        const auto bOnlyCreateBitmap = static_cast<bool>(nImportFlags & GraphicFilterImportFlags::OnlyCreateBitmap);
+        const auto bUseExistingBitmap = static_cast<bool>(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap);
+        bool bBitmapCreated = bUseExistingBitmap;
+        if (!bBitmapCreated)
+            bBitmapCreated = pJPEGReader->CreateBitmap(aCreateBitmapParam);
 
-        if (bBitmapCreated)
+        if (bBitmapCreated && !bOnlyCreateBitmap)
         {
-            Bitmap::ScopedWriteAccess pAccess(pJPEGReader->GetBitmap());
+            std::unique_ptr<Bitmap::ScopedWriteAccess> pScopedAccess;
+
+            if (nImportFlags & GraphicFilterImportFlags::UseExistingBitmap)
+                // ppAccess must be set if this flag is used.
+                assert(ppAccess);
+            else
+                pScopedAccess.reset(new Bitmap::ScopedWriteAccess(pJPEGReader->GetBitmap()));
+
+            Bitmap::ScopedWriteAccess& pAccess = bUseExistingBitmap ? *ppAccess : *pScopedAccess.get();
 
             if (pAccess)
             {
@@ -251,7 +265,7 @@ void ReadJPEG( JPEGReader* pJPEGReader, void* pInputStream, long* pLines,
             }
         }
 
-        if (bBitmapCreated)
+        if (bBitmapCreated && !bOnlyCreateBitmap)
         {
             jpeg_finish_decompress( &cinfo );
         }
diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx
index edcaebddc807..a2034944ae88 100644
--- a/vcl/source/gdi/bitmapex.cxx
+++ b/vcl/source/gdi/bitmapex.cxx
@@ -235,6 +235,11 @@ bool BitmapEx::IsAlpha() const
     return( IsTransparent() && bAlpha );
 }
 
+const Bitmap& BitmapEx::GetBitmapRef() const
+{
+    return aBitmap;
+}
+
 Bitmap BitmapEx::GetBitmap( const Color* pTransReplaceColor ) const
 {
     Bitmap aRetBmp( aBitmap );
diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx
index 54bcc706f987..d863a2413506 100644
--- a/vcl/source/gdi/graph.cxx
+++ b/vcl/source/gdi/graph.cxx
@@ -352,6 +352,11 @@ const GDIMetaFile& Graphic::GetGDIMetaFile() const
     return mxImpGraphic->ImplGetGDIMetaFile();
 }
 
+const BitmapEx& Graphic::GetBitmapExRef() const
+{
+    return mxImpGraphic->ImplGetBitmapExRef();
+}
+
 uno::Reference< graphic::XGraphic > Graphic::GetXGraphic() const
 {
     uno::Reference< graphic::XGraphic > xRet;
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index acebb4d5521a..dd88c7047221 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -584,6 +584,11 @@ Animation ImpGraphic::ImplGetAnimation() const
     return aAnimation;
 }
 
+const BitmapEx& ImpGraphic::ImplGetBitmapExRef() const
+{
+    return maEx;
+}
+
 const GDIMetaFile& ImpGraphic::ImplGetGDIMetaFile() const
 {
     if (GraphicType::Bitmap == meType && !maMetaFile.GetActionSize())
diff --git a/vcl/workben/fftester.cxx b/vcl/workben/fftester.cxx
index 33b25847a0c1..0251274b0ee9 100644
--- a/vcl/workben/fftester.cxx
+++ b/vcl/workben/fftester.cxx
@@ -120,7 +120,7 @@ try_again:
             {
                 Graphic aGraphic;
                 SvFileStream aFileStream(out, StreamMode::READ);
-                ret = (int) ImportJPEG(aFileStream, aGraphic, GraphicFilterImportFlags::NONE);
+                ret = (int) ImportJPEG(aFileStream, aGraphic, GraphicFilterImportFlags::NONE, nullptr);
             }
             else if (strcmp(argv[2], "gif") == 0)
             {
diff --git a/vcl/workben/jpgfuzzer.cxx b/vcl/workben/jpgfuzzer.cxx
index c5fddc150043..5fa270b69e7e 100644
--- a/vcl/workben/jpgfuzzer.cxx
+++ b/vcl/workben/jpgfuzzer.cxx
@@ -21,7 +21,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
 {
     SvMemoryStream aStream(const_cast<uint8_t*>(data), size, StreamMode::READ);
     Graphic aGraphic;
-    (void)ImportJPEG(aStream, aGraphic, GraphicFilterImportFlags::NONE);
+    (void)ImportJPEG(aStream, aGraphic, GraphicFilterImportFlags::NONE, nullptr);
     return 0;
 }
 


More information about the Libreoffice-commits mailing list