Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

Tutorial: Implementing and using a Camera Plugin

Introduction

This small tutorial covers the case where you want your camera device to be accessable in Qt Extended, in particular the camera application can then make use of this plugin.

Limitations: Video capture including JPEG image capture is not yet implemented by the camera application. Controlable features (e.g brightness, saturation) is also not made use of in the application.

The camera plugin mechanism

Please note: It is recommended to look at the implementation of the greenphone and Qvfb webcam plugins under their respective directories in $SOURCE_PATH/src/plugins/cameras/ for reference. Certain features such as video capture are not implemented.

Device cameras are implemented through a thin interface wrapper and exposed through the plugin mechanism, the API is available and documented in the qtopiavideo libraries.

The main class is QCameraDevice, it can be queried for supported interfaces allowing Previewing of camera data (e.g in a view finder ), Still Shot capture or Video capture. Implementors overide this class and provide the Interfaces that they want to for their device.

Users take this and call methods on these interfaces in an intuitive way.

Implementing the device and plugin

Camera implementors must overide QCameraDevice and provide the interfaces they support to the user. They must then wrap it up in a plugin mechanism using QCameraDevicePlugin. The code goes in $BUILD_DIR/devices/{your_device}/src/plugins/cameras/{your_camera_name}. Please see the documentation and greenphone/qvfb plugins for reference.

Loading the plugin

Camera Devices are made queryable using the QCameraDeviceLoader class

    QCameraDeviceLoader *loader = QCameraDeviceLoader::instance();
    QCameraDevice* device = loader->deviceWithOrientation(QCameraDevice::BackFacing);
    // or
    QList<QCameraDevice*> devices = loader->allAvailableCameras();
    ...

Preview Data

Preview (or view finder data) is available using the class QCameraPreviewCapture.

    QCameraPreviewCapture *preview;
    connect(preview, SIGNAL(frameReady(QVideoFrame)), this, SLOT(useFrame(QVideoFrame)))
    preview->start(...) //start preview data flow
    ..
    preview->stop(); //stop preview data flow

Still Data

Still data is usually (but no neccesarily) for high resolution photos.

    QCameraStillCapture *still;
    connect(still, SIGNAL(imageReady(...)), this, SLOT(imageReadyForUse(...))); //received image data
    connect(still, SIGNAL(notifyPreSnap()), this, SLOT(imageAboutToBeTaken())); //be notified just before the image is actually taken
    still->takeStillImage(...); //take still image

Still data can be compressed (e.g JPEG) or raw pixel format encoded (e.g RGB, YUV data) The two cases are handled as follows: For raw pixel data the complete image is returned in the signal imageReady(...) For compressed data, a flag bool complete in the imageReady() signal indicates if there is more data available. If there is more data is should be appended to the existing image data until complete is true ).

Video Data

Video data must be sent as raw bitstreams without container information. Examples of are mpeg4 and h.263

    QCameraVideoCapture *video;
    video->start(...); //start recording
    // ...
    //Use the QIODevice interface to be read video data
    // ...
    video->stop(); //stop recording

See also QCameraDevice, QtopiaCamera, QtopiaVideo, QCameraDevicePlugin, QCameraDeviceLoader, QCameraPreviewCapture, QCameraStillCapture, and QCameraVideoCapture.

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 82
  2. Apercevoir la troisième dimension ou l'utilisation multithreadée d'OpenGL dans Qt, un article des Qt Quarterly traduit par Guillaume Belz 0
  3. Les développeurs ignorent-ils trop les failles découvertes dans leur code ? Prenez-vous en compte les remarques des autres ? 17
  4. BlackBerry 10 : premières images du prochain OS de RIM qui devrait intégrer des widgets et des tuiles inspirées de Windows Phone 0
  5. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  6. Adieu qmake, bienvenue qbs : Qt Building Suite, un outil déclaratif et extensible pour la compilation de projets Qt 17
  7. 2017 : un quinquennat pour une nouvelle version du C++ ? Possible, selon Herb Sutter 6
Page suivante

Le Qt Quarterly au hasard

Logo

Les formes du pluriel dans les traductions

Qt Quarterly est la revue trimestrielle proposée par Nokia et à destination des développeurs Qt. Ces articles d'une grande qualité technique sont rédigés par des experts Qt. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt qtextended4.4
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web