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?

QCamera is not working in N950?

Scheduled Pinned Locked Moved Mobile and Embedded
10 Posts 6 Posters 5.6k 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