MythTV  master
channelscanner.cpp
Go to the documentation of this file.
1 /* -*- Mode: c++ -*-
2  * vim: set expandtab tabstop=4 shiftwidth=4:
3  *
4  * Original Project
5  * MythTV http://www.mythtv.org
6  *
7  * Copyright (c) 2004, 2005 John Pullan <john@pullan.org>
8  * Copyright (c) 2005 - 2007 Daniel Kristjansson
9  *
10  * Description:
11  * Collection of classes to provide channel scanning functionallity
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26  * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
27  *
28  */
29 
30 #include <algorithm>
31 using namespace std;
32 
33 #include "analogsignalmonitor.h"
34 #include "iptvchannelfetcher.h"
35 #include "dvbsignalmonitor.h"
36 #include "scanwizardconfig.h"
37 #include "channelscan_sm.h"
38 #include "channelscanner.h"
39 #include "hdhrchannel.h"
40 #include "scanmonitor.h"
41 #include "asichannel.h"
42 #ifdef USING_DVB // for bug in gcc 8.3
43 #include "dvbchannel.h"
44 #endif
45 #include "v4lchannel.h"
46 #include "iptvchannel.h"
47 #include "ExternalChannel.h"
48 #include "cardutil.h"
49 
50 #define LOC QString("ChScan: ")
51 
53 {
55 
56  if (m_scanMonitor)
57  {
58  m_scanMonitor->deleteLater();
59  m_scanMonitor = nullptr;
60  }
61 }
62 
64 {
65  if (m_sigmonScanner)
66  {
67  delete m_sigmonScanner;
68  m_sigmonScanner = nullptr;
69  }
70 
71  if (m_channel)
72  {
73  delete m_channel;
74  m_channel = nullptr;
75  }
76 
77  if (m_iptvScanner)
78  {
79  m_iptvScanner->Stop();
80  delete m_iptvScanner;
81  m_iptvScanner = nullptr;
82  }
83 
84 #ifdef USING_VBOX
85  if (m_vboxScanner)
86  {
87  m_vboxScanner->Stop();
88  delete m_vboxScanner;
89  m_vboxScanner = nullptr;
90  }
91 #endif
92 
93 #if !defined( USING_MINGW ) && !defined( _MSC_VER )
94  if (m_ExternRecScanner)
95  {
96  m_ExternRecScanner->Stop();
97  delete m_ExternRecScanner;
98  m_ExternRecScanner = nullptr;
99  }
100 #endif
101 
102  if (m_scanMonitor)
103  {
104  m_scanMonitor->deleteLater();
105  m_scanMonitor = nullptr;
106  }
107 }
108 
109 // full scan of existing transports broken
110 // existing transport scan broken
112  int scantype,
113  uint cardid,
114  const QString &inputname,
115  uint sourceid,
116  bool do_ignore_signal_timeout,
117  bool do_follow_nit,
118  bool do_test_decryption,
119  bool do_fta_only,
120  bool do_lcn_only,
121  bool do_complete_only,
122  bool do_full_channel_search,
123  bool do_remove_duplicates,
124  bool do_add_full_ts,
125  ServiceRequirements service_requirements,
126  // stuff needed for particular scans
127  uint mplexid /* TransportScan */,
128  const QMap<QString,QString> &startChan /* NITAddScan */,
129  const QString &freq_std /* FullScan */,
130  const QString &mod /* FullScan */,
131  const QString &tbl /* FullScan */,
132  const QString &tbl_start /* FullScan optional */,
133  const QString &tbl_end /* FullScan optional */)
134 {
135  m_freeToAirOnly = do_fta_only;
136  m_channelNumbersOnly = do_lcn_only;
137  m_completeOnly = do_complete_only;
138  m_fullSearch = do_full_channel_search;
139  m_removeDuplicates = do_remove_duplicates;
140  m_addFullTS = do_add_full_ts;
141  m_serviceRequirements = service_requirements;
142  m_sourceid = sourceid;
143 
144  PreScanCommon(scantype, cardid, inputname,
145  sourceid, do_ignore_signal_timeout, do_test_decryption);
146 
147  LOG(VB_CHANSCAN, LOG_INFO, LOC + "Scan()");
148 
149  if (!m_sigmonScanner)
150  {
151  LOG(VB_CHANSCAN, LOG_ERR, LOC + "Scan(): scanner does not exist...");
152  return;
153  }
154 
155  m_sigmonScanner->StartScanner();
156  m_scanMonitor->ScanUpdateStatusText("");
157 
158  bool ok = false;
159 
160  if ((ScanTypeSetting::FullScan_ATSC == scantype) ||
161  (ScanTypeSetting::FullScan_DVBC == scantype) ||
162  (ScanTypeSetting::FullScan_DVBT == scantype) ||
163  (ScanTypeSetting::FullScan_DVBT2 == scantype) ||
164  (ScanTypeSetting::FullScan_Analog == scantype))
165  {
166  LOG(VB_CHANSCAN, LOG_INFO, LOC + QString("ScanTransports(%1, %2, %3)")
167  .arg(freq_std).arg(mod).arg(tbl));
168 
169  // HACK HACK HACK -- begin
170  // if using QAM we may need additional time... (at least with HD-3000)
171  if ((mod.startsWith("qam", Qt::CaseInsensitive)) &&
172  (m_sigmonScanner->GetSignalTimeout() < 1000))
173  {
174  m_sigmonScanner->SetSignalTimeout(1000);
175  }
176  // HACK HACK HACK -- end
177 
178  m_sigmonScanner->SetAnalog(ScanTypeSetting::FullScan_Analog == scantype);
179 
180  ok = m_sigmonScanner->ScanTransports(
181  sourceid, freq_std, mod, tbl, tbl_start, tbl_end);
182  }
183  else if ((ScanTypeSetting::NITAddScan_DVBT == scantype) ||
184  (ScanTypeSetting::NITAddScan_DVBT2 == scantype) ||
185  (ScanTypeSetting::NITAddScan_DVBS == scantype) ||
186  (ScanTypeSetting::NITAddScan_DVBS2 == scantype) ||
187  (ScanTypeSetting::NITAddScan_DVBC == scantype))
188  {
189  LOG(VB_CHANSCAN, LOG_INFO, LOC + "ScanTransports()");
190 
191  ok = m_sigmonScanner->ScanTransportsStartingOn(sourceid, startChan);
192  }
193  else if (ScanTypeSetting::FullTransportScan == scantype)
194  {
195  LOG(VB_CHANSCAN, LOG_INFO, LOC + QString("ScanExistingTransports(%1)")
196  .arg(sourceid));
197 
198  ok = m_sigmonScanner->ScanExistingTransports(sourceid, do_follow_nit);
199  if (ok)
200  {
201  m_scanMonitor->ScanPercentComplete(0);
202  }
203  else
204  {
205  InformUser(tr("Error tuning to transport"));
206  Teardown();
207  }
208  }
209  else if ((ScanTypeSetting::DVBUtilsImport == scantype) && !m_channels.empty())
210  {
211  ok = true;
212 
213  LOG(VB_CHANSCAN, LOG_INFO, LOC +
214  QString("ScanForChannels(%1)").arg(sourceid));
215 
216  QString card_type = CardUtil::GetRawInputType(cardid);
217  QString sub_type = card_type;
218  if (card_type == "DVB")
219  {
220  QString device = CardUtil::GetVideoDevice(cardid);
221 
222  ok = !device.isEmpty();
223  if (ok)
224  sub_type = CardUtil::ProbeDVBType(device).toUpper();
225  }
226 
227  if (ok)
228  {
229  ok = m_sigmonScanner->ScanForChannels(sourceid, freq_std,
230  sub_type, m_channels);
231  }
232  if (ok)
233  {
234  m_scanMonitor->ScanPercentComplete(0);
235  }
236  else
237  {
238  InformUser(tr("Error tuning to transport"));
239  Teardown();
240  }
241  }
242  else if (ScanTypeSetting::IPTVImportMPTS == scantype)
243  {
244  if (m_iptv_channels.empty())
245  {
246  LOG(VB_CHANSCAN, LOG_INFO, LOC + "IPTVImportMPTS: no channels");
247  }
248  else
249  {
250  LOG(VB_CHANSCAN, LOG_INFO, LOC +
251  QString("ScanIPTVChannels(%1) IPTV MPTS").arg(sourceid));
252 
253  if ((ok = m_sigmonScanner->ScanIPTVChannels(sourceid, m_iptv_channels)))
254  m_scanMonitor->ScanPercentComplete(0);
255  else
256  {
257  InformUser(tr("Error scanning MPTS in IPTV"));
258  Teardown();
259  }
260  }
261  }
262  else if (ScanTypeSetting::TransportScan == scantype)
263  {
264  LOG(VB_CHANSCAN, LOG_INFO, LOC +
265  QString("ScanTransport(%1)").arg(mplexid));
266 
267  ok = m_sigmonScanner->ScanTransport(mplexid, do_follow_nit);
268  }
269  else if (ScanTypeSetting::CurrentTransportScan == scantype)
270  {
271  QString sistandard = "mpeg";
272  LOG(VB_CHANSCAN, LOG_INFO, LOC +
273  "ScanCurrentTransport(" + sistandard + ")");
274  ok = m_sigmonScanner->ScanCurrentTransport(sistandard);
275  }
276  else if (ScanTypeSetting::ExternRecImport == scantype)
277  {
278  LOG(VB_CHANSCAN, LOG_INFO, LOC +
279  "Importing channels from External Recorder");
280  ok = ImportExternRecorder(cardid, inputname, sourceid);
281  }
282 
283  if (!ok)
284  {
285  LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to handle tune complete.");
286  InformUser(tr("Programmer Error: "
287  "Failed to handle tune complete."));
288  }
289 }
290 
292  uint sourceid, int cardtype, const QString &file)
293 {
294  m_sourceid = sourceid;
295  m_channels.clear();
296 
298  type = ((CardUtil::DVBT == cardtype) ||
299  (CardUtil::DVBT2 == cardtype)) ? DTVConfParser::OFDM : type;
300  type = (CardUtil::QPSK == cardtype) ? DTVConfParser::QPSK : type;
301  type = (CardUtil::DVBC == cardtype) ? DTVConfParser::QAM : type;
302  type = (CardUtil::DVBS2 == cardtype) ? DTVConfParser::DVBS2 : type;
303  type = ((CardUtil::ATSC == cardtype) ||
304  (CardUtil::HDHOMERUN == cardtype)) ? DTVConfParser::ATSC : type;
305 
309  else
310  {
311  DTVConfParser parser(type, sourceid, file);
312 
313  ret = parser.Parse();
314  if (DTVConfParser::OK == ret)
315  m_channels = parser.GetChannels();
316  }
317 
318  if (DTVConfParser::OK != ret)
319  {
320  QString msg = (DTVConfParser::ERROR_PARSE == ret) ?
321  tr("Failed to parse '%1'").arg(file) :
323  tr("Programmer Error : incorrect card type") :
324  tr("Failed to open '%1'").arg(file));
325 
326  InformUser(msg);
327  }
328 
329  return ret;
330 }
331 
332 bool ChannelScanner::ImportM3U(uint cardid, const QString &inputname,
333  uint sourceid, bool is_mpts)
334 {
335  (void) cardid;
336  (void) inputname;
337  m_sourceid = sourceid;
338 
339  if (!m_scanMonitor)
340  m_scanMonitor = new ScanMonitor(this);
341 
342  // Create an IPTV scan object
343  m_iptvScanner = new IPTVChannelFetcher(cardid, inputname, sourceid,
344  is_mpts, m_scanMonitor);
345 
346  MonitorProgress(false, false, false, false);
347 
348  m_iptvScanner->Scan();
349 
350  if (is_mpts)
351  m_iptv_channels = m_iptvScanner->GetChannels();
352 
353  return true;
354 }
355 
356 bool ChannelScanner::ImportVBox(uint cardid, const QString &inputname, uint sourceid,
357  bool ftaOnly, ServiceRequirements serviceType)
358 {
359  m_sourceid = sourceid;
360 #ifdef USING_VBOX
361  if (!m_scanMonitor)
362  m_scanMonitor = new ScanMonitor(this);
363 
364  // Create a VBox scan object
365  m_vboxScanner = new VBoxChannelFetcher(cardid, inputname, sourceid, ftaOnly, serviceType, m_scanMonitor);
366 
367  MonitorProgress(false, false, false, false);
368 
369  m_vboxScanner->Scan();
370 
371  return true;
372 #else
373  (void) cardid;
374  (void) inputname;
375  return false;
376 #endif
377 }
378 
379 bool ChannelScanner::ImportExternRecorder(uint cardid, const QString &inputname,
380  uint sourceid)
381 {
382  m_sourceid = sourceid;
383 #if !defined( USING_MINGW ) && !defined( _MSC_VER )
384  if (!m_scanMonitor)
385  m_scanMonitor = new ScanMonitor(this);
386 
387  // Create a External Recorder Channel Fetcher
388  m_ExternRecScanner = new ExternRecChannelScanner(cardid,
389  inputname,
390  sourceid,
391  m_scanMonitor);
392 
393  MonitorProgress(false, false, false, false);
394 
395  m_ExternRecScanner->Scan();
396 
397  return true;
398 #else
399  (void) cardid;
400  (void) inputname;
401 
402  return false;
403 #endif
404 }
405 
407  int scantype,
408  uint cardid,
409  const QString &inputname,
410  uint sourceid,
411  bool do_ignore_signal_timeout,
412  bool do_test_decryption)
413 {
414  uint signal_timeout = 1000;
415  uint channel_timeout = 40000;
416  CardUtil::GetTimeouts(cardid, signal_timeout, channel_timeout);
417 
418  QString device = CardUtil::GetVideoDevice(cardid);
419  if (device.isEmpty())
420  {
421  LOG(VB_GENERAL, LOG_ERR, LOC + "No Device");
422  InformUser(tr("Programmer Error: No Device"));
423  return;
424  }
425 
426  if (!m_scanMonitor)
427  m_scanMonitor = new ScanMonitor(this);
428 
429  QString card_type = CardUtil::GetRawInputType(cardid);
430 
431  if ("DVB" == card_type)
432  {
433  QString sub_type = CardUtil::ProbeDVBType(device).toUpper();
434  bool need_nit = (("QAM" == sub_type) ||
435  ("QPSK" == sub_type) ||
436  ("OFDM" == sub_type) ||
437  ("DVB_T2" == sub_type));
438 
439  // Ugh, Some DVB drivers don't fully support signal monitoring...
440  if ((ScanTypeSetting::TransportScan == scantype) ||
442  {
443  signal_timeout = (do_ignore_signal_timeout) ?
444  channel_timeout * 10 : signal_timeout;
445  }
446 
447  // ensure a minimal signal timeout of 1 second
448  signal_timeout = max(signal_timeout, 1000U);
449 
450  // Make sure that channel_timeout is at least 7 seconds to catch
451  // at least one SDT section. kDVBTableTimeout in ChannelScanSM
452  // ensures that we catch the NIT then.
453  channel_timeout = max(channel_timeout, static_cast<int>(need_nit) * 7 * 1000U);
454  }
455 
456 #ifdef USING_DVB
457  if ("DVB" == card_type)
458  m_channel = new DVBChannel(device);
459 #endif
460 
461 #ifdef USING_V4L2
462  if (("V4L" == card_type) || ("MPEG" == card_type))
463  m_channel = new V4LChannel(nullptr, device);
464 #endif
465 
466 #ifdef USING_HDHOMERUN
467  if ("HDHOMERUN" == card_type)
468  {
469  m_channel = new HDHRChannel(nullptr, device);
470  }
471 #endif // USING_HDHOMERUN
472 
473 #ifdef USING_ASI
474  if ("ASI" == card_type)
475  {
476  m_channel = new ASIChannel(nullptr, device);
477  }
478 #endif // USING_ASI
479 
480 #ifdef USING_IPTV
481  if ("FREEBOX" == card_type)
482  {
483  m_channel = new IPTVChannel(nullptr, device);
484  }
485 #endif
486 
487 #ifdef USING_VBOX
488  if ("VBOX" == card_type)
489  {
490  m_channel = new IPTVChannel(nullptr, device);
491  }
492 #endif
493 
494 #if !defined( USING_MINGW ) && !defined( _MSC_VER )
495  if ("EXTERNAL" == card_type)
496  {
497  m_channel = new ExternalChannel(nullptr, device);
498  }
499 #endif
500 
501  if (!m_channel)
502  {
503  LOG(VB_GENERAL, LOG_ERR, LOC + "Channel not created");
504  InformUser(tr("Programmer Error: Channel not created"));
505  return;
506  }
507 
508  // explicitly set the cardid
509  m_channel->SetInputID(cardid);
510 
511  // If the backend is running this may fail...
512  if (!m_channel->Open())
513  {
514  LOG(VB_GENERAL, LOG_ERR, LOC + "Channel could not be opened");
515  InformUser(tr("Channel could not be opened."));
516  return;
517  }
518 
519  ScanMonitor *lis = m_scanMonitor;
520 
521  m_sigmonScanner = new ChannelScanSM(lis, card_type, m_channel,
522  sourceid, signal_timeout, channel_timeout,
523  inputname, do_test_decryption);
524 
525  // If we know the channel types we can give the signal monitor a hint.
526  // Since we unfortunately do not record this info in the DB, we cannot
527  // do this for the other scan types and have to guess later on...
528  switch (scantype)
529  {
531  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeATSC);
532  break;
534  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBC);
535  break;
537  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBT);
538  break;
540  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBT2);
541  break;
543  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBT);
544  break;
546  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBT2);
547  break;
549  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBS1);
550  break;
552  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBS2);
553  break;
555  m_sigmonScanner->SetScanDTVTunerType(DTVTunerType::kTunerTypeDVBC);
556  break;
557  default:
558  break;
559  }
560 
561  // Signal Meters are connected here
562  SignalMonitor *mon = m_sigmonScanner->GetSignalMonitor();
563  if (mon)
564  mon->AddListener(lis);
565 
566  DVBSignalMonitor *dvbm = nullptr;
567  bool using_rotor = false;
568 
569 #ifdef USING_DVB
570  // cppcheck-suppress redundantAssignment
571  dvbm = m_sigmonScanner->GetDVBSignalMonitor();
572  if (dvbm && mon)
574 #endif // USING_DVB
575 
576  MonitorProgress(mon, mon, dvbm, using_rotor);
577 }
ChannelScanner::ImportVBox
virtual bool ImportVBox(uint cardid, const QString &inputname, uint sourceid, bool ftaOnly, ServiceRequirements serviceType)
Definition: channelscanner.cpp:356
DTVConfParser::ERROR_CARDTYPE
@ ERROR_CARDTYPE
Definition: dtvconfparser.h:79
analogsignalmonitor.h
DTVTunerType::kTunerTypeDVBC
static const int kTunerTypeDVBC
Definition: dtvconfparserhelpers.h:95
DTVConfParser::cardtype_t
cardtype_t
Definition: dtvconfparser.h:80
ChannelScanner::~ChannelScanner
virtual ~ChannelScanner()
Definition: channelscanner.cpp:52
ScanTypeSetting::FullTransportScan
@ FullTransportScan
Definition: scanwizardconfig.h:88
ScanTypeSetting::FullScan_DVBT
@ FullScan_DVBT
Definition: scanwizardconfig.h:78
CardUtil::DVBT2
@ DVBT2
Definition: cardutil.h:68
ScanTypeSetting::DVBUtilsImport
@ DVBUtilsImport
Definition: scanwizardconfig.h:98
DTVTunerType::kTunerTypeDVBS1
static const int kTunerTypeDVBS1
Definition: dtvconfparserhelpers.h:93
VBoxChannelFetcher
Definition: vboxchannelfetcher.h:63
ScanTypeSetting::NITAddScan_DVBS
@ NITAddScan_DVBS
Definition: scanwizardconfig.h:84
channelscan_sm.h
DVBSignalMonitor
Definition: dvbsignalmonitor.h:17
arg
arg(title).arg(filename).arg(doDelete))
DTVConfParser::ATSC
@ ATSC
Definition: dtvconfparser.h:80
scanwizardconfig.h
ScanTypeSetting::FullScan_ATSC
@ FullScan_ATSC
Definition: scanwizardconfig.h:76
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
build_compdb.parser
parser
Definition: build_compdb.py:7
build_compdb.file
file
Definition: build_compdb.py:55
DTVConfParser::QAM
@ QAM
Definition: dtvconfparser.h:80
dvbchannel.h
HDHRChannel
Definition: hdhrchannel.h:20
channelscanner.h
CardUtil::ProbeDVBType
static QString ProbeDVBType(const QString &device)
Definition: cardutil.cpp:668
DTVConfParser::DVBS2
@ DVBS2
Definition: dtvconfparser.h:80
CardUtil::DVBS2
@ DVBS2
Definition: cardutil.h:61
scanmonitor.h
ExternRecChannelScanner
Definition: externrecscanner.h:22
CardUtil::QPSK
@ QPSK
Definition: cardutil.h:51
ScanTypeSetting::NITAddScan_DVBT
@ NITAddScan_DVBT
Definition: scanwizardconfig.h:82
CardUtil::GetTimeouts
static bool GetTimeouts(uint inputid, uint &signal_timeout, uint &channel_timeout)
Definition: cardutil.cpp:2092
dvbsignalmonitor.h
SignalMonitor::kDVBSigMon_WaitForPos
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
Definition: signalmonitor.h:200
ChannelScanner::Scan
void Scan(int scantype, uint cardid, const QString &inputname, uint sourceid, bool do_ignore_signal_timeout, bool do_follow_nit, bool do_test_decryption, bool do_fta_only, bool do_lcn_only, bool do_complete_only, bool do_full_channel_search, bool do_remove_duplicates, bool do_add_full_ts, ServiceRequirements service_requirements, uint mplexid, const QMap< QString, QString > &startChan, const QString &freq_std, const QString &mod, const QString &tbl, const QString &tbl_start=QString(), const QString &tbl_end=QString())
Definition: channelscanner.cpp:111
ScanTypeSetting::FullScan_Analog
@ FullScan_Analog
Definition: scanwizardconfig.h:75
v4lchannel.h
IPTVChannelFetcher
Definition: iptvchannelfetcher.h:64
ScanTypeSetting::IPTVImportMPTS
@ IPTVImportMPTS
Definition: scanwizardconfig.h:96
DTVConfParser
Parses dvb-utils channel scanner output files.
Definition: dtvconfparser.h:76
CardUtil::HDHOMERUN
@ HDHOMERUN
Definition: cardutil.h:58
DTVConfParser::OK
@ OK
Definition: dtvconfparser.h:79
DTVConfParser::UNKNOWN
@ UNKNOWN
Definition: dtvconfparser.h:80
ScanTypeSetting::FullScan_DVBC
@ FullScan_DVBC
Definition: scanwizardconfig.h:77
ChannelScanner::Teardown
virtual void Teardown(void)
Definition: channelscanner.cpp:63
IPTVChannel
Definition: iptvchannel.h:24
ScanTypeSetting::NITAddScan_DVBT2
@ NITAddScan_DVBT2
Definition: scanwizardconfig.h:83
ScanTypeSetting::NITAddScan_DVBC
@ NITAddScan_DVBC
Definition: scanwizardconfig.h:86
DTVConfParser::ERROR_PARSE
@ ERROR_PARSE
Definition: dtvconfparser.h:79
ChannelScanSM
Scanning class for cards that support a SignalMonitor class.
Definition: channelscan_sm.h:85
uint
unsigned int uint
Definition: compat.h:140
ExternalChannel
Definition: ExternalChannel.h:18
ScanTypeSetting::CurrentTransportScan
@ CurrentTransportScan
Scans the transport when there is no tuner (for ASI)
Definition: scanwizardconfig.h:92
CardUtil::DVBC
@ DVBC
Definition: cardutil.h:52
DTVConfParser::OFDM
@ OFDM
Definition: dtvconfparser.h:80
SignalMonitor
Signal monitoring base class.
Definition: signalmonitor.h:32
asichannel.h
DTVConfParser::QPSK
@ QPSK
Definition: dtvconfparser.h:80
DTVTunerType::kTunerTypeDVBS2
static const int kTunerTypeDVBS2
Definition: dtvconfparserhelpers.h:94
ScanTypeSetting::TransportScan
@ TransportScan
Definition: scanwizardconfig.h:90
iptvchannel.h
CardUtil::GetRawInputType
static QString GetRawInputType(uint inputid)
Definition: cardutil.h:277
LOC
#define LOC
Definition: channelscanner.cpp:50
ChannelScanner::ImportDVBUtils
virtual DTVConfParser::return_t ImportDVBUtils(uint sourceid, int cardtype, const QString &file)
Definition: channelscanner.cpp:291
DVBChannel
Provides interface to the tuning hardware when using DVB drivers.
Definition: dvbchannel.h:29
SignalMonitor::HasFlags
bool HasFlags(uint64_t _flags) const
Definition: signalmonitor.cpp:263
ChannelScanner::PreScanCommon
virtual void PreScanCommon(int scantype, uint cardid, const QString &inputname, uint sourceid, bool do_ignore_signal_timeout, bool do_test_decryption)
Definition: channelscanner.cpp:406
ASIChannel
Definition: asichannel.h:15
SignalMonitor::AddListener
void AddListener(SignalMonitorListener *listener)
Definition: signalmonitor.cpp:373
cardutil.h
ExternalChannel.h
ScanTypeSetting::ExternRecImport
@ ExternRecImport
Definition: scanwizardconfig.h:104
DTVTunerType::kTunerTypeATSC
static const int kTunerTypeATSC
Definition: dtvconfparserhelpers.h:98
DTVConfParser::return_t
return_t
Definition: dtvconfparser.h:79
DTVTunerType::kTunerTypeDVBT
static const int kTunerTypeDVBT
Definition: dtvconfparserhelpers.h:96
CardUtil::ATSC
@ ATSC
Definition: cardutil.h:54
hdhrchannel.h
ServiceRequirements
ServiceRequirements
Definition: channelscantypes.h:4
DTVTunerType::kTunerTypeDVBT2
static const int kTunerTypeDVBT2
Definition: dtvconfparserhelpers.h:97
V4LChannel
Implements tuning for TV cards using the V4L driver API, both versions 1 and 2.
Definition: v4lchannel.h:36
iptvchannelfetcher.h
ScanTypeSetting::NITAddScan_DVBS2
@ NITAddScan_DVBS2
Definition: scanwizardconfig.h:85
ScanTypeSetting::FullScan_DVBT2
@ FullScan_DVBT2
Definition: scanwizardconfig.h:79
ChannelScanner::ImportM3U
virtual bool ImportM3U(uint cardid, const QString &inputname, uint sourceid, bool is_mpts)
Definition: channelscanner.cpp:332
ScanMonitor
Definition: scanmonitor.h:44
CardUtil::DVBT
@ DVBT
Definition: cardutil.h:53
CardUtil::GetVideoDevice
static QString GetVideoDevice(uint inputid)
Definition: cardutil.h:279
ChannelScanner::ImportExternRecorder
virtual bool ImportExternRecorder(uint cardid, const QString &inputname, uint sourceid)
Definition: channelscanner.cpp:379