2. Qt Dynamic Image Viewer
based on v3dfx-base
• This implementation tests video/image streaming
functionality via SGX GPU, using V3dfxGLScene,
for an Ultrasound image viewer.
– This application draws data into a GraphicsView with
V3dfxGLScene, and updates data in drawBackground()
• This application showcases the capability of
v3dfx-base, with ARGB input, with multiple (128
layers of) blending, all with <10% CPU loading
– With a regular glTexImage2D mode of texturing, this
would take 100% CPU, and lower fps rates
• Every frame shows a different angle of view
5. V3dfx-base Introduction
• Allows applications to integrate video streaming with SGX
without writing platform specific code in a re-usable way
– Support for imgstream AND eglimage through same API
deviceClass = new TISGXStreamIMGSTREAMDevice(); deviceClass = new TISGXStreamEGLIMAGEDevice();
texClass = new TISGXStreamTexIMGSTREAM(); texClass = new TISGXStreamTexEGLIMAGE();
deviceClass->qTexImage2DBuf(paArray); deviceClass->qTexImage2DBuf(paArray);
deviceClass->dqTexImage2DBuf(freeArray); deviceClass->dqTexImage2DBuf(freeArray);
channel 1 channel n channel 1 channel n channel n channel n
device device
device n
n+1 n+2
v3dfx-base
5
6. Is / Is Not
• Handles rapidly changing textures (RGB, YUV)
WHAT IT • Supports imgstream
• Supports eglimage
• Supports both imgstream and eglimage with single API
• Reusable class, delivered as “v3dfx-base.a” (ARM library)
IS • Needs Graphics SDK with eglimage/imgstream support
• Targeted to support multi-threaded operation (WIP)
• Targeted to support cropping (WIP)
WHAT IT • Does not initialise GL state, EGL state for application
• Does not do drawing (glDrawArray, glDrawElement)
• Does not do eglSwapBuffer
IS NOT • Does not provide fancy GLSL shaders
6
7. Underneath the hood – Target
Execution
-Contiguous buffer (preferred), allocated by customer application as texture input
-Customer application does drawing in its native way
-Dynamically update texture buffers using qTexImage2DBuf(), signal_draw() and dqTexImage2DBuf() calls
v3dfx-base.a
Customer application
linked in app, Qt wrapper ..
v3dfx-base (v3dfx-base.a) library archive
GL_IMG_texture_stream2
GL_OES_EGL_image_external
IMGSTREAM EGLIMAGE
User Mode SGX binary
User Mode SGX binary
bufferclass_ti
Kernel driver
SGX HW
7
8. Underneath the hood – raw API
deviceClass = new TISGXStreamIMGSTREAMDevice(); deviceClass = new TISGXStreamEGLIMAGEDevice();
texClass = new TISGXStreamTexIMGSTREAM(); texClass = new TISGXStreamTexEGLIMAGE();
deviceClass->qTexImage2DBuf(paArray); deviceClass->qTexImage2DBuf(paArray);
deviceClass->dqTexImage2DBuf(freeArray); deviceClass->dqTexImage2DBuf(freeArray);
channel 1 channel n channel 1 channel n channel n channel n
device device
device n
n+1 n+2
v3dfx-base
GL_IMG_texture_stream2 GL_OES_EGL_image_external
User Mode SGX binary User Mode SGX binary
bufferclass_ti
Kernel driver
SGX HW
8
13. Source Code organisation
– Base API implementation
• v3dfx-base/api
– Provides both imgstream and eglimage implementation as raw C++ classes
– Reusable Qt classes
• v3dfx-base/platforms/Qt
– (GraphicsItem based) – in progress
• v3dfx-base/platforms/qtQGL
– (QGLWidget based) – completed
– Test applications
• v3dfx-base/test/imgstream
– Raw (full screen, no window manager) test for imgstream based streaming
• v3dfx-base/test/eglimage
– Raw (full screen, no window manager) test for eglimage based streaming
• v3dfx-base/test/platforms/qtQGL
– Qt – QGLWidget based class, test for both imgstream and eglimage
• v3dfx-base/test/platforms/qt
– Qt – QGraphicsItem based class, test for both imgstream and eglimage (WIP)
13