[Libreoffice-commits] core.git: avmedia/Library_avmediaogl.mk avmedia/source RepositoryExternal.mk

Zolnai Tamás tamas.zolnai at collabora.com
Sun Apr 20 01:30:13 PDT 2014


 RepositoryExternal.mk               |    2 +
 avmedia/Library_avmediaogl.mk       |   36 ++++++++++++++++++++
 avmedia/source/opengl/oglplayer.cxx |   62 ++++++++++++++++++++++++++++++++++++
 avmedia/source/opengl/oglplayer.hxx |    2 +
 4 files changed, 101 insertions(+), 1 deletion(-)

New commits:
commit c1baaddd8feac01fb2da48c140d4a96c201d7213
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Sun Apr 20 10:27:13 2014 +0200

    avmediaogl: load all needed files into buffers for gltf rendering
    
    Change-Id: I00fe209f3b0061dd67240eb1a490fb62530ffb55

diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index f11407e..e0a7fef 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -3090,9 +3090,11 @@ endif # DESKTOP
 
 ifeq ($(ENABLE_GLTF),TRUE)
 
+# !! We need to avoid setting src as include (changes needed in libgltf)
 define gb_LinkTarget__use_libgltf
 $(call gb_LinkTarget_set_include,$(1),\
     -I$(call gb_UnpackedTarball_get_dir,libgltf)/inc \
+    -I$(call gb_UnpackedTarball_get_dir,libgltf)/src \
     $$(INCLUDE) \
 )
 
diff --git a/avmedia/Library_avmediaogl.mk b/avmedia/Library_avmediaogl.mk
index 34677b5..ca1497d 100644
--- a/avmedia/Library_avmediaogl.mk
+++ b/avmedia/Library_avmediaogl.mk
@@ -13,7 +13,17 @@ $(eval $(call gb_Library_set_componentfile,avmediaogl,avmedia/source/opengl/avme
 
 $(eval $(call gb_Library_use_sdk_api,avmediaogl))
 
-$(eval $(call gb_Library_use_external,avmediaogl,boost_headers))
+# Avoid warnings until libgltf's interface is minimized
+$(eval $(call gb_Library_add_cxxflags,avmediaogl,-w))
+
+$(eval $(call gb_Library_use_externals,avmediaogl, \
+    boost_headers \
+    libgltf \
+    mesa_headers \
+    glew \
+    zlib \
+    freetype \
+))
 
 $(eval $(call gb_Library_use_libraries,avmediaogl,\
     comphelper \
@@ -23,9 +33,14 @@ $(eval $(call gb_Library_use_libraries,avmediaogl,\
     salhelper \
     tl \
     vcl \
+    vclopengl \
     $(gb_UWINAPI) \
 ))
 
+$(eval $(call gb_Library_set_include,avmediaogl,\
+	$$(INCLUDE) \
+))
+
 $(eval $(call gb_Library_add_exception_objects,avmediaogl,\
     avmedia/source/opengl/oglframegrabber \
     avmedia/source/opengl/oglmanager \
@@ -34,4 +49,23 @@ $(eval $(call gb_Library_add_exception_objects,avmediaogl,\
     avmedia/source/opengl/oglwindow \
 ))
 
+ifeq ($(strip $(OS)),WNT)
+$(eval $(call gb_Library_use_system_win32_libs,avmediaogl,\
+    opengl32 \
+    gdi32 \
+    glu32 \
+))
+else ifeq ($(OS),MACOSX)
+$(eval $(call gb_Library_use_system_darwin_frameworks,avmediaogl,\
+	OpenGL \
+))
+else ifeq ($(OS),LINUX)
+$(eval $(call gb_Library_add_libs,avmediaogl,\
+    -ldl \
+    -lGL \
+    -lGLU \
+    -lX11 \
+))
+endif
+
 # vim: set noet sw=4 ts=4:
diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx
index a595735..d0ffde3 100644
--- a/avmedia/source/opengl/oglplayer.cxx
+++ b/avmedia/source/opengl/oglplayer.cxx
@@ -12,6 +12,11 @@
 #include "oglwindow.hxx"
 
 #include <cppuhelper/supportsservice.hxx>
+#include <tools/stream.hxx>
+#include <vcl/graph.hxx>
+#include <vcl/graphicfilter.hxx>
+#include <tools/urlobj.hxx>
+#include <vcl/opengl/OpenGLHelper.hxx>
 
 using namespace com::sun::star;
 
@@ -26,9 +31,66 @@ OGLPlayer::~OGLPlayer()
 {
 }
 
+static bool lcl_LoadFile( glTFFile* io_pFile, const OUString& rURL)
+{
+    SvFileStream aStream( rURL, STREAM_READ );
+    if( !aStream.IsOpen() )
+        return false;
+
+    const sal_Int64 nBytes = aStream.remainingSize();
+    char* pBuffer = new char[nBytes];
+    aStream.Read( pBuffer, nBytes );
+    aStream.Close();
+
+    io_pFile->buffer = pBuffer;
+    io_pFile->size = nBytes;
+
+    return true;
+}
+
 bool OGLPlayer::create( const OUString& rURL )
 {
     m_sURL = rURL;
+
+    // Load *.json file and init renderer
+    glTFFile aJsonFile;
+    aJsonFile.type = GLTF_JSON;
+    OString sFileName = OUStringToOString(m_sURL.copy(m_sURL.lastIndexOf("/")+1),RTL_TEXTENCODING_UTF8);
+    aJsonFile.filename = (char*)sFileName.getStr();
+    if( !lcl_LoadFile(&aJsonFile, m_sURL) )
+        return false;
+
+    m_pHandle = gltf_renderer_init(&aJsonFile);
+
+    if( !m_pHandle || !m_pHandle->files )
+        return false;
+
+    // Load external resources
+    for( size_t i = 0; i < m_pHandle->size; ++i )
+    {
+        glTFFile* pFile = m_pHandle->files[i];
+        if( pFile && pFile->filename )
+        {
+            const OUString sFilesURL = m_sURL.copy(0,m_sURL.lastIndexOf("/")+1) +
+                OStringToOUString(OString(pFile->filename),RTL_TEXTENCODING_UTF8);
+            if( pFile->type == GLTF_IMAGE )
+            {
+                // Load images as bitmaps
+                GraphicFilter aFilter;
+                Graphic aGraphic;
+                aFilter.ImportGraphic(aGraphic, INetURLObject(sFilesURL));
+                const BitmapEx aBitmapEx = aGraphic.GetBitmapEx();
+                pFile->buffer = (char*)OpenGLHelper::ConvertBitmapExToRGBABuffer(aBitmapEx);
+                pFile->imagewidth = aBitmapEx.GetSizePixel().Width();
+                pFile->imageheight = aBitmapEx.GetSizePixel().Height();
+            }
+            else if( pFile->type == GLTF_BINARY || pFile->type == GLTF_GLSL )
+            {
+                if( !lcl_LoadFile(pFile, sFilesURL) )
+                    return false;
+            }
+        }
+    }
     return true;
 }
 
diff --git a/avmedia/source/opengl/oglplayer.hxx b/avmedia/source/opengl/oglplayer.hxx
index 50a9190..cf8ac2c 100644
--- a/avmedia/source/opengl/oglplayer.hxx
+++ b/avmedia/source/opengl/oglplayer.hxx
@@ -14,6 +14,7 @@
 #include <cppuhelper/basemutex.hxx>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/media/XPlayer.hpp>
+#include <libgltf.h>
 
 namespace avmedia { namespace ogl {
 
@@ -54,6 +55,7 @@ public:
 
 private:
     OUString m_sURL;
+    glTFHandle* m_pHandle;
 };
 
 } // namespace ogl


More information about the Libreoffice-commits mailing list