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