Fix for DSS scaling error on very small screens
[apps/dual-camera-demo.git] / mainwindow.cpp
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include <QThread>
4 #include "loopback.h"
6 class MyThread : public QThread
7 {
8     Q_OBJECT
10 protected:
11     void run();
12 };
14 MyThread* loopback;
16 MainWindow::MainWindow(QWidget *parent) :
17     QMainWindow(parent),
18     ui(new Ui::MainWindow)
19 {
20     ui->setupUi(this);
21     this->setAttribute(Qt::WA_TranslucentBackground);
22     this->setWindowFlags(Qt::FramelessWindowHint);
24     loopback = new MyThread();
26     if(init_loopback() < 0) {
27         /* TODO: make sure exit occurs properly */
28     }
30     /* Configure GUI */
31     this->setFixedSize(status.display_xres, status.display_yres);
32     ui->frame->setGeometry(0, 0, status.display_xres, status.display_yres);
33     ui->frame_pip->setGeometry(25, 25, status.display_xres/3, status.display_yres/3);
34     ui->capture->setGeometry(status.display_xres/2 - 210,
35                              status.display_yres - 50,
36                              91, 41);
37     ui->switch_2->setGeometry(status.display_xres/2 - 100,
38                               status.display_yres - 50,
39                               91, 41);
40     ui->pip->setGeometry(status.display_xres/2 + 10,
41                          status.display_yres - 50,
42                          91, 41);
43     ui->exit->setGeometry(status.display_xres/2 + 120,
44                           status.display_yres - 50,
45                           91, 41);
47     if(status.num_cams == 1) {
48         /* Reconfigure GUI to reflect single camera mode */
49         ui->pip->setHidden(true);
50         ui->pip->setDisabled(true);
51         ui->switch_2->setHidden(true);
52         ui->switch_2->setDisabled(true);
53         ui->frame_pip->setHidden(true);
54         ui->capture->setGeometry(status.display_xres/2 - 100,
55                                  status.display_yres - 50,
56                                  91, 41);
57         ui->exit->setGeometry(status.display_xres/2 + 10,
58                               status.display_yres - 50,
59                               91, 41);
60     }
62     /* Start the camera loopback thread */
63     loopback->start();
64 }
66 MainWindow::~MainWindow()
67 {
68     delete ui;
69 }
71 void MainWindow::on_capture_clicked()
72 {
73     status.jpeg=true;
74 }
76 void MainWindow::on_switch_2_clicked()
77 {
78     if (status.num_cams==1) status.main_cam=0;
79     else if (status.main_cam==0) status.main_cam=1;
80     else status.main_cam=0;
81 }
83 void MainWindow::on_pip_clicked()
84 {
85     if (status.num_cams==1) {
86         status.pip=false;
87         ui->frame_pip->setHidden(true);
88     }
89     else if (status.pip==true) {
90         ui->frame_pip->setHidden(true);
91         status.pip=false;
92         fbdev_disable_pip();
93     }
94     else {
95         ui->frame_pip->setHidden(false);
96         status.pip=true;
97         fbdev_enable_pip();
98     }
99 }
101 void MainWindow::on_exit_clicked()
103     status.exit=true;
104     loopback->wait(1000);
105     this->close();
108 void MyThread::run() {
110     while(status.exit == false) {
111         /* Display captured frame and sleep to control FPS */
112         process_frame();
113         msleep(30);
114     }
115     end_streaming();
116     exit_devices();
120 #include "mainwindow.moc"