3 #include "qtcamdevice.h"
5 #include "qtcamimagemode.h"
6 #include "qtcamvideomode.h"
7 #include "qtcamgraphicsviewfinder.h"
9 Camera::Camera(QDeclarativeItem *parent) :
10 QDeclarativeItem(parent),
11 m_cam(new QtCamera(this)),
13 m_vf(new QtCamGraphicsViewfinder(m_cam->config(), this)),
14 m_mode(Camera::ImageMode) {
23 void Camera::componentComplete() {
24 QDeclarativeItem::componentComplete();
27 QVariant oldId = m_id;
32 emit deviceCountChanged();
35 int Camera::deviceCount() const {
36 return m_cam ? m_cam->devices().size() : 0;
39 QString Camera::deviceName(int index) const {
40 return m_cam->devices().at(index).first;
43 QVariant Camera::deviceId(int index) const {
44 return m_cam->devices().at(index).second;
47 void Camera::setDeviceId(const QVariant& id) {
52 if (!isComponentComplete()) {
54 emit deviceIdChanged();
58 if (m_dev && m_dev->stop()) {
62 qWarning() << "Failed to stop device";
66 m_dev = m_cam->device(id, this);
70 m_vf->setDevice(m_dev);
72 QObject::connect(m_dev, SIGNAL(runningStateChanged(bool)),
73 this, SIGNAL(runningStateChanged()));
74 QObject::connect(m_dev, SIGNAL(idleStateChanged(bool)), this, SIGNAL(idleStateChanged()));
76 emit deviceIdChanged();
80 QVariant Camera::deviceId() const {
84 void Camera::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry) {
85 QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
87 m_vf->setGeometry(newGeometry);
90 QtCamDevice *Camera::device() const {
94 void Camera::setMode(const Camera::CameraMode& mode) {
105 if (m_dev->isRunning()) {
112 Camera::CameraMode Camera::mode() {
116 bool Camera::start() {
123 return m_dev->start();
126 void Camera::stop() {
132 bool Camera::isIdle() {
133 return m_dev ? m_dev->isIdle() : true;
136 bool Camera::isRunning() {
137 return m_dev ? m_dev->isRunning() : false;
140 void Camera::applyMode() {
141 if (m_mode == Camera::VideoMode && m_dev->activeMode() != m_dev->videoMode()) {
142 m_dev->videoMode()->activate();
144 else if (m_mode == Camera::ImageMode && m_dev->activeMode() != m_dev->imageMode()) {
145 m_dev->imageMode()->activate();