aa8fedc027d78a5e90de8aa8ec45fee4f758c5f5
[harmattan/cameraplus] / imports / camera.cpp
1 #include "camera.h"
2 #include "qtcamera.h"
3 #include "qtcamdevice.h"
4 #include "qtcammode.h"
5 #include "qtcamimagemode.h"
6 #include "qtcamvideomode.h"
7 #include "qtcamgraphicsviewfinder.h"
8
9 Camera::Camera(QDeclarativeItem *parent) :
10   QDeclarativeItem(parent),
11   m_cam(new QtCamera(this)),
12   m_dev(0),
13   m_vf(new QtCamGraphicsViewfinder(m_cam->config(), this)),
14   m_mode(Camera::ImageMode) {
15
16   // TODO:
17 }
18
19 Camera::~Camera() {
20   // TODO:
21 }
22
23 void Camera::componentComplete() {
24   QDeclarativeItem::componentComplete();
25
26   if (m_id.isValid()) {
27     QVariant oldId = m_id;
28     m_id = QVariant();
29     setDeviceId(oldId);
30   }
31
32   emit deviceCountChanged();
33 }
34
35 int Camera::deviceCount() const {
36   return m_cam ? m_cam->devices().size() : 0;
37 }
38
39 QString Camera::deviceName(int index) const {
40   return m_cam->devices().at(index).first;
41 }
42
43 QVariant Camera::deviceId(int index) const {
44   return m_cam->devices().at(index).second;
45 }
46
47 void Camera::setDeviceId(const QVariant& id) {
48   if (id == m_id) {
49     return;
50   }
51
52   if (!isComponentComplete()) {
53     m_id = id;
54     emit deviceIdChanged();
55     return;
56   }
57
58   if (m_dev && m_dev->stop()) {
59     delete m_dev;
60   }
61   else if (m_dev) {
62     qWarning() << "Failed to stop device";
63     return;
64   }
65
66   m_dev = m_cam->device(id, this);
67
68   m_id = id;
69
70   m_vf->setDevice(m_dev);
71
72   QObject::connect(m_dev, SIGNAL(runningStateChanged(bool)),
73                       this, SIGNAL(runningStateChanged()));
74   QObject::connect(m_dev, SIGNAL(idleStateChanged(bool)), this, SIGNAL(idleStateChanged()));
75
76   emit deviceIdChanged();
77   emit deviceChanged();
78 }
79
80 QVariant Camera::deviceId() const {
81   return m_id;
82 }
83
84 void Camera::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry) {
85   QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
86
87   m_vf->setGeometry(newGeometry);
88 }
89
90 QtCamDevice *Camera::device() const {
91   return m_dev;
92 }
93
94 void Camera::setMode(const Camera::CameraMode& mode) {
95   if (m_mode == mode) {
96     return;
97   }
98
99   m_mode = mode;
100
101   if (!m_dev) {
102     return;
103   }
104
105   if (m_dev->isRunning()) {
106     applyMode();
107   }
108
109   emit modeChanged();
110 }
111
112 Camera::CameraMode Camera::mode() {
113   return m_mode;
114 }
115
116 bool Camera::start() {
117   if (!m_dev) {
118     return false;
119   }
120
121   applyMode();
122
123   return m_dev->start();
124 }
125
126 void Camera::stop() {
127   if (m_dev) {
128     m_dev->stop();
129   }
130 }
131
132 bool Camera::isIdle() {
133   return m_dev ? m_dev->isIdle() : true;
134 }
135
136 bool Camera::isRunning() {
137   return m_dev ? m_dev->isRunning() : false;
138 }
139
140 void Camera::applyMode() {
141   if (m_mode == Camera::VideoMode && m_dev->activeMode() != m_dev->videoMode()) {
142     m_dev->videoMode()->activate();
143   }
144   else if (m_mode == Camera::ImageMode && m_dev->activeMode() != m_dev->imageMode()) {
145     m_dev->imageMode()->activate();
146   }
147 }