+ void resetCaps(const char *property) {
+ if (!dev->cameraBin) {
+ return;
+ }
+
+ g_object_set(dev->cameraBin, property, NULL, NULL);
+ }
+
+ bool inNightMode() {
+ if (!dev->cameraBin) {
+ return false;
+ }
+
+ int val = 0;
+
+ g_object_get(dev->videoSource, "scene-mode", &val, NULL);
+
+ return val == GST_PHOTOGRAPHY_SCENE_MODE_NIGHT;
+ }
+
+ void setCaps(const char *property, const QSize& resolution, int fps) {
+ if (!dev->cameraBin) {
+ return;
+ }
+
+ if (resolution.width() <= 0 || resolution.height() <= 0) {
+ return;
+ }
+
+ GstCaps *caps = 0;
+
+ if (fps <= 0) {
+ caps = gst_caps_new_simple("video/x-raw-yuv",
+ "width", G_TYPE_INT, resolution.width(),
+ "height", G_TYPE_INT, resolution.height(),
+ NULL);
+ }
+ else {
+ caps = gst_caps_new_simple("video/x-raw-yuv",
+ "width", G_TYPE_INT, resolution.width(),
+ "height", G_TYPE_INT, resolution.height(),
+ "framerate",
+ GST_TYPE_FRACTION_RANGE, fps - 1, 1, fps + 1, 1,
+ NULL);
+ }
+
+ GstCaps *old = 0;
+
+ g_object_get(dev->cameraBin, property, &old, NULL);
+
+ if (gst_caps_is_equal(caps, old)) {
+ gst_caps_unref(old);
+ gst_caps_unref(caps);
+
+ return;
+ }
+
+ g_object_set(dev->cameraBin, property, caps, NULL);
+
+ if (old) {
+ gst_caps_unref(old);
+ }
+ }
+
+ void setPreviewSize(const QSize& size) {
+ if (!dev->cameraBin) {
+ return;
+ }
+
+ if (size.width() <= 0 && size.height() <= 0) {
+ g_object_set(dev->cameraBin, "preview-caps", NULL, "post-previews", FALSE, NULL);
+ }
+ else {
+ QString preview = QString(PREVIEW_CAPS).arg(size.width()).arg(size.height());
+
+ GstCaps *caps = gst_caps_from_string(preview.toAscii());
+
+ g_object_set(dev->cameraBin, "preview-caps", caps, "post-previews", TRUE, NULL);
+
+ gst_caps_unref(caps);
+ }
+ }
+
+ void setFileName(const QString& file) {
+ fileName = file;
+ }
+
+ void setTempFileName(const QString& file) {
+ tempFileName = file;
+ }
+
+ void enableViewfinderFilters() {
+ if (dev->viewfinderFilters) {
+ dev->viewfinderFilters->setBlocked(false);
+ }
+ }
+
+ void disableViewfinderFilters() {
+ if (dev->viewfinderFilters) {
+ dev->viewfinderFilters->setBlocked(true);
+ }
+ }
+