MythTV master
dtvconfparserhelpers.cpp
Go to the documentation of this file.
1
2#include <QMutex>
3#include <QMap>
4
7
8bool DTVParamHelper::ParseParam(const QString &symbol, int &value,
9 const DTVParamHelperVec &table)
10{
11 auto it = std::find_if(table.cbegin(), table.cend(),
12 [symbol](const auto& item) -> bool
13 {return item.symbol == symbol;});
14 if (it == table.cend())
15 return false;
16
17 value = it->value;
18 return true;
19}
20
21QString DTVParamHelper::toString(const DTVParamStringVec &strings, int index)
22{
23 if ((index < 0) || ((uint)index >= strings.size()))
24 {
25 LOG(VB_GENERAL, LOG_ERR,
26 "DTVParamHelper::toString() index out of bounds");
27
28 return {};
29 }
30
31 return QString::fromStdString(strings[index]);
32}
33
34//
35// === Tuner Type ===
36//
37
38const int DTVTunerType::kTunerTypeDVBS1 = 0x0000;
39const int DTVTunerType::kTunerTypeDVBS2 = 0x0020;
40const int DTVTunerType::kTunerTypeDVBC = 0x0001;
41const int DTVTunerType::kTunerTypeDVBT = 0x0002;
42const int DTVTunerType::kTunerTypeDVBT2 = 0x0022;
43const int DTVTunerType::kTunerTypeATSC = 0x0003;
44const int DTVTunerType::kTunerTypeASI = 0x1000;
45const int DTVTunerType::kTunerTypeOCUR = 0x2000;
46const int DTVTunerType::kTunerTypeIPTV = 0x4000;
47const int DTVTunerType::kTunerTypeUnknown = 0x80000000;
48
50static QMap<int,QString> dtv_tt_canonical_str;
52{
53 QMutexLocker locker(&dtv_tt_canonical_str_lock);
63}
64
65QString DTVTunerType::toString(int _value)
66{
67 QMutexLocker locker(&dtv_tt_canonical_str_lock);
68 QMap<int,QString>::const_iterator it = dtv_tt_canonical_str.constFind(_value);
69 if (it != dtv_tt_canonical_str.constEnd())
70 return *it;
72}
73
75{
76 { "QPSK", kTunerTypeDVBS1 },
77 { "QAM", kTunerTypeDVBC },
78 { "OFDM", kTunerTypeDVBT },
79 { "DVB_T2", kTunerTypeDVBT2 },
80 { "ATSC", kTunerTypeATSC },
81 { "DVB_S2", kTunerTypeDVBS2 },
82 { "ASI", kTunerTypeASI },
83 { "OCUR", kTunerTypeOCUR },
84 { "UNKNOWN", kTunerTypeUnknown },
85 { nullptr, kTunerTypeUnknown },
86};
87
88//
89// === Inversion ===
90//
91
93{
94 { "INVERSION_AUTO", kInversionAuto },
95 { "INVERSION_OFF", kInversionOff },
96 { "INVERSION_ON", kInversionOn },
97 { nullptr, kInversionAuto },
98};
99
101{
102 { "999", kInversionAuto },
103 { "0", kInversionOff },
104 { "1", kInversionOn },
105 { nullptr, kInversionAuto },
106};
107
109{
110 { "a", kInversionAuto },
111 { "0", kInversionOff },
112 { "1", kInversionOn },
113 { nullptr, kInversionAuto },
114};
115
117{
118 "0",
119 "1",
120 "a"
121};
122
123//
124// === Bandwidth ===
125//
126// Database update needed for the 10MHz and 1.712MHz because
127// dtvmultiplex:bandwidth is now only one character.
128//
129
131{
132 { "BANDWIDTH_AUTO", kBandwidthAuto },
133 { "BANDWIDTH_8_MHZ", kBandwidth8MHz },
134 { "BANDWIDTH_7_MHZ", kBandwidth7MHz },
135 { "BANDWIDTH_6_MHZ", kBandwidth6MHz },
136 { "BANDWIDTH_5_MHZ", kBandwidth5MHz },
137 { "BANDWIDTH_10_MHZ", kBandwidth10MHz },
138 { "BANDWIDTH_1_712_MHZ", kBandwidth1712kHz },
139 { nullptr, kBandwidthAuto },
140};
141
143{
144 { "999", kBandwidthAuto },
145 { "8", kBandwidth8MHz },
146 { "7", kBandwidth7MHz },
147 { "6", kBandwidth6MHz },
148 { "5", kBandwidth5MHz },
149 { "10", kBandwidth10MHz },
150 { "1712", kBandwidth1712kHz },
151 { nullptr, kBandwidthAuto },
152};
153
155{
156 { "a", kBandwidthAuto },
157 { "8", kBandwidth8MHz },
158 { "7", kBandwidth7MHz },
159 { "6", kBandwidth6MHz },
160 { "5", kBandwidth5MHz },
161 { "10", kBandwidth10MHz },
162 { "1712", kBandwidth1712kHz },
163 { nullptr, kBandwidthAuto },
164};
165
167{
168 "8",
169 "7",
170 "6",
171 "a",
172 "5",
173 "10",
174 "1712",
175};
176
177//
178// === Forward Error Correction / Code Rate ===
179//
180
182{
183 { "FEC_AUTO", kFECAuto },
184 { "FEC_1_2", kFEC_1_2 },
185 { "FEC_2_3", kFEC_2_3 },
186 { "FEC_3_4", kFEC_3_4 },
187 { "FEC_4_5", kFEC_4_5 },
188 { "FEC_5_6", kFEC_5_6 },
189 { "FEC_6_7", kFEC_6_7 },
190 { "FEC_7_8", kFEC_7_8 },
191 { "FEC_8_9", kFEC_8_9 },
192 { "FEC_NONE", kFECNone },
193 { "FEC_3_5", kFEC_3_5 },
194 { "FEC_9_10", kFEC_9_10 },
195 { nullptr, kFECAuto },
196};
197
199{
200 { "999", kFECAuto },
201 { "12", kFEC_1_2 },
202 { "23", kFEC_2_3 },
203 { "34", kFEC_3_4 },
204 { "45", kFEC_4_5 },
205 { "56", kFEC_5_6 },
206 { "67", kFEC_6_7 },
207 { "78", kFEC_7_8 },
208 { "89", kFEC_8_9 },
209 { "0", kFECNone },
210 { "35", kFEC_3_5 },
211 { "910", kFEC_9_10 },
212 { nullptr, kFECAuto }
213};
214
216{
217 { "auto", kFECAuto },
218 { "1/2", kFEC_1_2 },
219 { "2/3", kFEC_2_3 },
220 { "3/4", kFEC_3_4 },
221 { "4/5", kFEC_4_5 },
222 { "5/6", kFEC_5_6 },
223 { "6/7", kFEC_6_7 },
224 { "7/8", kFEC_7_8 },
225 { "8/9", kFEC_8_9 },
226 { "none", kFECNone },
227 { "3/5", kFEC_3_5 },
228 { "9/10", kFEC_9_10 },
229 { nullptr, kFECAuto }
230};
231
233{
234 "none",
235 "1/2",
236 "2/3",
237 "3/4",
238 "4/5",
239 "5/6",
240 "6/7",
241 "7/8",
242 "8/9",
243 "auto",
244 "3/5",
245 "9/10",
246};
247
248//
249// === Modulation ===
250//
251
253{
254 { "QAM_AUTO", kModulationQAMAuto },
255 { "QAM_16", kModulationQAM16 },
256 { "QAM_32", kModulationQAM32 },
257 { "QAM_64", kModulationQAM64 },
258 { "QAM_128", kModulationQAM128 },
259 { "QAM_256", kModulationQAM256 },
260 { "QPSK", kModulationQPSK },
261 { "8VSB", kModulation8VSB },
262 { "16VSB", kModulation16VSB },
263 { "8PSK", kModulation8PSK },
264 { "16APSK", kModulation16APSK },
265 { "32APSK", kModulation32APSK },
266 { "DQPSK", kModulationDQPSK },
267 { "16PSK", kModulationInvalid },
268 { "2VSB", kModulationInvalid },
269 { "4VSB", kModulationInvalid },
270 { "BPSK", kModulationInvalid },
271 { "analog", kModulationAnalog },
272 { nullptr, kModulationQAMAuto },
273};
274
276{
277 { "999", kModulationQAMAuto },
278 { "16", kModulationQAM16 },
279 { "32", kModulationQAM32 },
280 { "64", kModulationQAM64 },
281 { "128", kModulationQAM128 },
282 { "256", kModulationQAM256 },
283 { "2", kModulationQPSK },
284 { "5", kModulation8PSK },
285 { "6", kModulation16APSK },
286 { "7", kModulation32APSK },
287 { "10", kModulation8VSB },
288 { "11", kModulation16VSB },
289 { nullptr, kModulationQAMAuto },
290};
291
293{
294 { "auto", kModulationQAMAuto },
295 { "qam_16", kModulationQAM16 },
296 { "qam_32", kModulationQAM32 },
297 { "qam_64", kModulationQAM64 },
298 { "qam_128", kModulationQAM128 },
299 { "qam_256", kModulationQAM256 },
300 { "qpsk", kModulationQPSK },
301 { "8vsb", kModulation8VSB },
302 { "16vsb", kModulation16VSB },
303 { "8psk", kModulation8PSK },
304 { "16apsk", kModulation16APSK },
305 { "32apsk", kModulation32APSK },
306 { "dqpsk", kModulationDQPSK },
307 // alternates
308 { "a", kModulationQAMAuto },
309 { "qam_auto", kModulationQAMAuto },
310 { "qam-16", kModulationQAM16 },
311 { "qam-32", kModulationQAM32 },
312 { "qam-64", kModulationQAM64 },
313 { "qam-128", kModulationQAM128 },
314 { "qam-256", kModulationQAM256 },
315 // qpsk, no alternative
316 { "8-vsb", kModulation8VSB },
317 { "16-vsb", kModulation16VSB },
318 // bpsk, no alternative
319 { "16-apsk", kModulation16APSK },
320 { "32-apsk", kModulation32APSK },
321 { "8-psk", kModulation8PSK },
322 // removed modulations and alternatives
323 { "bpsk", kModulationInvalid },
324 { "2vsb", kModulationInvalid },
325 { "2-vsb", kModulationInvalid },
326 { "4vsb", kModulationInvalid },
327 { "4-vsb", kModulationInvalid },
328 { "16psk", kModulationInvalid },
329 { "16-psk", kModulationInvalid },
330 { nullptr, kModulationQAMAuto },
331};
332
334{
335 "qpsk",
336 "qam_16",
337 "qam_32",
338 "qam_64",
339 "qam_128",
340 "qam_256",
341 "auto",
342 "8vsb",
343 "16vsb",
344 "8psk",
345 "16apsk",
346 "32apsk",
347 "dqpsk"
348};
349
350//
351// === Transmission Mode ===
352//
353// Database update needed for the 16k and 32k modes because
354// dtvmultiplex:transmission_mode is now only one character.
355//
357{
358 { "TRANSMISSION_MODE_1K", kTransmissionMode1K },
359 { "TRANSMISSION_MODE_2K", kTransmissionMode2K },
360 { "TRANSMISSION_MODE_4K", kTransmissionMode4K },
361 { "TRANSMISSION_MODE_8K", kTransmissionMode8K },
362 { "TRANSMISSION_MODE_16K", kTransmissionMode16K },
363 { "TRANSMISSION_MODE_32K", kTransmissionMode32K },
364 { "TRANSMISSION_MODE_AUTO", kTransmissionModeAuto },
365 { nullptr, kTransmissionModeAuto },
366};
367
369{
370 { "999", kTransmissionModeAuto },
371 { "1", kTransmissionMode1K },
372 { "2", kTransmissionMode2K },
373 { "4", kTransmissionMode4K },
374 { "8", kTransmissionMode8K },
375 { "16", kTransmissionMode16K },
376 { "32", kTransmissionMode32K },
377 { nullptr, kTransmissionModeAuto },
378};
379
381{
382 { "a", kTransmissionModeAuto },
383 { "1", kTransmissionMode1K },
384 { "2", kTransmissionMode2K },
385 { "4", kTransmissionMode4K },
386 { "8", kTransmissionMode8K },
387 { "16", kTransmissionMode16K },
388 { "32", kTransmissionMode32K },
389 { nullptr, kTransmissionModeAuto },
390};
391
393{
394 "2",
395 "8",
396 "a",
397 "4",
398 "1",
399 "16",
400 "32"
401};
402
403//
404// === Guard Interval ===
405//
406
408{
409 { "GUARD_INTERVAL_1_32", kGuardInterval_1_32 },
410 { "GUARD_INTERVAL_1_16", kGuardInterval_1_16 },
411 { "GUARD_INTERVAL_1_8", kGuardInterval_1_8 },
412 { "GUARD_INTERVAL_1_4", kGuardInterval_1_4 },
413 { "GUARD_INTERVAL_AUTO", kGuardIntervalAuto },
414 { "GUARD_INTERVAL_1_128", kGuardInterval_1_128 },
415 { "GUARD_INTERVAL_19_128", kGuardInterval_19_128 },
416 { "GUARD_INTERVAL_19_256", kGuardInterval_19_256 },
417 { nullptr, kGuardIntervalAuto },
418};
419
421{
422 { "999", kGuardIntervalAuto },
423 { "32", kGuardInterval_1_32 },
424 { "16", kGuardInterval_1_16 },
425 { "8", kGuardInterval_1_8 },
426 { "4", kGuardInterval_1_4 },
427 { "128", kGuardInterval_1_128 },
428 { "19128", kGuardInterval_19_128 },
429 { "19256", kGuardInterval_19_256 },
430 { nullptr, kGuardIntervalAuto },
431};
432
434{
435 { "auto", kGuardIntervalAuto },
436 { "1/32", kGuardInterval_1_32 },
437 { "1/16", kGuardInterval_1_16 },
438 { "1/8", kGuardInterval_1_8 },
439 { "1/4", kGuardInterval_1_4 },
440 { "1/128", kGuardInterval_1_128 },
441 { "19/128", kGuardInterval_19_128 },
442 { "19/256", kGuardInterval_19_256 },
443 { nullptr, kGuardIntervalAuto },
444};
445
447{
448 "1/32",
449 "1/16",
450 "1/8",
451 "1/4",
452 "auto",
453 "1/128",
454 "19/128",
455 "19/256",
456};
457
458//
459// === Hierarchy ===
460//
461
463{
464 { "HIERARCHY_NONE", kHierarchyNone },
465 { "HIERARCHY_1", kHierarchy1 },
466 { "HIERARCHY_2", kHierarchy2 },
467 { "HIERARCHY_4", kHierarchy4 },
468 { "HIERARCHY_AUTO", kHierarchyAuto },
469 { nullptr, kHierarchyAuto },
470};
471
473{
474 { "999", kHierarchyAuto },
475 { "0", kHierarchyNone },
476 { "1", kHierarchy1 },
477 { "2", kHierarchy2 },
478 { "4", kHierarchy4 },
479 { nullptr, kHierarchyAuto },
480};
481
483{
484 { "n", kHierarchyNone },
485 { "1", kHierarchy1 },
486 { "2", kHierarchy2 },
487 { "4", kHierarchy4 },
488 { "a", kHierarchyAuto },
489 { nullptr, kHierarchyAuto },
490};
491
493{
494 "n",
495 "1",
496 "2",
497 "4",
498 "a"
499};
500
501//
502// === Polarity ===
503//
504
506{
507 { "v", kPolarityVertical },
508 { "h", kPolarityHorizontal },
509 { "r", kPolarityRight },
510 { "l", kPolarityLeft },
511 { nullptr, kPolarityVertical },
512};
513
515{
516 "v",
517 "h",
518 "r",
519 "l"
520};
521
522//
523// === Modulation System ===
524//
525
527{
528 { "SYS_UNDEFINED", kModulationSystem_UNDEFINED },
529 { "SYS_DVBC_ANNEX_A", kModulationSystem_DVBC_ANNEX_A },
530 { "SYS_DVBC_ANNEX_B", kModulationSystem_DVBC_ANNEX_B },
531 { "SYS_DVBT", kModulationSystem_DVBT },
532 { "SYS_DVBT2", kModulationSystem_DVBT2 },
533 { "SYS_DSS", kModulationSystem_DSS },
534 { "SYS_DVBS", kModulationSystem_DVBS },
535 { "SYS_DVBS2", kModulationSystem_DVBS2 },
536 { "SYS_DVBH", kModulationSystem_DVBH },
537 { "SYS_ISDBT", kModulationSystem_ISDBT },
538 { "SYS_ISDBS", kModulationSystem_ISDBS },
539 { "SYS_ISDBC", kModulationSystem_ISDBC },
540 { "SYS_ATSC", kModulationSystem_ATSC },
541 { "SYS_ATSCMH", kModulationSystem_ATSCMH },
542 { "SYS_DTMB", kModulationSystem_DTMB },
543 { "SYS_CMMB", kModulationSystem_CMMB },
544 { "SYS_DAB", kModulationSystem_DAB },
545 { "SYS_TURBO", kModulationSystem_TURBO },
546 { "SYS_DVBC_ANNEX_C", kModulationSystem_DVBC_ANNEX_C },
547 { nullptr, kModulationSystem_UNDEFINED },
548};
549
551{
552 { "0", kModulationSystem_DVBS },
553 { "1", kModulationSystem_DVBS2 },
554 { nullptr, kModulationSystem_UNDEFINED },
555};
556
558{
559 { "UNDEFINED", kModulationSystem_UNDEFINED },
560 { "DVB-C/A", kModulationSystem_DVBC_ANNEX_A },
561 { "DVB-C/B", kModulationSystem_DVBC_ANNEX_B },
562 { "DVB-T", kModulationSystem_DVBT },
563 { "DSS", kModulationSystem_DSS },
564 { "DVB-S", kModulationSystem_DVBS },
565 { "DVB-S2", kModulationSystem_DVBS2 },
566 { "DVBH", kModulationSystem_DVBH },
567 { "ISDBT", kModulationSystem_ISDBT },
568 { "ISDBS", kModulationSystem_ISDBS },
569 { "ISDBC", kModulationSystem_ISDBC },
570 { "ATSC", kModulationSystem_ATSC },
571 { "ATSCMH", kModulationSystem_ATSCMH },
572 { "DTMB", kModulationSystem_DTMB },
573 { "CMMB", kModulationSystem_CMMB },
574 { "DAB", kModulationSystem_DAB },
575 { "DVB-T2", kModulationSystem_DVBT2 },
576 { "TURBO", kModulationSystem_TURBO },
577 { "DVB-C/C", kModulationSystem_DVBC_ANNEX_C },
578 { nullptr, kModulationSystem_UNDEFINED },
579};
580
582{
583 "UNDEFINED",
584 "DVB-C/A",
585 "DVB-C/B",
586 "DVB-T",
587 "DSS",
588 "DVB-S",
589 "DVB-S2",
590 "DVBH",
591 "ISDBT",
592 "ISDBS",
593 "ISDBC",
594 "ATSC",
595 "ATSCMH",
596 "DTMB",
597 "CMMB",
598 "DAB",
599 "DVB-T2",
600 "TURBO",
601 "DVB-C/C",
602};
603
604//
605// === Rolloff ===
606//
607
609{
610 { "ROLLOFF_35", kRollOff_35 },
611 { "ROLLOFF_20", kRollOff_20 },
612 { "ROLLOFF_25", kRollOff_25 },
613 { "ROLLOFF_AUTO", kRollOff_Auto },
614 { nullptr, kRollOff_35 },
615};
616
618{
619 { "35", kRollOff_35 },
620 { "20", kRollOff_20 },
621 { "25", kRollOff_25 },
622 { "0", kRollOff_Auto },
623 { nullptr, kRollOff_35 },
624};
625
627{
628 { "0.35", kRollOff_35 },
629 { "0.20", kRollOff_20 },
630 { "0.25", kRollOff_25 },
631 { "auto", kRollOff_Auto },
632 { nullptr, kRollOff_35 },
633};
634
636{
637 "0.35",
638 "0.20",
639 "0.25",
640 "auto",
641};
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kVdrTable
static const DTVParamStringVec kParseStrings
kBandwidth8MHz
static const DTVParamHelperVec kParseTable
static const DTVParamStringVec kParseStrings
kFECNone
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kParseTable
static const DTVParamHelperVec kVdrTable
static const DTVParamStringVec kParseStrings
kGuardInterval_1_32
static const DTVParamHelperVec kParseTable
static const DTVParamHelperVec kVdrTable
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kParseTable
static const DTVParamStringVec kParseStrings
kHierarchyNone
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kVdrTable
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kVdrTable
static const DTVParamStringVec kParseStrings
kInversionOff
static const DTVParamHelperVec kParseTable
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kVdrTable
static const DTVParamHelperVec kParseTable
static const DTVParamStringVec kParseStrings
kModulationSystem_UNDEFINED
static const DTVParamHelperVec kVdrTable
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kParseTable
static const DTVParamStringVec kParseStrings
kModulationQPSK,
static bool ParseParam(const QString &symbol, int &value, const DTVParamHelperVec &table)
static QString toString(const DTVParamStringVec &strings, int index)
static const DTVParamHelperVec kParseTable
static const DTVParamStringVec kParseStrings
kPolarityVertical
static const DTVParamHelperVec kParseTable
static const DTVParamHelperVec kVdrTable
static const DTVParamStringVec kParseStrings
kRollOff_35
static const DTVParamHelperVec kConfTable
static const DTVParamHelperVec kVdrTable
static const DTVParamHelperVec kConfTable
static const DTVParamStringVec kParseStrings
kTransmissionMode2K
static const DTVParamHelperVec kParseTable
static const int kTunerTypeOCUR
static const int kTunerTypeASI
static const int kTunerTypeDVBS2
QString toString() const
static const int kTunerTypeDVBT
static const int kTunerTypeUnknown
static void initStr(void)
static const int kTunerTypeDVBC
static const int kTunerTypeDVBS1
static const int kTunerTypeDVBT2
static const int kTunerTypeATSC
static const DTVParamHelperVec kParseTable
static const int kTunerTypeIPTV
static QMap< int, QString > dtv_tt_canonical_str
static QMutex dtv_tt_canonical_str_lock
std::vector< DTVParamHelperStruct > DTVParamHelperVec
std::vector< std::string > DTVParamStringVec
unsigned int uint
Definition: freesurround.h:24
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39