summaryrefslogtreecommitdiff
path: root/avmedia
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-05-28 13:07:38 +0200
committerZolnai Tamás <tamas.zolnai@collabora.com>2014-06-11 19:27:31 +0200
commitd54680911a9a0c1a094a327fa4984fa478da6cdf (patch)
tree15849602d949f02a07c35a01f55888ed6f8521d8 /avmedia
parent4962ea97f1446fa5c9021130c9c938d1a9f7e03f (diff)
libgltf: solve this memory leak problem on a better way 2
Handle those cases when file loading failes. Release *.json file on a different way since it is allocated by libgltf (inside the glTFHandle). (cherry picked from commit fafc1e29c1f060c1a44361a0445300f9786ad6f4) (cherry picked from commit 32f60d78b15b5f2c677e8687720665f6814fef62) Conflicts: avmedia/source/opengl/oglplayer.cxx Change-Id: Idf6c6971a8ac1b342d89dc4f61a62624183e01d0
Diffstat (limited to 'avmedia')
-rw-r--r--avmedia/source/opengl/oglplayer.cxx20
1 files changed, 19 insertions, 1 deletions
diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx
index 8ed8ddb45d86..3a69a8401f94 100644
--- a/avmedia/source/opengl/oglplayer.cxx
+++ b/avmedia/source/opengl/oglplayer.cxx
@@ -31,6 +31,13 @@ OGLPlayer::OGLPlayer()
OGLPlayer::~OGLPlayer()
{
osl::MutexGuard aGuard(m_aMutex);
+ for (size_t i = 0; i < m_pHandle->size; ++i)
+ {
+ if (m_pHandle->files[i].type != GLTF_JSON)
+ {
+ delete [] m_pHandle->files[i].buffer;
+ }
+ }
gltf_renderer_release(m_pHandle);
}
@@ -70,6 +77,8 @@ bool OGLPlayer::create( const OUString& rURL )
m_pHandle = gltf_renderer_init(&aJsonFile);
+ delete [] aJsonFile.buffer;
+
if( !m_pHandle || !m_pHandle->files )
{
SAL_WARN("avmedia.opengl", "gltf_renderer_init returned an invalid glTFHandle");
@@ -89,7 +98,14 @@ bool OGLPlayer::create( const OUString& rURL )
// Load images as bitmaps
GraphicFilter aFilter;
Graphic aGraphic;
- aFilter.ImportGraphic(aGraphic, INetURLObject(sFilesURL));
+ if( aFilter.ImportGraphic(aGraphic, INetURLObject(sFilesURL)) != GRFILTER_OK )
+ {
+ rFile.buffer = 0;
+ rFile.imagewidth = 0;
+ rFile.imageheight = 0;
+ SAL_WARN("avmedia.opengl", "Can't load texture file: " + sFilesURL);
+ return false;
+ }
BitmapEx aBitmapEx = aGraphic.GetBitmapEx();
aBitmapEx.Mirror(BMP_MIRROR_VERT);
rFile.buffer = (char*)OpenGLHelper::ConvertBitmapExToRGBABuffer(aBitmapEx);
@@ -100,6 +116,8 @@ bool OGLPlayer::create( const OUString& rURL )
{
if( !lcl_LoadFile(&rFile, sFilesURL) )
{
+ rFile.buffer = 0;
+ rFile.size = 0;
SAL_WARN("avmedia.opengl", "Can't load glTF file: " + sFilesURL);
return false;
}