Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QCamera is not working in N950?
Forum Updated to NodeBB v4.3 + New Features

QCamera is not working in N950?

Scheduled Pinned Locked Moved Mobile and Embedded
10 Posts 6 Posters 4.9k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mismail
    wrote on last edited by
    #1

    Hi guys,

    I am trying to use QCamera on N950 and capture frames using QVideoSurface, but without any results.
    the screen appears black and i got this on the applicationoutput screen
    @Using the meego graphics system
    "org.freedesktop.DBus.Error.AccessDenied" "Rejected send message, 3 matched rules; type="method_call", sender=":1.432" (uid=29999 pid=7842 comm="/opt/CameraSample/bin/CameraSample ") interface="com.nokia.mce.request" member="req_tklock_mode_change" error name="(unset)" requested_reply=0 destination="com.nokia.mce" (uid=0 pid=529 comm="/sbin/mce --force-syslog "))"

    virtual GstElement* QGstreamerGLTextureRenderer::videoSink() : Fallback to QVideoSurfaceGstSink since EGLImageTextureHandle is not supported
    ResourceSet::executeNextRequest().
    ResourceSet::executeNextRequest()...the completed request is not present.
    CameraBin error: "Could not negotiate format"
    "org.freedesktop.DBus.Error.AccessDenied" "Rejected send message, 3 matched rules; type="method_call", sender=":1.432" (uid=29999 pid=7842 comm="/opt/CameraSample/bin/CameraSample ") interface="com.nokia.mce.request" member="req_tklock_mode_change" error name="(unset)" requested_reply=0 destination="com.nokia.mce" (uid=0 pid=529 comm="/sbin/mce --force-syslog "))" @

    you can find the complete project "here":http://dl.dropbox.com/u/10705622/CameraSample.zip

    1 Reply Last reply
    0
    • Q Offline
      Q Offline
      qtrahul
      wrote on last edited by
      #2

      which Qt SDK , are you using ?

      It should support Qt Mobility 1.2, in Qt SDK 1.1.3.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mismail
        wrote on last edited by
        #3

        I am using Qt SDK 1.1.3

        1 Reply Last reply
        0
        • C Offline
          C Offline
          chriadam
          wrote on last edited by
          #4

          Have you seen http://developer.qt.nokia.com/forums/viewthread/8375/ yet? It may contain some useful information for your problem.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mismail
            wrote on last edited by
            #5

            Hi chriadam,

            I tried to set the format to

            @QVideoFrame::Format_UYVY@

            but i always get the following error

            Failed to start video surface
            CameraBin error: "Internal data flow error."

            here are my code
            @#include "videosurface.h"
            #include <QPainter>

            #define DEBUG_INFO

            VideoSurface::VideoSurface(QWidget* widget, VideoIF* target, QObject* parent)
            : QAbstractVideoSurface(parent)
            {
            m_targetWidget = widget;
            m_target = target;
            m_imageFormat = QImage::Format_Invalid;
            orientationSensor=new QOrientationSensor();
            m_orientation = ORIENTATION_LANDSCAPE;
            orientationSensor->start();
            }

            VideoSurface::~VideoSurface()
            {
            orientationSensor->stop();

            delete orientationSensor;
            

            }

            bool VideoSurface::start(const QVideoSurfaceFormat &format)
            {
            m_videoFormat = format;
            const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
            const QSize size = format.frameSize();

            if (imageFormat != QImage::Format_Invalid && !size.isEmpty()) {
                m_imageFormat = imageFormat;
                QAbstractVideoSurface::start(format);
                return true;
            } else {
                return false;
            }
            

            }

            unsigned char* VideoSurface::createGrayscaleBuffer(const QImage &dstImage, const int dWidth, const int dHeight)const
            {
            unsigned char* grayscaledBuffer = new unsigned char [dWidth*dHeight];
            int offset = 0;
            // default QT grayscale
            for(int y = 0; y< dHeight; y++)
            for(int x = 0; x< dWidth; x++)
            grayscaledBuffer[offset++]=qGray(dstImage.pixel(x,y));

            return grayscaledBuffer;
            

            }

            bool VideoSurface::present(const QVideoFrame &frame)
            {
            m_frame = frame;

            // number of frames received for display
            numFrames++;
            
            if (surfaceFormat().pixelFormat() != m_frame.pixelFormat() ||
                    surfaceFormat().frameSize() != m_frame.size()) {
                stop();
                return false;
            } else {
            
                m_frame.map(QAbstractVideoBuffer::ReadOnly);
            
                iWidth = m_frame.width();
                iHeight = m_frame.height();
                int line = m_frame.bytesPerLine();
            
                // build QImage from frame
            
                m_completeImage = QImage(m_frame.bits(), iWidth, iHeight, line, m_frame.imageFormatFromPixelFormat(m_frame.pixelFormat()));
            
                m_frame.unmap();
            
                QImage dstImage = scaleImage(m_completeImage);
            
                int dHeight = dstImage.height();
                int dWidth = dstImage.width();
                unsigned char* grayscaledBuffer = createGrayscaleBuffer(dstImage, dWidth, dHeight);
            
                m_orientation = ORIENTATION_CCW;
            
                QOrientationReading* reading= orientationSensor->reading();
                if ( orientationSensor->isActive() ){
                    if (reading->orientation() == QOrientationReading::RightUp){ //rotate with -90 (ccw)
                        m_orientation = ORIENTATION_LANDSCAPE;
                    }
                }
            
                // do some image processing work
                //////////////
            
                delete grayscaledBuffer;
            
                // convert points back to original size
                double iWi = (double)iWidth/dWidth;
                double iHi = (double)iHeight/dHeight;
            
                // should keep aspect ratio
                iWi = iHi = qMin(iWi, iHi);
            
                // enlarge faces
                int marginX, marginY;
            
                m_target->updateVideo();
            
                return true;
            }
            

            }

            QImage VideoSurface::scaleImage(const QImage & srcImage)const
            {
            QImage dstImage;
            if(MAX_DIM < iWidth || MAX_DIM < iHeight){
            if(iWidth > iHeight)
            dstImage = srcImage.scaledToWidth(MAX_DIM, Qt::SmoothTransformation);
            else
            dstImage = srcImage.scaledToHeight(MAX_DIM, Qt::SmoothTransformation);
            }
            else
            dstImage = srcImage;
            return dstImage;
            }

            void VideoSurface::paint(QPainter *painter)
            {
            if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
            QImage image(
            m_frame.bits(),
            m_frame.width(),
            m_frame.height(),
            m_frame.bytesPerLine(),
            m_imageFormat);
            QRect r = m_targetWidget->rect();

                int shiftX = qAbs(r.size().width() - image.size().width()) / 2;
                int shiftY = qAbs(r.size().height() - image.size().height()) / 2;
            
                QPoint centerPic(shiftX , shiftY);
            
                if (!image.isNull()) {
                    painter->drawImage(centerPic,image);
                    // draw faces
            
                }
                m_frame.unmap();
            }
            

            }

            QListQVideoFrame::PixelFormat VideoSurface::supportedPixelFormats(
            QAbstractVideoBuffer::HandleType handleType) const
            {
            if (handleType == QAbstractVideoBuffer::NoHandle) {
            return QListQVideoFrame::PixelFormat()
            // << QVideoFrame::Format_RGB32
            // << QVideoFrame::Format_ARGB32
            // << QVideoFrame::Format_ARGB32_Premultiplied
            // << QVideoFrame::Format_RGB565
            // << QVideoFrame::Format_RGB555;
            <<QVideoFrame::Format_UYVY;
            } else {
            return QListQVideoFrame::PixelFormat();
            }
            }

            @

            Thank you for your help

            1 Reply Last reply
            0
            • H Offline
              H Offline
              heikkiti
              wrote on last edited by
              #6

              I am having same (Failed to start video surface / CameraBin error: “Internal data flow error.” ) problem on N9. So help would be appreciated. Did you already solve this?

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mismail
                wrote on last edited by
                #7

                I am still not able to do this, also nokia support are not able to find a work around for this bug.

                1 Reply Last reply
                0
                • D Offline
                  D Offline
                  Dynasty1215
                  wrote on last edited by
                  #8

                  Have everyone solved it?

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mismail
                    wrote on last edited by
                    #9

                    No, I removed this feature from my application.
                    but there are many updates and bug fixes ,see it may be fixed.

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      grego
                      wrote on last edited by
                      #10

                      http://www.developer.nokia.com/Community/Wiki/MeeGo_Camera_VideoSurface_manipulation

                      has a working example.

                      Grego - http://mpaja.com/

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved