3 #ifndef QT_CAM_MODE_P_H
4 #define QT_CAM_MODE_P_H
7 #include "qtcamdevice_p.h"
8 #include <gst/pbutils/encoding-profile.h>
9 #include <gst/pbutils/encoding-target.h>
11 class QtCamDevicePrivate;
12 class PreviewImageHandler;
15 #define CAPS "video/x-raw-yuv, width = (int) %1, height = (int) %2, framerate = (fraction) %3/%4"
17 class QtCamModePrivate {
19 QtCamModePrivate(QtCamDevicePrivate *d) : id(-1), dev(d), night(false) {}
20 virtual ~QtCamModePrivate() {}
22 int modeId(const char *mode) {
23 if (!dev->cameraBin) {
27 GParamSpec *pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(dev->cameraBin),
33 if (!G_IS_PARAM_SPEC_ENUM(pspec)) {
37 GParamSpecEnum *e = (GParamSpecEnum *)pspec;
38 GEnumClass *klass = e->enum_class;
40 for (unsigned x = 0; x < klass->n_values; x++) {
41 if (QLatin1String(mode) == QLatin1String(klass->values[x].value_nick)) {
42 return klass->values[x].value;
49 GstEncodingProfile *loadProfile(const QString& path, const QString& name) {
52 GstEncodingTarget *target = gst_encoding_target_load_from_file(path.toUtf8().data(), &error);
54 qCritical() << "Failed to load encoding target from" << path << error->message;
59 GstEncodingProfile *profile = gst_encoding_target_get_profile(target, name.toUtf8().data());
61 qCritical() << "Failed to load encoding profile from" << path;
62 gst_encoding_target_unref(target);
66 gst_encoding_target_unref(target);
71 void setCaps(const char *property, const QSize& resolution, const QPair<int, int> frameRate) {
72 if (!dev->cameraBin) {
76 // TODO: allow proceeding without specifying a frame rate (maybe we can calculate it ?)
77 if (frameRate.first <= 0 || frameRate.second <= 0) {
81 if (resolution.width() <= 0 || resolution.height() <= 0) {
85 QString capsString = QString(CAPS)
86 .arg(resolution.width()).arg(resolution.height())
87 .arg(frameRate.first).arg(frameRate.second);
89 GstCaps *caps = gst_caps_from_string(capsString.toAscii());
91 g_object_set(dev->cameraBin, property, caps, NULL);
97 QtCamDevicePrivate *dev;
98 PreviewImageHandler *previewImageHandler;
99 DoneHandler *doneHandler;
103 #endif /* QT_CAM_MODE_P_H */