9 #include <QApplication>
11 #include "tab_movie_h264.h"
12 #include "dialog_movie.h"
13 #include "../avio/movie_saver.h"
14 #include "../../config.h"
16 CSP_TabMovieH264::CSP_TabMovieH264(MOVIE_SAVER *ms, CSP_DialogMovie *parent_window, USING_FLAGS *p, QWidget *parent) : QWidget(parent)
22 p_window = parent_window;
24 video_maxq = config.video_h264_maxq;
25 video_minq = config.video_h264_minq;
27 label_video_bframes = new QLabel(QApplication::translate("MainWindow", "Max B Frames", 0), this);
28 combo_video_bframes = new QComboBox(this);
29 label_video_b_adapt = new QLabel(QApplication::translate("MainWindow", "B Adaption", 0), this);
30 combo_video_b_adapt = new QComboBox(this);
31 label_video_subme = new QLabel(QApplication::translate("MainWindow", "Subpixel motion estimate", 0), this);
32 combo_video_subme = new QComboBox(this);
35 label_video_bitrate = new QLabel(QApplication::translate("MainWindow", "Bitrate", 0), this);
36 combo_video_bitrate = new QComboBox(this);
37 combo_video_bitrate->addItem(QString::fromUtf8("128Kbps"), 128);
38 combo_video_bitrate->addItem(QString::fromUtf8("256Kbps"), 256);
39 combo_video_bitrate->addItem(QString::fromUtf8("300Kbps"), 300);
40 combo_video_bitrate->addItem(QString::fromUtf8("512Kbps"), 512);
41 combo_video_bitrate->addItem(QString::fromUtf8("600Kbps"), 600);
42 combo_video_bitrate->addItem(QString::fromUtf8("768Kbps"), 768);
43 combo_video_bitrate->addItem(QString::fromUtf8("900Kbps"), 900);
44 combo_video_bitrate->addItem(QString::fromUtf8("1000Kbps"), 1000);
45 combo_video_bitrate->addItem(QString::fromUtf8("1200Kbps"), 1200);
46 combo_video_bitrate->addItem(QString::fromUtf8("1500Kbps"), 1500);
47 combo_video_bitrate->addItem(QString::fromUtf8("1800Kbps"), 1800);
48 combo_video_bitrate->addItem(QString::fromUtf8("3000Kbps"), 3000);
49 combo_video_bitrate->addItem(QString::fromUtf8("4500Kbps"), 4500);
50 for(int i = 0; i < combo_video_bitrate->count(); i++) {
51 int br = combo_video_bitrate->itemData(i).toInt();
52 if(br == config.video_h264_bitrate) {
53 combo_video_bitrate->setCurrentIndex(i);
56 connect(combo_video_bitrate, SIGNAL(activated(int)), this, SLOT(do_set_video_bitrate(int)));
57 video_bitrate = config.video_h264_bitrate;
60 combo_video_bframes->addItem(QString::fromUtf8("0"), 0);
61 combo_video_bframes->addItem(QString::fromUtf8("1"), 1);
62 combo_video_bframes->addItem(QString::fromUtf8("2"), 2);
63 combo_video_bframes->addItem(QString::fromUtf8("3"), 3);
64 combo_video_bframes->addItem(QString::fromUtf8("4"), 4);
65 combo_video_bframes->addItem(QString::fromUtf8("5"), 5);
66 combo_video_bframes->addItem(QString::fromUtf8("6"), 6);
67 combo_video_bframes->addItem(QString::fromUtf8("7"), 7);
68 combo_video_bframes->addItem(QString::fromUtf8("8"), 8);
69 for(int i = 0; i < combo_video_bframes->count(); i++) {
70 int br = combo_video_bframes->itemData(i).toInt();
71 if(br == config.video_h264_bframes) {
72 combo_video_bframes->setCurrentIndex(i);
75 video_bframes = config.video_h264_bframes;
76 connect(combo_video_bframes, SIGNAL(activated(int)), this, SLOT(do_set_bframes(int)));
79 combo_video_b_adapt->addItem(QApplication::translate("MainWindow", "None", 0), 0);
80 combo_video_b_adapt->addItem(QApplication::translate("MainWindow", "Fast", 0), 1);
81 combo_video_b_adapt->addItem(QApplication::translate("MainWindow", "Optimal (Slow with high B-Frames)", 0), 2);
82 for(int i = 0; i < combo_video_b_adapt->count(); i++) {
83 int br = combo_video_b_adapt->itemData(i).toInt();
84 if(br == config.video_h264_b_adapt) {
85 combo_video_b_adapt->setCurrentIndex(i);
88 video_b_adapt = config.video_h264_b_adapt;
89 connect(combo_video_b_adapt, SIGNAL(activated(int)), this, SLOT(do_set_b_adapt(int)));
91 slider_qmin = new QSlider(Qt::Horizontal, this);
92 slider_qmin->setMinimum(0);
93 slider_qmin->setMaximum(63);
94 slider_qmin->setValue(config.video_h264_minq);
95 label_qmin_val = new QLabel(this);
96 tmps.setNum(config.video_h264_minq);
97 label_qmin_val->setText(tmps);
98 label_qmin_name = new QLabel(QString::fromUtf8("QP Min"), this);
99 video_minq = config.video_h264_minq;
100 connect(slider_qmin, SIGNAL(valueChanged(int)), this, SLOT(do_set_qmin(int)));
102 slider_qmax = new QSlider(Qt::Horizontal, this);
103 slider_qmax->setMinimum(0);
104 slider_qmax->setMaximum(63);
105 slider_qmax->setValue(config.video_h264_maxq);
106 label_qmax_val = new QLabel(this);
107 tmps.setNum(config.video_h264_maxq);
108 label_qmax_val->setText(tmps);
109 label_qmax_name = new QLabel(QString::fromUtf8("QP Max"), this);
110 connect(slider_qmax, SIGNAL(valueChanged(int)), this, SLOT(do_set_qmax(int)));
111 video_maxq = config.video_h264_maxq;
114 combo_video_subme->addItem(QApplication::translate("MainWindow", "RD mode decision for I/P-frames", 0), 6);
115 combo_video_subme->addItem(QApplication::translate("MainWindow", "RD mode decision for all frames", 0), 7);
116 combo_video_subme->addItem(QApplication::translate("MainWindow", "RD refinement for I/P-frames", 0), 8);
117 combo_video_subme->addItem(QApplication::translate("MainWindow", "RD refinement for all frames", 0), 9);
118 combo_video_subme->addItem(QApplication::translate("MainWindow", "QP-RD", 0), 10); // Trellis 2, admode > 0
119 combo_video_subme->addItem(QApplication::translate("MainWindow", "Full RD: disable all early terminations", 0), 11);
120 for(int i = 0; i < combo_video_subme->count(); i++) {
121 int br = combo_video_subme->itemData(i).toInt();
122 if(br == config.video_h264_subme) {
123 combo_video_subme->setCurrentIndex(i);
126 video_subme = config.video_h264_subme;
127 connect(combo_video_subme, SIGNAL(activated(int)), this, SLOT(do_set_subme(int)));
129 label_title = new QLabel(QApplication::translate("MainWindow", "Set H.264 parameter.", 0), this);
130 grid_layout = new QGridLayout(this);
132 grid_layout->addWidget(label_title, 0, 0);
134 grid_layout->addWidget(label_qmin_name, 1, 0);
135 grid_layout->addWidget(label_qmin_val, 1, 3);
136 grid_layout->addWidget(slider_qmin, 2, 0, 1, 4);
137 grid_layout->addWidget(label_qmax_name, 3, 0);
138 grid_layout->addWidget(label_qmax_val, 3, 3);
139 grid_layout->addWidget(slider_qmax, 4, 0, 1, 4);
140 grid_layout->addWidget(label_video_bitrate, 5, 0);
141 grid_layout->addWidget(combo_video_bitrate, 5, 1);
144 grid_layout->addWidget(label_video_bframes, 6, 0);
145 grid_layout->addWidget(combo_video_bframes, 6, 1);
147 grid_layout->addWidget(label_video_b_adapt, 6, 2);
148 grid_layout->addWidget(combo_video_b_adapt, 6, 3);
150 grid_layout->addWidget(label_video_subme, 7, 0);
151 grid_layout->addWidget(combo_video_subme, 7, 1);
153 this->setLayout(grid_layout);
155 connect(this, SIGNAL(sig_video_add_option(QString, QString)), p_movie, SLOT(do_add_option(QString, QString)));
156 connect(this, SIGNAL(sig_set_video_bitrate(int)), p_movie, SLOT(do_set_video_bitrate(int)));
161 CSP_TabMovieH264::~CSP_TabMovieH264()
165 void CSP_TabMovieH264::do_set_codecs(void)
169 // https://libav.org/avconv.html#Video-Options
170 config.video_h264_bitrate = video_bitrate;
172 config.video_h264_maxq = video_maxq;
173 config.video_h264_minq = video_minq;
174 config.video_h264_bframes = video_bframes;
175 config.video_h264_b_adapt = video_b_adapt;
176 config.video_h264_subme = video_subme;
179 void CSP_TabMovieH264::do_set_qmin(int n)
186 label_qmin_val->setText(tmps);
189 void CSP_TabMovieH264::do_set_qmax(int n)
197 label_qmax_val->setText(tmps);
200 void CSP_TabMovieH264::do_set_bframes(int n)
202 int val = combo_video_bframes->itemData(n).toInt();
204 if(val > 10) val = 10;
208 void CSP_TabMovieH264::do_set_video_bitrate(int n)
210 int val = combo_video_bitrate->itemData(n).toInt();
211 if(val < 64) val = 64;
215 void CSP_TabMovieH264::do_set_b_adapt(int n)
217 int val = combo_video_b_adapt->itemData(n).toInt();
223 void CSP_TabMovieH264::do_set_subme(int n)
225 int val = combo_video_subme->itemData(n).toInt();
227 if(val > 11) val = 11;