UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
video_opts.cpp
Go to the documentation of this file.
1#include <cstring>
2#include <QLabel>
3
4#include "video_opts.hpp"
5#include "combobox_ui.hpp"
6#include "lineedit_ui.hpp"
7
8std::vector<SettingItem> getVideoSrc(AvailableSettings *availSettings){
9 const char * const whiteList[] = {
10 "bitflow",
11 };
12 const std::string optStr = "video.source";
13
14 std::vector<SettingItem> res;
15
16 SettingItem defaultItem;
17 defaultItem.name = "None";
18 defaultItem.opts.push_back({optStr, ""});
19 defaultItem.opts.push_back({"video.source.embeddedAudioAvailable", "f"});
20 res.push_back(std::move(defaultItem));
21
22 for(const auto &i : availSettings->getDevices(VIDEO_SRC)){
24 item.name = i.name;
25 item.opts.push_back({optStr, i.type});
26 item.opts.push_back({optStr + "." + i.type + ".device", i.deviceOpt});
27 auto embedAudioIt = i.extra.find("embeddedAudioAvailable");
28 bool enableAudio = embedAudioIt != i.extra.end()
29 && embedAudioIt->second == "t";
30 item.opts.push_back({"video.source.embeddedAudioAvailable",
31 enableAudio ? "t" : "f"});
32 res.push_back(std::move(item));
33 }
34
35 for(const auto &i : availSettings->getAvailableSettings(VIDEO_SRC)){
37 item.name = i;
38 item.opts.push_back({optStr, i});
39 bool whiteListed = false;
40 for(const auto &white : whiteList){
41 if(std::strcmp(white, i.c_str()) == 0){
42 whiteListed = true;
43 }
44 }
45 if(!whiteListed){
46 item.conditions.push_back({{{"advanced", "t"}, false}});
47 }
48 res.push_back(std::move(item));
49 }
50
51 return res;
52}
53
54std::vector<SettingItem> getVideoModes(AvailableSettings *availSettings){
55 std::vector<SettingItem> res;
56
57 for(const auto &cap : availSettings->getDevices(VIDEO_SRC)){
58 for(const auto &mode : cap.modes){
60 item.name = mode.name;
61 item.conditions.push_back({{{"video.source", cap.type}, false}});
62 item.conditions.push_back({
63 {{"video.source." + cap.type + ".device", cap.deviceOpt}, false}});
64 for(const auto &opt : mode.opts){
65 item.opts.push_back(
66 {"video.source." + cap.type + "." + opt.opt, opt.val});
67 }
68 res.push_back(std::move(item));
69 }
70 }
71
72 return res;
73}
74
75std::vector<SettingItem> getVideoDisplay(AvailableSettings *availSettings){
76 const char * const whiteList[] = {
77 "dvs",
78 "quicktime"
79 };
80
81 const std::string optStr = "video.display";
82
83 std::vector<SettingItem> res;
84
85 SettingItem defaultItem;
86 defaultItem.name = "None";
87 defaultItem.opts.push_back({optStr, ""});
88 defaultItem.opts.push_back({"video.display.embeddedAudioAvailable", "f"});
89 res.push_back(std::move(defaultItem));
90
91 for(const auto &i : availSettings->getDevices(VIDEO_DISPLAY)){
93 item.name = i.name;
94 item.opts.push_back({optStr, i.type});
95 item.opts.push_back({optStr + "." + i.type + ".device", i.deviceOpt});
96 auto embedAudioIt = i.extra.find("embeddedAudioAvailable");
97 bool enableAudio = embedAudioIt != i.extra.end()
98 && embedAudioIt->second == "t";
99 item.opts.push_back({"video.display.embeddedAudioAvailable",
100 enableAudio ? "t" : "f"});
101 res.push_back(std::move(item));
102 }
103
104 for(const auto &i : availSettings->getAvailableSettings(VIDEO_DISPLAY)){
106 item.name = i;
107 item.opts.push_back({optStr, i});
108 bool whiteListed = false;
109 for(const auto &white : whiteList){
110 if(std::strcmp(white, i.c_str()) == 0){
111 whiteListed = true;
112 }
113 }
114 if(!whiteListed){
115 item.conditions.push_back({{{"advanced", "t"}, false}});
116 }
117 res.push_back(std::move(item));
118 }
119
120 return res;
121}
122
123std::vector<SettingItem> getCodecEncoders(const Codec& codec){
124 std::vector<SettingItem> res;
125
126 for(const auto& encoder: codec.encoders){
128 item.name = encoder.name;
129 item.opts.push_back({"video.compress." + codec.module_name + ".codec." + codec.name + ".encoder", encoder.optStr});
130
131 res.emplace_back(std::move(item));
132 }
133
134 return res;
135}
136
137std::vector<SettingItem> getVideoCompress(AvailableSettings *availSettings){
138 std::vector<SettingItem> res;
139
140 const std::string optStr = "video.compress";
141
142 for(const auto& codec : availSettings->getVideoCompressCodecs()){
144 item.name = codec.name;
145 item.opts.push_back({"video.compress", codec.module_name});
146 item.opts.push_back({"video.compress." + codec.module_name + ".codec", codec.name});
147
148 res.push_back(std::move(item));
149 }
150
151 return res;
152}
153
154void videoCompressBitrateCallback(Option &opt, bool suboption, void *opaque){
155 VideoBitrateCallbackData *data = static_cast<VideoBitrateCallbackData *>(opaque);
156 if(suboption)
157 return;
158
159 Settings *settings = opt.getSettings();
160 std::string mod = settings->getOption("video.compress").getValue();
161 std::string codec = settings->getOption("video.compress." + mod + ".codec").getValue();
162
163 bool enableEdit = false;
164 QString toolTip;
165 QString qualityLabel;
166 QString placeholder;
167
168 for(const auto& compMod : data->availSettings->getVideoCompressModules()){
169 if(compMod.name == mod){
170 for(const auto& modOpt : compMod.opts){
171 if(modOpt.key == "quality"){
172 enableEdit = true;
173 toolTip = QString::fromStdString(modOpt.displayDesc);
174 qualityLabel = QString::fromStdString(modOpt.displayName);
175 placeholder = QString::fromStdString(modOpt.placeholder);
176 break;
177 }
178 }
179 }
180 }
181
182 data->lineEditUi->setOpt("video.compress." + mod + ".quality");
183 data->lineEditUi->setEnabled(enableEdit);
184 data->lineEditUi->setToolTip(toolTip);
186 if(data->label){
187 data->label->setEnabled(enableEdit);
188 data->label->setToolTip(toolTip);
189 if(!qualityLabel.isEmpty())
190 data->label->setText(qualityLabel);
191 }
192}
const std::vector< CompressModule > & getVideoCompressModules() const
const std::vector< Codec > & getVideoCompressCodecs() const
const std::vector< Device > & getDevices(SettingType type) const
const std::vector< std::string > & getAvailableSettings(SettingType type) const
void setToolTip(const QString &toolTip)
void setEnabled(bool enabled)
void setPlaceholder(const QString &placeholder)
std::string getValue() const
Definition settings.cpp:26
Settings * getSettings()
Definition settings.cpp:129
const Option & getOption(const std::string &opt) const
Definition settings.cpp:384
void setOpt(const std::string &opt)
Definition widget_ui.cpp:15
enum openssl_mode mode
std::vector< SettingValue > opts
std::string name
const AvailableSettings * availSettings
std::string name
std::vector< encoder > encoders
std::string name
Definition hd-rum.c:27
const char * placeholder
Definition cineform.cpp:128
std::vector< SettingItem > getVideoDisplay(AvailableSettings *availSettings)
std::vector< SettingItem > getCodecEncoders(const Codec &codec)
std::vector< SettingItem > getVideoSrc(AvailableSettings *availSettings)
Definition video_opts.cpp:8
std::vector< SettingItem > getVideoModes(AvailableSettings *availSettings)
void videoCompressBitrateCallback(Option &opt, bool suboption, void *opaque)
std::vector< SettingItem > getVideoCompress(AvailableSettings *availSettings)