MythTV  master
dtvmultiplex.cpp
Go to the documentation of this file.
1 // MythTV headers
2 #include "dtvmultiplex.h"
3 
4 #include "mpeg/dvbdescriptors.h"
5 #include "mythdb.h"
6 #include "mythlogging.h"
7 #include "cardutil.h"
8 #include <utility>
9 
10 #define LOC QString("DTVMux: ")
11 
13 {
14  return ((m_frequency == m.m_frequency) &&
15  (m_modulation == m.m_modulation) &&
16  (m_inversion == m.m_inversion) &&
17  (m_bandwidth == m.m_bandwidth) &&
18  (m_hpCodeRate == m.m_hpCodeRate) &&
19  (m_lpCodeRate == m.m_lpCodeRate) &&
20  (m_transMode == m.m_transMode) &&
22  (m_fec == m.m_fec) &&
23  (m_modSys == m.m_modSys) &&
24  (m_rolloff == m.m_rolloff) &&
25  (m_polarity == m.m_polarity) &&
26  (m_hierarchy == m.m_hierarchy) &&
28  );
29 }
30 
32 // Gets
33 
34 QString DTVMultiplex::toString() const
35 {
36  QString ret = QString("%1 %2 %3 ")
38 
39  ret += QString("%1 %2 %3 %4 %5 %6 %7")
43  .arg(m_polarity.toString());
44  ret += QString(" fec: %1 msys: %2 rolloff: %3")
45  .arg(m_fec.toString()).arg(m_modSys.toString()).arg(m_rolloff.toString());
46 
47  return ret;
48 }
49 
51  uint freq_range, bool fuzzy) const
52 {
53  if ((m_frequency + freq_range < other.m_frequency ) ||
54  (m_frequency > other.m_frequency + freq_range))
55  {
56  return false;
57  }
58 
60  {
61  if (fuzzy)
62  {
63  return
65  (m_symbolRate == other.m_symbolRate) &&
66  m_fec.IsCompatible(other.m_fec) &&
68  }
69  return
70  (m_inversion == other.m_inversion) &&
71  (m_symbolRate == other.m_symbolRate) &&
72  (m_fec == other.m_fec) &&
73  (m_modulation == other.m_modulation);
74  }
75 
78  {
79  if (fuzzy)
80  {
81  return
91  }
92  return
93  (m_inversion == other.m_inversion) &&
94  (m_bandwidth == other.m_bandwidth) &&
95  (m_hpCodeRate == other.m_hpCodeRate) &&
96  (m_lpCodeRate == other.m_lpCodeRate) &&
97  (m_modulation == other.m_modulation) &&
98  (m_guardInterval == other.m_guardInterval) &&
99  (m_transMode == other.m_transMode) &&
100  (m_hierarchy == other.m_hierarchy) &&
101  (m_modSys == other.m_modSys);
102  }
103 
105  {
106  if (fuzzy)
107  return m_modulation.IsCompatible(other.m_modulation);
108  return (m_modulation == other.m_modulation);
109  }
110 
113  {
114  bool ret =
115  (m_symbolRate == other.m_symbolRate) &&
116  (m_polarity == other.m_polarity) &&
117  (m_modSys == other.m_modSys);
118 
119  if (fuzzy)
120  {
121  return ret &&
123  m_fec.IsCompatible(other.m_fec) &&
125  }
126  return ret &&
127  (m_inversion == other.m_inversion) &&
128  (m_fec == other.m_fec) &&
129  (m_rolloff == other.m_rolloff);
130  }
131 
133  {
134  return (m_iptvTuning == other.m_iptvTuning);
135  }
136 
137  return false;
138 }
139 
141 // Parsers
142 
143 bool DTVMultiplex::ParseATSC(const QString &_frequency,
144  const QString &_modulation)
145 {
146  bool ok = true;
147  m_frequency = _frequency.toULongLong(&ok);
148  if (!ok)
149  {
150  LOG(VB_GENERAL, LOG_ERR, LOC +
151  QString("Failed to parse ATSC frequency %1").arg(_frequency));
152  return false;
153  }
154 
155  ok = m_modulation.Parse(_modulation);
156  if (!ok)
157  {
158  LOG(VB_GENERAL, LOG_ERR, LOC +
159  QString("Failed to parse ATSC modulation %1").arg(_modulation));
160  }
161  return ok;
162 }
163 
165  const QString &_frequency, const QString &_inversion,
166  const QString &_bandwidth, const QString &_coderate_hp,
167  const QString &_coderate_lp, const QString &_modulation,
168  const QString &_trans_mode, const QString &_guard_interval,
169  const QString &_hierarchy)
170 {
171  bool ok = m_inversion.Parse(_inversion);
172  if (!ok)
173  {
174  LOG(VB_GENERAL, LOG_WARNING, LOC +
175  QString("Invalid inversion parameter '%1', falling back to 'auto'.")
176  .arg(_inversion));
177  ok = true;
178  }
179 
180  ok &= m_modSys.Parse("DVB-T");
181  ok &= m_bandwidth.Parse(_bandwidth);
182  ok &= m_hpCodeRate.Parse(_coderate_hp);
183  ok &= m_lpCodeRate.Parse(_coderate_lp);
184  ok &= m_modulation.Parse(_modulation);
185  ok &= m_transMode.Parse(_trans_mode);
186  ok &= m_hierarchy.Parse(_hierarchy);
187  ok &= m_guardInterval.Parse(_guard_interval);
188  if (ok)
189  m_frequency = _frequency.toInt(&ok);
190 
191  return ok;
192 }
193 
195  const QString &_frequency, const QString &_inversion,
196  const QString &_symbol_rate, const QString &_fec_inner,
197  const QString &_modulation, const QString &_polarity)
198 {
199  bool ok = m_inversion.Parse(_inversion);
200  if (!ok)
201  {
202  LOG(VB_GENERAL, LOG_WARNING, LOC +
203  QString("Invalid inversion parameter '%1', falling back to 'auto'.")
204  .arg(_inversion));
205 
206  ok = true;
207  }
208 
209  m_symbolRate = _symbol_rate.toInt();
210  if (!m_symbolRate)
211  {
212  LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid symbol rate " +
213  QString("parameter '%1', aborting.").arg(_symbol_rate));
214 
215  return false;
216  }
217 
218  ok &= m_fec.Parse(_fec_inner);
219  ok &= m_modulation.Parse(_modulation);
220 
221  if (!_polarity.isEmpty())
222  m_polarity.Parse(_polarity.toLower());
223 
224  if (ok)
225  m_frequency = _frequency.toInt(&ok);
226 
227  return ok;
228 }
229 
231  const QString &_frequency, const QString &_inversion,
232  const QString &_symbol_rate, const QString &_fec_inner,
233  const QString &_modulation, const QString &_polarity)
234 {
235  bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
236  _fec_inner, _modulation, _polarity);
238  return ok;
239 }
240 
242  const QString &_frequency, const QString &_inversion,
243  const QString &_symbol_rate, const QString &_fec_inner,
244  const QString &_modulation, const QString &_polarity,
245  const QString &_mod_sys)
246 {
247  bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
248  _fec_inner, _modulation, _polarity);
249 
250  m_modSys.Parse(_mod_sys);
252  {
254  }
255 
256  LOG(VB_GENERAL, LOG_DEBUG, LOC +
257  QString("%1 ").arg(__FUNCTION__) +
258  QString("_mod_sys:%1 ok:%2 ").arg(_mod_sys).arg(ok) +
259  QString("m_mod_sys:%1 %2 ").arg(m_modSys).arg(m_modSys.toString()));
260 
264  {
265  LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-C modulation system " +
266  QString("parameter '%1', aborting.").arg(_mod_sys));
267  return false;
268  }
269 
270  return ok;
271 }
272 
274  const QString &_frequency, const QString &_inversion,
275  const QString &_symbol_rate, const QString &_fec_inner,
276  const QString &_modulation, const QString &_polarity,
277  const QString &_mod_sys, const QString &_rolloff)
278 {
279  bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
280  _fec_inner, _modulation, _polarity);
281 
282  if (!m_modSys.Parse(_mod_sys))
283  {
284  LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid DVB-S2 modulation system " +
285  QString("parameter '%1', aborting.").arg(_mod_sys));
286  return false;
287  }
288 
289  // For #10153, guess at modulation system based on modulation
291  {
295  }
296 
299  {
300  LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-S2 modulation system " +
301  QString("parameter '%1', aborting.").arg(_mod_sys));
302  return false;
303  }
304 
305  if (!_rolloff.isEmpty())
306  ok &= m_rolloff.Parse(_rolloff);
307 
308  return ok;
309 }
310 
312  const QString &_frequency, const QString &_inversion,
313  const QString &_bandwidth, const QString &_coderate_hp,
314  const QString &_coderate_lp, const QString &_modulation,
315  const QString &_trans_mode, const QString &_guard_interval,
316  const QString &_hierarchy, const QString &_mod_sys)
317 {
318  bool ok = ParseDVB_T(_frequency, _inversion, _bandwidth,
319  _coderate_hp, _coderate_lp, _modulation,
320  _trans_mode, _guard_interval, _hierarchy);
321 
322  QString l_mod_sys = _mod_sys;
323 
324  // Accept "0" for "DVB-T" and "1" for "DVB-T2"
325  if (_mod_sys == "1")
326  {
327  LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T2 modulation system " +
328  QString("parameter '%1', using DVB-T2.").arg(_mod_sys));
330  l_mod_sys = m_modSys.toString();
331  }
332  else if (_mod_sys == "0")
333  {
334  LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T modulation system " +
335  QString("parameter '%1', using DVB-T.").arg(_mod_sys));
337  l_mod_sys = m_modSys.toString();
338  }
339 
340  if (!m_modSys.Parse(l_mod_sys))
341  {
342  LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T/T2 modulation system " +
343  QString("parameter '%1', aborting.").arg(l_mod_sys));
344  return false;
345  }
346 
348  {
350  }
351 
354  {
355  LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-T2 modulation system " +
356  QString("parameter '%1', aborting.").arg(l_mod_sys));
357  return false;
358  }
359 
360  return ok;
361 }
362 
365  const QString& _frequency, const QString& _inversion, const QString& _symbolrate,
366  const QString& _fec, const QString& _polarity,
367  const QString& _hp_code_rate, const QString& _lp_code_rate, const QString& _ofdm_modulation,
368  const QString& _trans_mode, const QString& _guard_interval, const QString& _hierarchy,
369  const QString& _modulation, const QString& _bandwidth,
370  const QString& _mod_sys, const QString& _rolloff)
371 {
373  {
374  return ParseDVB_T(
375  _frequency, _inversion, _bandwidth,
376  _hp_code_rate, _lp_code_rate, _ofdm_modulation,
377  _trans_mode, _guard_interval, _hierarchy);
378  }
379 
381  {
382  return ParseDVB_C(
383  _frequency, _inversion, _symbolrate,
384  _fec, _modulation, _polarity,
385  _mod_sys);
386  }
387 
389  {
390  return ParseDVB_S(
391  _frequency, _inversion, _symbolrate,
392  _fec, _modulation, _polarity);
393  }
394 
396  {
397  return ParseDVB_S2(
398  _frequency, _inversion, _symbolrate,
399  _fec, _modulation, _polarity,
400  _mod_sys, _rolloff);
401  }
402 
404  {
405  return ParseDVB_T2(
406  _frequency, _inversion, _bandwidth,
407  _hp_code_rate, _lp_code_rate, _ofdm_modulation,
408  _trans_mode, _guard_interval, _hierarchy,
409  _mod_sys);
410  }
411 
413  {
414  return ParseATSC(_frequency, _modulation);
415  }
416 
417  LOG(VB_GENERAL, LOG_ERR, LOC +
418  QString("ParseTuningParams -- Unknown tuner type = 0x%1")
419  .arg(type,0,16,QChar('0')));
420 
421  return false;
422 }
423 
425 {
426  Clear();
427 
428  MSqlQuery query(MSqlQuery::InitCon());
429  query.prepare(
430  "SELECT frequency, inversion, symbolrate, "
431  " fec, polarity, "
432  " hp_code_rate, lp_code_rate, constellation, "
433  " transmission_mode, guard_interval, hierarchy, "
434  " modulation, bandwidth, sistandard, "
435  " mod_sys, rolloff "
436  "FROM dtv_multiplex "
437  "WHERE dtv_multiplex.mplexid = :MPLEXID");
438  query.bindValue(":MPLEXID", mplexid);
439 
440  if (!query.exec())
441  {
442  MythDB::DBError("DVBTuning::FillFromDB", query);
443  return false;
444  }
445 
446  if (!query.next())
447  {
448  LOG(VB_GENERAL, LOG_ERR, LOC +
449  QString("Could not find tuning parameters for mplex %1")
450  .arg(mplexid));
451 
452  return false;
453  }
454 
455  m_mplex = mplexid;
456  m_sistandard = query.value(13).toString();
457 
458  // Parse the query into our DVBTuning class
459  return ParseTuningParams(
460  type,
461  query.value(0).toString(), query.value(1).toString(),
462  query.value(2).toString(), query.value(3).toString(),
463  query.value(4).toString(), query.value(5).toString(),
464  query.value(6).toString(), query.value(7).toString(),
465  query.value(8).toString(), query.value(9).toString(),
466  query.value(10).toString(), query.value(11).toString(),
467  query.value(12).toString(), query.value(14).toString(),
468  query.value(15).toString());
469 }
470 
471 
473  const MPEGDescriptor &desc)
474 {
475  uint tag = desc.DescriptorTag();
476  m_sistandard = "dvb";
477 
478  switch (tag)
479  {
481  {
483 
485  {
486  return ParseDVB_T(
487  QString::number(cd.FrequencyHz()), "a",
491  cd.HierarchyString());
492  }
493 
495  {
496  return ParseDVB_T2(
497  QString::number(cd.FrequencyHz()), "a",
501  cd.HierarchyString(), "DVB-T");
502  }
503 
504  break;
505  }
507  {
508  const SatelliteDeliverySystemDescriptor cd(desc);
509 
511  {
512  if (cd.ModulationSystem())
513  {
514  LOG(VB_CHANSCAN, LOG_NOTICE, LOC +
515  "Ignoring DVB-S2 transponder with DVB-S card");
516  return false;
517  }
518 
519  return ParseDVB_S_and_C(
520  QString::number(cd.FrequencykHz()), "a",
521  QString::number(cd.SymbolRateHz()), cd.FECInnerString(),
522  cd.ModulationString(),
523  cd.PolarizationString());
524  }
525 
527  {
528  return ParseDVB_S2(
529  QString::number(cd.FrequencykHz()), "a",
530  QString::number(cd.SymbolRateHz()), cd.FECInnerString(),
531  cd.ModulationString(),
532  cd.PolarizationString(),
534  }
535 
536  break;
537  }
539  {
541  break;
542 
543  const CableDeliverySystemDescriptor cd(desc);
544 
545  return ParseDVB_C(
546  QString::number(cd.FrequencyHz()), "a",
547  QString::number(cd.SymbolRateHz()), cd.FECInnerString(),
548  cd.ModulationString(), QString(),
549  "DVB-C/A");
550  }
551  default:
552  LOG(VB_CHANSCAN, LOG_ERR, LOC +
553  "unknown delivery system descriptor");
554  return false;
555  }
556 
557  LOG(VB_CHANSCAN, LOG_ERR, LOC +
558  QString("Tuner type %1 does not match delivery system")
559  .arg(type.toString()));
560  return false;
561 }
562 
563 
566 
568 {
569  if (!DTVMultiplex::FillFromDB(type, mplexid))
570  return false;
571 
572  MSqlQuery query(MSqlQuery::InitCon());
573  query.prepare(
574  "SELECT c.mplexid, c.sourceid, c.chanid, "
575  " c.callsign, c.name, c.channum, "
576  " c.serviceid, c.atsc_major_chan, c.atsc_minor_chan, "
577  " c.useonairguide, c.visible, c.freqid, "
578  " c.icon, c.tvformat, c.xmltvid, "
579  " d.transportid, d.networkid, c.default_authority,"
580  " c.service_type "
581  "FROM channel AS c, dtv_multiplex AS d "
582  "WHERE c.deleted IS NULL AND "
583  " c.mplexid = :MPLEXID AND"
584  " c.mplexid = d.mplexid");
585  query.bindValue(":MPLEXID", mplexid);
586 
587  if (!query.exec())
588  {
589  MythDB::DBError("ScanDTVTransport::FillFromDB", query);
590  return false;
591  }
592 
593  while (query.next())
594  {
595  ChannelInsertInfo chan(
596  query.value(0).toUInt(), query.value(1).toUInt(),
597  query.value(2).toUInt(), query.value(3).toString(),
598  query.value(4).toString(), query.value(5).toString(),
599  query.value(6).toUInt(),
600  query.value(7).toUInt(), query.value(8).toUInt(),
601  query.value(9).toBool(), !query.value(10).toBool(),
602  false,
603  query.value(11).toString(), query.value(12).toString(),
604  query.value(13).toString(), query.value(14).toString(),
605  0, 0, 0,
606  query.value(15).toUInt(), query.value(16).toUInt(),
607  0,
608  QString(),
609  false, false, false, false,
610  false, false, false, false,
611  false, false, false, 0,
612  query.value(17).toString(), /* default_authority */
613  query.value(18).toUInt()); /* service_type */
614 
615  m_channels.push_back(chan);
616  }
617 
618  return true;
619 }
620 
622 {
623  uint transportid = 0;
624 
625  MSqlQuery query(MSqlQuery::InitCon());
626  query.prepare(
627  "INSERT INTO channelscan_dtv_multiplex "
628  " ( scanid, "
629  " mplexid, frequency, inversion, "
630  " symbolrate, fec, polarity, "
631  " hp_code_rate, lp_code_rate, modulation, "
632  " transmission_mode, guard_interval, hierarchy, "
633  " mod_sys, rolloff, "
634  " bandwidth, sistandard, tuner_type "
635  " ) "
636  "VALUES "
637  " ( :SCANID, "
638  " :MPLEXID, :FREQUENCY, :INVERSION, "
639  " :SYMBOLRATE, :FEC, :POLARITY, "
640  " :HP_CODE_RATE, :LP_CODE_RATE, :MODULATION, "
641  " :TRANSMISSION_MODE, :GUARD_INTERVAL, :HIERARCHY, "
642  " :MOD_SYS, :ROLLOFF, "
643  " :BANDWIDTH, :SISTANDARD, :TUNER_TYPE "
644  " );");
645 
646  query.bindValue(":SCANID", scanid);
647  query.bindValue(":MPLEXID", m_mplex);
648  query.bindValue(":FREQUENCY", QString::number(m_frequency));
649  query.bindValue(":INVERSION", m_inversion.toString());
650  query.bindValue(":SYMBOLRATE", QString::number(m_symbolRate));
651  query.bindValue(":FEC", m_fec.toString());
652  query.bindValue(":POLARITY", m_polarity.toString());
653  query.bindValue(":HP_CODE_RATE", m_hpCodeRate.toString());
654  query.bindValue(":LP_CODE_RATE", m_lpCodeRate.toString());
655  query.bindValue(":MODULATION", m_modulation.toString());
656  query.bindValue(":TRANSMISSION_MODE", m_transMode.toString());
657  query.bindValue(":GUARD_INTERVAL", m_guardInterval.toString());
658  query.bindValue(":HIERARCHY", m_hierarchy.toString());
659  query.bindValue(":MOD_SYS", m_modSys.toString());
660  query.bindValue(":ROLLOFF", m_rolloff.toString());
661  query.bindValue(":BANDWIDTH", m_bandwidth.toString());
662  query.bindValue(":SISTANDARD", m_sistandard);
663  query.bindValue(":TUNER_TYPE", (uint)m_tuner_type);
664 
665  if (!query.exec())
666  {
667  MythDB::DBError("ScanDTVTransport::SaveScan 1", query);
668  return transportid;
669  }
670 
671  query.prepare("SELECT MAX(transportid) FROM channelscan_dtv_multiplex");
672  if (!query.exec())
673  MythDB::DBError("ScanDTVTransport::SaveScan 2", query);
674  else if (query.next())
675  transportid = query.value(0).toUInt();
676 
677  if (!transportid)
678  return transportid;
679 
680  for (const auto & channel : m_channels)
681  channel.SaveScan(scanid, transportid);
682 
683  return transportid;
684 }
685 
688  const QString& _frequency, const QString& _inversion, const QString& _symbolrate,
689  const QString& _fec, const QString& _polarity,
690  const QString& _hp_code_rate, const QString& _lp_code_rate, const QString& _ofdm_modulation,
691  const QString& _trans_mode, const QString& _guard_interval, const QString& _hierarchy,
692  const QString& _modulation, const QString& _bandwidth, const QString& _mod_sys,
693  const QString& _rolloff)
694 {
695  m_tuner_type = type;
696 
698  type,
699  _frequency, _inversion, _symbolrate,
700  _fec, _polarity,
701  _hp_code_rate, _lp_code_rate, _ofdm_modulation,
702  _trans_mode, _guard_interval, _hierarchy,
703  _modulation, _bandwidth, _mod_sys,
704  _rolloff);
705 }
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
Definition: mythdbcon.cpp:783
bool IsCompatible(const DTVGuardInterval &other) const
bool Parse(const QString &_value)
DTVGuardInterval m_guardInterval
Definition: dtvmultiplex.h:102
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
Definition: mythdbcon.cpp:864
bool ParseDVB_C(const QString &frequency, const QString &inversion, const QString &symbol_rate, const QString &fec_inner, const QString &modulation, const QString &polarity, const QString &mod_sys)
bool Parse(const QString &_value)
bool operator==(const DTVMultiplex &m) const
uint64_t m_symbolRate
Definition: dtvmultiplex.h:95
static const int kTunerTypeDVBT
DTVBandwidth m_bandwidth
Definition: dtvmultiplex.h:97
static const int kTunerTypeATSC
DTVHierarchy m_hierarchy
Definition: dtvmultiplex.h:103
DTVPolarity m_polarity
Definition: dtvmultiplex.h:104
bool Parse(const QString &_value)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:125
bool IsCompatible(const DTVHierarchy &other) const
bool IsCompatible(const DTVTransmitMode &other) const
IPTVTuningData m_iptvTuning
Definition: dtvmultiplex.h:112
QString FECInnerString(void) const
uint DescriptorTag(void) const
bool Parse(const QString &_value)
QString toString() const
DTVInversion m_inversion
Definition: dtvmultiplex.h:96
static const int kTunerTypeDVBS1
QString toString() const
bool Parse(const QString &_value)
bool ParseDVB_T(const QString &frequency, const QString &inversion, const QString &bandwidth, const QString &coderate_hp, const QString &coderate_lp, const QString &modulation, const QString &trans_mode, const QString &guard_interval, const QString &hierarchy)
DTVTunerType m_tuner_type
Definition: dtvmultiplex.h:136
bool ParseATSC(const QString &frequency, const QString &modulation)
QString toString() const
ChannelInsertInfoList m_channels
Definition: dtvmultiplex.h:138
DTVCodeRate m_fec
Inner Forward Error Correction rate.
Definition: dtvmultiplex.h:105
bool ParseDVB_S2(const QString &frequency, const QString &inversion, const QString &symbol_rate, const QString &fec_inner, const QString &modulation, const QString &polarity, const QString &mod_sys, const QString &rolloff)
QVariant value(int i) const
Definition: mythdbcon.h:198
QString toString() const
bool FillFromDeliverySystemDesc(DTVTunerType type, const MPEGDescriptor &desc)
bool Parse(const QString &_value)
static const int kTunerTypeDVBS2
DTVModulation m_modulation
Definition: dtvmultiplex.h:100
QString toString() const
static const int kTunerTypeDVBT2
bool IsEqual(DTVTunerType type, const DTVMultiplex &other, uint freq_range=0, bool fuzzy=false) const
static const int kTunerTypeDVBC
bool Parse(const QString &_value)
uint SaveScan(uint scanid) const
bool ParseDVB_T2(const QString &frequency, const QString &inversion, const QString &bandwidth, const QString &coderate_hp, const QString &coderate_lp, const QString &modulation, const QString &trans_mode, const QString &guard_interval, const QString &hierarchy, const QString &mod_sys)
QString toString() const
bool IsCompatible(const DTVCodeRate &other) const
QString ModulationString(void) const
QString toString() const
QString ConstellationString(void) const
bool ParseDVB_S(const QString &frequency, const QString &inversion, const QString &symbol_rate, const QString &fec_inner, const QString &modulation, const QString &polarity)
unsigned int uint
Definition: compat.h:140
bool IsCompatible(const DTVRollOff &other) const
bool ParseTuningParams(DTVTunerType type, const QString &frequency, const QString &inversion, const QString &symbolrate, const QString &fec, const QString &polarity, const QString &hp_code_rate, const QString &lp_code_rate, const QString &ofdm_modulation, const QString &trans_mode, const QString &guard_interval, const QString &hierarchy, const QString &modulation, const QString &bandwidth, const QString &mod_sys, const QString &rolloff)
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:535
bool ParseDVB_S_and_C(const QString &frequency, const QString &inversion, const QString &symbol_rate, const QString &fec_inner, const QString &modulation, const QString &polarity)
DTVTransmitMode m_transMode
Definition: dtvmultiplex.h:101
QString m_sistandard
Definition: dtvmultiplex.h:111
QString toString() const
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:808
static const int kTunerTypeIPTV
bool IsCompatible(const DTVInversion &other) const
DTVRollOff m_rolloff
Definition: dtvmultiplex.h:107
#define LOG(_MASK_, _LEVEL_, _STRING_)
Definition: mythlogging.h:41
QString toString() const
QString toString() const
QString TransmissionModeString(void) const
QString FECInnerString(void) const
bool FillFromDB(DTVTunerType type, uint mplexid) override
unsigned long long FrequencyHz(void) const
void Clear(void)
Definition: dtvmultiplex.h:34
bool IsCompatible(const DTVModulation &other) const
QString ModulationSystemString(void) const
bool Parse(const QString &_value)
DTVCodeRate m_hpCodeRate
High Priority FEC rate.
Definition: dtvmultiplex.h:98
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:603
bool IsCompatible(const DTVBandwidth &other) const
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:179
unsigned long long FrequencykHz(void) const
bool IsCompatible(const DTVModulationSystem &other) const
QString ModulationString(void) const
#define LOC
bool Parse(const QString &_value)
bool ParseTuningParams(DTVTunerType type, const QString &frequency, const QString &inversion, const QString &symbolrate, const QString &fec, const QString &polarity, const QString &hp_code_rate, const QString &lp_code_rate, const QString &ofdm_modulation, const QString &trans_mode, const QString &guard_interval, const QString &hierarchy, const QString &modulation, const QString &bandwidth, const QString &mod_sys, const QString &rolloff)
DTVCodeRate m_lpCodeRate
Low Priority FEC rate.
Definition: dtvmultiplex.h:99
virtual bool FillFromDB(DTVTunerType type, uint mplexid)
DTVModulationSystem m_modSys
Modulation system.
Definition: dtvmultiplex.h:106
uint64_t m_frequency
Definition: dtvmultiplex.h:94
bool Parse(const QString &_value)