3f712bd81224a3651158d8fda22ee8142f060d70
[harmattan/cameraplus] / lib / qtcamera.cpp
1 #include "qtcamera.h"
2 #include "qtcamscanner.h"
3 #include "qtcamconfig.h"
4 #include "qtcamdevice.h"
5 #include <gst/gst.h>
6
7 class QtCameraPrivate {
8 public:
9   QtCamConfig *conf;
10   QtCamScanner *scanner;
11 };
12
13 QtCamera::QtCamera(QObject *parent) :
14   QObject(parent), d_ptr(new QtCameraPrivate) {
15
16   gst_init(0, 0);
17
18   d_ptr->conf = new QtCamConfig(this);
19   d_ptr->scanner = new QtCamScanner(d_ptr->conf, this);
20
21   refreshDevices();
22 }
23
24 QtCamera::QtCamera(const QString& configPath, QObject *parent) :
25   QObject(parent), d_ptr(new QtCameraPrivate) {
26
27   gst_init(0, 0);
28
29   d_ptr->conf = new QtCamConfig(configPath, this);
30   d_ptr->scanner = new QtCamScanner(d_ptr->conf, this);
31
32   refreshDevices();
33 }
34
35 QtCamera::QtCamera(QtCamConfig *config, QObject *parent) :
36   QObject(parent), d_ptr(new QtCameraPrivate) {
37
38   gst_init(0, 0);
39
40   d_ptr->conf = config;
41   d_ptr->scanner = new QtCamScanner(d_ptr->conf, this);
42
43   refreshDevices();
44 }
45
46 QtCamera::~QtCamera() {
47   delete d_ptr; d_ptr = 0;
48
49   gst_deinit();
50 }
51
52
53 void QtCamera::refreshDevices() {
54   d_ptr->scanner->refresh();
55 }
56
57 QList<QPair<QString, QVariant> > QtCamera::devices() const {
58   return d_ptr->scanner->devices();
59 }
60
61 QtCamDevice *QtCamera::device(const QVariant& id, QObject *parent) {
62   QList<QPair<QString, QVariant> > devs = devices();
63
64   // G++ barfs with foreach and class templates.
65   typedef QPair<QString, QVariant> Dev;
66   foreach (const Dev& dev, devs) {
67     if (dev.second == id) {
68       return new QtCamDevice(d_ptr->conf, dev.first, dev.second, parent ? parent : this);
69     }
70   }
71
72   return 0;
73 }
74
75 QtCamConfig *QtCamera::config() const {
76   return d_ptr->conf;
77 }