OSDN Git Service

1466a499367aa8ee47326c6296e9c4b38f3a0072
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / tab_movie_mpeg4.cpp
1 #include <QHBoxLayout>
2 #include <QVBoxLayout>
3 #include <QGridLayout>
4 #include <QWidget>
5 #include <QPushButton>
6 #include <QSlider>
7 #include <QComboBox>
8 #include <QLabel>
9 #include <QApplication>
10
11 #include "tab_movie_mpeg4.h"
12 #include "dialog_movie.h"
13 #include "../avio/movie_saver.h"
14 #include "../../config.h"
15
16 CSP_TabMovieMPEG4::CSP_TabMovieMPEG4(MOVIE_SAVER *ms, CSP_DialogMovie *parent_window,  USING_FLAGS *p, QWidget *parent) : QWidget(parent)
17 {
18         QString tmps;
19         using_flags = p;
20         p_wid = parent;
21         p_movie = ms;
22         p_window = parent_window;
23
24         video_maxq = config.video_mpeg4_maxq;
25         video_minq = config.video_mpeg4_minq;
26         if(video_maxq < video_minq) {
27                 int n = video_maxq;
28                 video_maxq = video_minq;
29                 video_minq = n;
30         }
31         if(video_maxq < 1) video_maxq = 1;
32         if(video_maxq > 31) video_maxq = 31;
33         if(video_minq < 1) video_minq = 1;
34         if(video_minq > 31) video_minq = 31;
35
36         label_video_bframes = new QLabel(QApplication::translate("MainWindow", "Max B Frames", 0), this);
37         combo_video_bframes = new QComboBox(this);
38         // Video bitrates
39         label_video_bitrate = new QLabel(QApplication::translate("MainWindow", "Bitrate", 0), this);
40         combo_video_bitrate = new QComboBox(this);
41         combo_video_bitrate->addItem(QString::fromUtf8("128Kbps"), 128);        
42         combo_video_bitrate->addItem(QString::fromUtf8("256Kbps"), 256);
43         combo_video_bitrate->addItem(QString::fromUtf8("300Kbps"), 300);
44         combo_video_bitrate->addItem(QString::fromUtf8("512Kbps"), 512);
45         combo_video_bitrate->addItem(QString::fromUtf8("600Kbps"), 600);
46         combo_video_bitrate->addItem(QString::fromUtf8("768Kbps"), 768);
47         combo_video_bitrate->addItem(QString::fromUtf8("900Kbps"), 900);
48         combo_video_bitrate->addItem(QString::fromUtf8("1000Kbps"), 1000);
49         combo_video_bitrate->addItem(QString::fromUtf8("1200Kbps"), 1200);
50         combo_video_bitrate->addItem(QString::fromUtf8("1500Kbps"), 1500);
51         combo_video_bitrate->addItem(QString::fromUtf8("1800Kbps"), 1800);
52         combo_video_bitrate->addItem(QString::fromUtf8("3000Kbps"), 3000);
53         combo_video_bitrate->addItem(QString::fromUtf8("4500Kbps"), 4500);
54         combo_video_bitrate->addItem(QString::fromUtf8("5000Kbps"), 5000);
55         combo_video_bitrate->addItem(QString::fromUtf8("7500Kbps"), 7500);
56         combo_video_bitrate->addItem(QString::fromUtf8("9000Kbps"), 9000);
57         combo_video_bitrate->addItem(QString::fromUtf8("10000Kbps"), 10000);
58         combo_video_bitrate->addItem(QString::fromUtf8("15000Kbps"), 15000);
59         combo_video_bitrate->addItem(QString::fromUtf8("20000Kbps"), 20000);
60         for(int i = 0; i < combo_video_bitrate->count(); i++) {
61                 int br = combo_video_bitrate->itemData(i).toInt();
62                 if(br == config.video_mpeg4_bitrate) {
63                         combo_video_bitrate->setCurrentIndex(i);
64                 }
65         }
66         connect(combo_video_bitrate, SIGNAL(activated(int)), this, SLOT(do_set_video_bitrate(int)));
67         video_bitrate = config.video_mpeg4_bitrate;
68
69         // Video bframes
70         combo_video_bframes->addItem(QString::fromUtf8("1"), 1);
71         combo_video_bframes->addItem(QString::fromUtf8("2"), 2);
72         combo_video_bframes->addItem(QString::fromUtf8("3"), 3);
73         combo_video_bframes->addItem(QString::fromUtf8("4"), 4);
74         combo_video_bframes->addItem(QString::fromUtf8("5"), 5);
75         combo_video_bframes->addItem(QString::fromUtf8("6"), 6);
76         combo_video_bframes->addItem(QString::fromUtf8("7"), 7);
77         combo_video_bframes->addItem(QString::fromUtf8("8"), 8);
78         for(int i = 0; i < combo_video_bframes->count(); i++) {
79                 int br = combo_video_bframes->itemData(i).toInt();
80                 if(br == config.video_mpeg4_bframes) {
81                         combo_video_bframes->setCurrentIndex(i);
82                 }
83         }
84         video_bframes = config.video_mpeg4_bframes;
85         connect(combo_video_bframes, SIGNAL(activated(int)), this, SLOT(do_set_bframes(int)));
86
87
88         slider_qmin = new QSlider(Qt::Horizontal, this);
89         slider_qmin->setMinimum(1);
90         slider_qmin->setMaximum(31);
91         slider_qmin->setValue(config.video_mpeg4_minq);
92         label_qmin_val = new QLabel(this);
93         tmps.setNum(config.video_mpeg4_minq);
94         label_qmin_val->setText(tmps);
95         label_qmin_name = new QLabel(QString::fromUtf8("QP Min"), this);
96         video_minq = config.video_mpeg4_minq;
97         connect(slider_qmin, SIGNAL(valueChanged(int)), this, SLOT(do_set_qmin(int)));
98                 
99         slider_qmax = new QSlider(Qt::Horizontal, this);
100         slider_qmax->setMinimum(1);
101         slider_qmax->setMaximum(31);
102         slider_qmax->setValue(config.video_mpeg4_maxq);
103         label_qmax_val = new QLabel(this);
104         tmps.setNum(config.video_mpeg4_maxq);
105         label_qmax_val->setText(tmps);
106         label_qmax_name = new QLabel(QString::fromUtf8("QP Max"), this);
107         connect(slider_qmax, SIGNAL(valueChanged(int)), this, SLOT(do_set_qmax(int)));
108         video_maxq = config.video_mpeg4_maxq;
109         
110         label_title = new QLabel(QApplication::translate("MainWindow", "Set MPEG4v1 parameter.", 0), this);
111         grid_layout = new QGridLayout(this);
112
113         grid_layout->addWidget(label_title, 0, 0);
114         
115         grid_layout->addWidget(label_qmin_name, 1, 0);
116         grid_layout->addWidget(label_qmin_val, 1, 3);
117         grid_layout->addWidget(slider_qmin, 2, 0, 1, 4);
118         grid_layout->addWidget(label_qmax_name, 3, 0);
119         grid_layout->addWidget(label_qmax_val, 3, 3);
120         grid_layout->addWidget(slider_qmax, 4, 0, 1, 4);
121         grid_layout->addWidget(label_video_bitrate, 5, 0);
122         grid_layout->addWidget(combo_video_bitrate, 5, 1);
123         
124         grid_layout->addWidget(label_video_bframes, 5, 2);
125         grid_layout->addWidget(combo_video_bframes, 5, 3);
126         
127         this->setLayout(grid_layout);
128
129         connect(this, SIGNAL(sig_video_add_option(QString, QString)), p_movie, SLOT(do_add_option(QString, QString)));
130         connect(this, SIGNAL(sig_set_video_bitrate(int)), p_movie, SLOT(do_set_video_bitrate(int)));
131         this->show();
132 }
133
134
135 CSP_TabMovieMPEG4::~CSP_TabMovieMPEG4()
136 {
137 }
138
139 void CSP_TabMovieMPEG4::do_set_codecs(void)
140 {
141         QString value;
142         // See:
143         // https://libav.org/avconv.html#Video-Options
144         config.video_mpeg4_bitrate = video_bitrate;
145
146         config.video_mpeg4_maxq = video_maxq;
147         config.video_mpeg4_minq = video_minq;
148         config.video_mpeg4_bframes = video_bframes;
149 }
150
151 void CSP_TabMovieMPEG4::do_set_qmin(int n)
152 {
153         if(n < 1) n = 1;
154         if(n > 31) n = 31;
155         QString tmps;
156         video_minq = n;
157         tmps.setNum(n);
158         label_qmin_val->setText(tmps);
159 }
160
161 void CSP_TabMovieMPEG4::do_set_qmax(int n)
162 {
163         if(n < 1) n = 1;
164         if(n > 31) n = 31;
165         
166         QString tmps;
167         video_maxq = n;
168         tmps.setNum(n);
169         label_qmax_val->setText(tmps);
170 }
171
172 void CSP_TabMovieMPEG4::do_set_bframes(int n)
173 {
174         int val = combo_video_bframes->itemData(n).toInt();
175         if(val < 1) val = 1;
176         if(val > 10) val = 10;
177         video_bframes = val;
178 }
179
180 void CSP_TabMovieMPEG4::do_set_video_bitrate(int n)
181 {
182         int val = combo_video_bitrate->itemData(n).toInt();
183         if(val < 64) val = 64;
184         video_bitrate = val;
185 }
186