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(),-4).arg(m_modSys.toString(),-6).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  {
253  LOG(VB_GENERAL, LOG_WARNING, LOC + "Undefined modulation system " +
254  QString("parameter '%1', using DVB-C/A.").arg(_mod_sys));
256  }
257 
258  // Only DVB-C variants can be used with a DVB-C tuner.
262  {
263  LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-C modulation system " +
264  QString("parameter '%1', aborting.").arg(_mod_sys));
265  return false;
266  }
267 
268  return ok;
269 }
270 
272  const QString &_frequency, const QString &_inversion,
273  const QString &_symbol_rate, const QString &_fec_inner,
274  const QString &_modulation, const QString &_polarity,
275  const QString &_mod_sys, const QString &_rolloff)
276 {
277  bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
278  _fec_inner, _modulation, _polarity);
279 
281  m_modSys.Parse(_mod_sys);
282 
283  // For #10153, guess at modulation system based on modulation
285  {
289  }
290 
291  // Only DVB-S and DVB_S2 can be used with a DVB-S2 tuner.
294  {
295  LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-S2 modulation system " +
296  QString("parameter '%1', aborting.").arg(_mod_sys));
297  return false;
298  }
299 
300  if (!_rolloff.isEmpty())
301  ok &= m_rolloff.Parse(_rolloff);
302 
303  return ok;
304 }
305 
307  const QString &_frequency, const QString &_inversion,
308  const QString &_bandwidth, const QString &_coderate_hp,
309  const QString &_coderate_lp, const QString &_modulation,
310  const QString &_trans_mode, const QString &_guard_interval,
311  const QString &_hierarchy, const QString &_mod_sys)
312 {
313  bool ok = ParseDVB_T(_frequency, _inversion, _bandwidth,
314  _coderate_hp, _coderate_lp, _modulation,
315  _trans_mode, _guard_interval, _hierarchy);
316 
318  m_modSys.Parse(_mod_sys);
319 
320  // Accept 0 for DVB-T
321  if (_mod_sys == "0")
322  {
324  LOG(VB_GENERAL, LOG_WARNING, LOC + "Deprecated DVB-T modulation system " +
325  QString("parameter '%1', using %2.").arg(_mod_sys).arg(m_modSys.toString()));
326  }
327 
328  // Accept 1 for DVB-T2
329  if (_mod_sys == "1")
330  {
332  LOG(VB_GENERAL, LOG_WARNING, LOC + "Deprecated DVB-T2 modulation system " +
333  QString("parameter '%1', using %2.").arg(_mod_sys).arg(m_modSys.toString()));
334  }
335 
336  // We have a DVB-T2 tuner, change undefined modulation system to DVB-T2
338  {
340  LOG(VB_GENERAL, LOG_WARNING, LOC + "Undefined modulation system, " +
341  QString("using %1.").arg(m_modSys.toString()));
342  }
343 
344  // Only DVB-T and DVB-T2 can be used with a DVB-T2 tuner.
347  {
348  LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-T2 modulation system " +
349  QString("%1, aborting.").arg(m_modSys.toString()));
350  return false;
351  }
352 
353  return ok;
354 }
355 
358  const QString& _frequency, const QString& _inversion, const QString& _symbolrate,
359  const QString& _fec, const QString& _polarity,
360  const QString& _hp_code_rate, const QString& _lp_code_rate, const QString& _ofdm_modulation,
361  const QString& _trans_mode, const QString& _guard_interval, const QString& _hierarchy,
362  const QString& _modulation, const QString& _bandwidth,
363  const QString& _mod_sys, const QString& _rolloff)
364 {
366  {
367  return ParseDVB_T(
368  _frequency, _inversion, _bandwidth,
369  _hp_code_rate, _lp_code_rate, _ofdm_modulation,
370  _trans_mode, _guard_interval, _hierarchy);
371  }
372 
374  {
375  return ParseDVB_C(
376  _frequency, _inversion, _symbolrate,
377  _fec, _modulation, _polarity,
378  _mod_sys);
379  }
380 
382  {
383  return ParseDVB_S(
384  _frequency, _inversion, _symbolrate,
385  _fec, _modulation, _polarity);
386  }
387 
389  {
390  return ParseDVB_S2(
391  _frequency, _inversion, _symbolrate,
392  _fec, _modulation, _polarity,
393  _mod_sys, _rolloff);
394  }
395 
397  {
398  return ParseDVB_T2(
399  _frequency, _inversion, _bandwidth,
400  _hp_code_rate, _lp_code_rate, _ofdm_modulation,
401  _trans_mode, _guard_interval, _hierarchy,
402  _mod_sys);
403  }
404 
406  {
407  return ParseATSC(_frequency, _modulation);
408  }
409 
410  LOG(VB_GENERAL, LOG_ERR, LOC +
411  QString("ParseTuningParams -- Unknown tuner type = 0x%1")
412  .arg(type,0,16,QChar('0')));
413 
414  return false;
415 }
416 
418 {
419  Clear();
420 
421  MSqlQuery query(MSqlQuery::InitCon());
422  query.prepare(
423  "SELECT frequency, inversion, symbolrate, "
424  " fec, polarity, "
425  " hp_code_rate, lp_code_rate, constellation, "
426  " transmission_mode, guard_interval, hierarchy, "
427  " modulation, bandwidth, sistandard, "
428  " mod_sys, rolloff "
429  "FROM dtv_multiplex "
430  "WHERE dtv_multiplex.mplexid = :MPLEXID");
431  query.bindValue(":MPLEXID", mplexid);
432 
433  if (!query.exec())
434  {
435  MythDB::DBError("DVBTuning::FillFromDB", query);
436  return false;
437  }
438 
439  if (!query.next())
440  {
441  LOG(VB_GENERAL, LOG_ERR, LOC +
442  QString("Could not find tuning parameters for mplex %1")
443  .arg(mplexid));
444 
445  return false;
446  }
447 
448  m_mplex = mplexid;
449  m_sistandard = query.value(13).toString();
450 
451  // Parse the query into our DVBTuning class
452  return ParseTuningParams(
453  type,
454  query.value(0).toString(), query.value(1).toString(),
455  query.value(2).toString(), query.value(3).toString(),
456  query.value(4).toString(), query.value(5).toString(),
457  query.value(6).toString(), query.value(7).toString(),
458  query.value(8).toString(), query.value(9).toString(),
459  query.value(10).toString(), query.value(11).toString(),
460  query.value(12).toString(), query.value(14).toString(),
461  query.value(15).toString());
462 }
463 
464 
466  const MPEGDescriptor &desc)
467 {
468  uint tag = desc.DescriptorTag();
469  m_sistandard = "dvb";
470 
471  switch (tag)
472  {
474  {
476 
478  {
479  return ParseDVB_T(
480  QString::number(cd.FrequencyHz()), "a",
484  cd.HierarchyString());
485  }
486 
488  {
489  return ParseDVB_T2(
490  QString::number(cd.FrequencyHz()), "a",
494  cd.HierarchyString(), "DVB-T");
495  }
496 
497  break;
498  }
500  {
501  const SatelliteDeliverySystemDescriptor cd(desc);
502 
504  {
505  if (cd.ModulationSystem())
506  {
507  LOG(VB_CHANSCAN, LOG_NOTICE, LOC +
508  "Ignoring DVB-S2 transponder with DVB-S card");
509  return false;
510  }
511 
512  return ParseDVB_S_and_C(
513  QString::number(cd.FrequencykHz()), "a",
514  QString::number(cd.SymbolRateHz()), cd.FECInnerString(),
515  cd.ModulationString(),
516  cd.PolarizationString());
517  }
518 
520  {
521  return ParseDVB_S2(
522  QString::number(cd.FrequencykHz()), "a",
523  QString::number(cd.SymbolRateHz()), cd.FECInnerString(),
524  cd.ModulationString(),
525  cd.PolarizationString(),
527  }
528 
529  break;
530  }
532  {
534  break;
535 
536  const CableDeliverySystemDescriptor cd(desc);
537 
538  return ParseDVB_C(
539  QString::number(cd.FrequencyHz()), "a",
540  QString::number(cd.SymbolRateHz()), cd.FECInnerString(),
541  cd.ModulationString(), QString(),
542  "DVB-C/A");
543  }
544  default:
545  LOG(VB_CHANSCAN, LOG_ERR, LOC +
546  "unknown delivery system descriptor");
547  return false;
548  }
549 
550  LOG(VB_CHANSCAN, LOG_ERR, LOC +
551  QString("Tuner type %1 does not match delivery system")
552  .arg(type.toString()));
553  return false;
554 }
555 
556 
559 
561 {
562  if (!DTVMultiplex::FillFromDB(type, mplexid))
563  return false;
564 
565  MSqlQuery query(MSqlQuery::InitCon());
566  query.prepare(
567  "SELECT c.mplexid, c.sourceid, c.chanid, "
568  " c.callsign, c.name, c.channum, "
569  " c.serviceid, c.atsc_major_chan, c.atsc_minor_chan, "
570  " c.useonairguide, c.visible, c.freqid, "
571  " c.icon, c.tvformat, c.xmltvid, "
572  " d.transportid, d.networkid, c.default_authority,"
573  " c.service_type "
574  "FROM channel AS c, dtv_multiplex AS d "
575  "WHERE c.deleted IS NULL AND "
576  " c.mplexid = :MPLEXID AND"
577  " c.mplexid = d.mplexid");
578  query.bindValue(":MPLEXID", mplexid);
579 
580  if (!query.exec())
581  {
582  MythDB::DBError("ScanDTVTransport::FillFromDB", query);
583  return false;
584  }
585 
586  while (query.next())
587  {
588  ChannelInsertInfo chan(
589  query.value(0).toUInt(), query.value(1).toUInt(),
590  query.value(2).toUInt(), query.value(3).toString(),
591  query.value(4).toString(), query.value(5).toString(),
592  query.value(6).toUInt(),
593  query.value(7).toUInt(), query.value(8).toUInt(),
594  query.value(9).toBool(), !query.value(10).toBool(),
595  false,
596  query.value(11).toString(), query.value(12).toString(),
597  query.value(13).toString(), query.value(14).toString(),
598  0, 0, 0,
599  query.value(15).toUInt(), query.value(16).toUInt(),
600  0,
601  QString(),
602  false, false, false, false,
603  false, false, false, false,
604  false, false, false, 0,
605  query.value(17).toString(), /* default_authority */
606  query.value(18).toUInt()); /* service_type */
607 
608  m_channels.push_back(chan);
609  }
610 
611  return true;
612 }
613 
615 {
616  uint transportid = 0;
617 
618  MSqlQuery query(MSqlQuery::InitCon());
619  query.prepare(
620  "INSERT INTO channelscan_dtv_multiplex "
621  " ( scanid, "
622  " mplexid, frequency, inversion, "
623  " symbolrate, fec, polarity, "
624  " hp_code_rate, lp_code_rate, modulation, "
625  " transmission_mode, guard_interval, hierarchy, "
626  " mod_sys, rolloff, "
627  " bandwidth, sistandard, tuner_type "
628  " ) "
629  "VALUES "
630  " ( :SCANID, "
631  " :MPLEXID, :FREQUENCY, :INVERSION, "
632  " :SYMBOLRATE, :FEC, :POLARITY, "
633  " :HP_CODE_RATE, :LP_CODE_RATE, :MODULATION, "
634  " :TRANSMISSION_MODE, :GUARD_INTERVAL, :HIERARCHY, "
635  " :MOD_SYS, :ROLLOFF, "
636  " :BANDWIDTH, :SISTANDARD, :TUNER_TYPE "
637  " );");
638 
639  query.bindValue(":SCANID", scanid);
640  query.bindValue(":MPLEXID", m_mplex);
641  query.bindValue(":FREQUENCY", QString::number(m_frequency));
642  query.bindValue(":INVERSION", m_inversion.toString());
643  query.bindValue(":SYMBOLRATE", QString::number(m_symbolRate));
644  query.bindValue(":FEC", m_fec.toString());
645  query.bindValue(":POLARITY", m_polarity.toString());
646  query.bindValue(":HP_CODE_RATE", m_hpCodeRate.toString());
647  query.bindValue(":LP_CODE_RATE", m_lpCodeRate.toString());
648  query.bindValue(":MODULATION", m_modulation.toString());
649  query.bindValue(":TRANSMISSION_MODE", m_transMode.toString());
650  query.bindValue(":GUARD_INTERVAL", m_guardInterval.toString());
651  query.bindValue(":HIERARCHY", m_hierarchy.toString());
652  query.bindValue(":MOD_SYS", m_modSys.toString());
653  query.bindValue(":ROLLOFF", m_rolloff.toString());
654  query.bindValue(":BANDWIDTH", m_bandwidth.toString());
655  query.bindValue(":SISTANDARD", m_sistandard);
656  query.bindValue(":TUNER_TYPE", (uint)m_tuner_type);
657 
658  if (!query.exec())
659  {
660  MythDB::DBError("ScanDTVTransport::SaveScan 1", query);
661  return transportid;
662  }
663 
664  query.prepare("SELECT MAX(transportid) FROM channelscan_dtv_multiplex");
665  if (!query.exec())
666  MythDB::DBError("ScanDTVTransport::SaveScan 2", query);
667  else if (query.next())
668  transportid = query.value(0).toUInt();
669 
670  if (!transportid)
671  return transportid;
672 
673  for (const auto & channel : m_channels)
674  channel.SaveScan(scanid, transportid);
675 
676  return transportid;
677 }
678 
681  const QString& _frequency, const QString& _inversion, const QString& _symbolrate,
682  const QString& _fec, const QString& _polarity,
683  const QString& _hp_code_rate, const QString& _lp_code_rate, const QString& _ofdm_modulation,
684  const QString& _trans_mode, const QString& _guard_interval, const QString& _hierarchy,
685  const QString& _modulation, const QString& _bandwidth, const QString& _mod_sys,
686  const QString& _rolloff)
687 {
688  m_tuner_type = type;
689 
691  type,
692  _frequency, _inversion, _symbolrate,
693  _fec, _polarity,
694  _hp_code_rate, _lp_code_rate, _ofdm_modulation,
695  _trans_mode, _guard_interval, _hierarchy,
696  _modulation, _bandwidth, _mod_sys,
697  _rolloff);
698 }
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
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)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:41