Added reset button to exposure settings
[harmattan/cameraplus] / lib / qtcamviewfinderrenderermeego.cpp
index ea2807d..8b3efac 100644 (file)
@@ -92,16 +92,18 @@ QtCamViewfinderRendererMeeGo::~QtCamViewfinderRendererMeeGo() {
   }
 }
 
-void QtCamViewfinderRendererMeeGo::paint(QPainter *painter) {
+bool QtCamViewfinderRendererMeeGo::needsNativePainting() {
+  return true;
+}
+
+void QtCamViewfinderRendererMeeGo::paint(const QMatrix4x4& matrix, const QRectF& viewport) {
   QMutexLocker locker(&m_frameMutex);
   if (m_frame == -1) {
     return;
   }
 
-  painter->beginNativePainting();
-
   if (m_needsInit) {
-    calculateProjectionMatrix(painter->viewport());
+    calculateProjectionMatrix(viewport);
 
     if (!eglCreateSyncKHR && m_conf->viewfinderUseFence()) {
       eglCreateSyncKHR = (_PFNEGLCREATESYNCKHRPROC)eglGetProcAddress("eglCreateSyncKHR");
@@ -120,9 +122,7 @@ void QtCamViewfinderRendererMeeGo::paint(QPainter *painter) {
     createProgram();
   }
 
-  paintFrame(painter, m_frame);
-
-  painter->endNativePainting();
+  paintFrame(matrix, m_frame);
 }
 
 void QtCamViewfinderRendererMeeGo::resize(const QSizeF& size) {
@@ -155,7 +155,7 @@ GstElement *QtCamViewfinderRendererMeeGo::sinkElement() {
   }
 
   if (!m_sink) {
-    m_sink = gst_element_factory_make(m_conf->viewfinderSink().toAscii().data(),
+    m_sink = gst_element_factory_make(m_conf->viewfinderSink().toLatin1().data(),
                                      "QtCamViewfinderRendererMeeGoSink");
     if (!m_sink) {
       qCritical() << "Failed to create" << m_conf->viewfinderSink();
@@ -165,14 +165,18 @@ GstElement *QtCamViewfinderRendererMeeGo::sinkElement() {
     g_object_add_toggle_ref(G_OBJECT(m_sink), (GToggleNotify)sink_notify, this);
   }
 
-  // Displa can be replaced with a null pointer.
-  // We all know that the sink used for Harmattan ignores the x-display property ;-)
-
   Display *d = QX11Info::display();
   g_object_set(G_OBJECT(m_sink), "x-display", d, "use-framebuffer-memory", TRUE, NULL);
 
   m_dpy = eglGetDisplay((EGLNativeDisplayType)d);
+  if (m_dpy == EGL_NO_DISPLAY) {
+    qCritical() << "Failed to obtain EGL Display";
+  }
+
   EGLContext context = eglGetCurrentContext();
+  if (context == EGL_NO_CONTEXT) {
+    qCritical() << "Failed to obtain EGL context";
+  }
 
   g_object_set(G_OBJECT(m_sink), "egl-display", m_dpy, "egl-context", context, NULL);
 
@@ -261,7 +265,7 @@ void QtCamViewfinderRendererMeeGo::createProgram() {
   m_program->release();
 }
 
-void QtCamViewfinderRendererMeeGo::paintFrame(QPainter *painter, int frame) {
+void QtCamViewfinderRendererMeeGo::paintFrame(const QMatrix4x4& matrix, int frame) {
   EGLSyncKHR sync = 0;
 
   if (frame == -1) {
@@ -277,7 +281,7 @@ void QtCamViewfinderRendererMeeGo::paintFrame(QPainter *painter, int frame) {
   m_program->bind();
 
   m_program->setUniformValue("matrix", m_projectionMatrix);
-  m_program->setUniformValue("matrixWorld", QMatrix4x4(painter->combinedTransform()));
+  m_program->setUniformValue("matrixWorld", matrix);
 
   if (!meego_gst_video_texture_bind_frame(sink, GL_TEXTURE_EXTERNAL_OES, frame)) {
     qDebug() << "Failed to bind frame";