42 #ifdef USING_DVB // for bug in gcc 8.3 50 #define LOC QString("ChScan: ") 58 m_scanMonitor->deleteLater();
59 m_scanMonitor =
nullptr;
67 delete m_sigmonScanner;
68 m_sigmonScanner =
nullptr;
79 m_iptvScanner->Stop();
81 m_iptvScanner =
nullptr;
87 m_vboxScanner->Stop();
89 m_vboxScanner =
nullptr;
93 #if !defined( USING_MINGW ) && !defined( _MSC_VER ) 94 if (m_ExternRecScanner)
96 m_ExternRecScanner->Stop();
97 delete m_ExternRecScanner;
98 m_ExternRecScanner =
nullptr;
104 m_scanMonitor->deleteLater();
105 m_scanMonitor =
nullptr;
114 const QString &inputname,
116 bool do_ignore_signal_timeout,
118 bool do_test_decryption,
121 bool do_complete_only,
122 bool do_full_channel_search,
127 const QMap<QString,QString> &startChan ,
128 const QString &freq_std ,
131 const QString &tbl_start ,
132 const QString &tbl_end )
134 m_freeToAirOnly = do_fta_only;
135 m_channelNumbersOnly = do_lcn_only;
136 m_completeOnly = do_complete_only;
137 m_fullSearch = do_full_channel_search;
138 m_addFullTS = do_add_full_ts;
139 m_serviceRequirements = service_requirements;
140 m_sourceid = sourceid;
142 PreScanCommon(scantype, cardid, inputname,
143 sourceid, do_ignore_signal_timeout, do_test_decryption);
145 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
"Scan()");
147 if (!m_sigmonScanner)
149 LOG(VB_CHANSCAN, LOG_ERR,
LOC +
"Scan(): scanner does not exist...");
153 m_sigmonScanner->StartScanner();
154 m_scanMonitor->ScanUpdateStatusText(
"");
164 LOG(VB_CHANSCAN, LOG_INFO,
LOC + QString(
"ScanTransports(%1, %2, %3)")
165 .arg(freq_std).arg(mod).arg(tbl));
169 if ((mod.startsWith(
"qam", Qt::CaseInsensitive)) &&
170 (m_sigmonScanner->GetSignalTimeout() < 1000))
172 m_sigmonScanner->SetSignalTimeout(1000);
178 ok = m_sigmonScanner->ScanTransports(
179 sourceid, freq_std, mod, tbl, tbl_start, tbl_end);
187 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
"ScanTransports()");
189 ok = m_sigmonScanner->ScanTransportsStartingOn(sourceid, startChan);
193 LOG(VB_CHANSCAN, LOG_INFO,
LOC + QString(
"ScanExistingTransports(%1)")
196 ok = m_sigmonScanner->ScanExistingTransports(sourceid, do_follow_nit);
199 m_scanMonitor->ScanPercentComplete(0);
203 InformUser(tr(
"Error tuning to transport"));
211 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
212 QString(
"ScanForChannels(%1)").arg(sourceid));
215 QString sub_type = card_type;
216 if (card_type ==
"DVB")
220 ok = !device.isEmpty();
227 ok = m_sigmonScanner->ScanForChannels(sourceid, freq_std,
228 sub_type, m_channels);
232 m_scanMonitor->ScanPercentComplete(0);
236 InformUser(tr(
"Error tuning to transport"));
242 if (m_iptv_channels.empty())
244 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
"IPTVImportMPTS: no channels");
248 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
249 QString(
"ScanIPTVChannels(%1) IPTV MPTS").arg(sourceid));
251 if ((ok = m_sigmonScanner->ScanIPTVChannels(sourceid, m_iptv_channels)))
252 m_scanMonitor->ScanPercentComplete(0);
255 InformUser(tr(
"Error scanning MPTS in IPTV"));
262 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
263 QString(
"ScanTransport(%1)").arg(mplexid));
265 ok = m_sigmonScanner->ScanTransport(mplexid, do_follow_nit);
269 QString sistandard =
"mpeg";
270 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
271 "ScanCurrentTransport(" + sistandard +
")");
272 ok = m_sigmonScanner->ScanCurrentTransport(sistandard);
276 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
277 "Importing channels from External Recorder");
278 ok = ImportExternRecorder(cardid, inputname, sourceid);
283 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to handle tune complete.");
284 InformUser(tr(
"Programmer Error: " 285 "Failed to handle tune complete."));
290 uint sourceid,
int cardtype,
const QString &
file)
292 m_sourceid = sourceid;
313 m_channels =
parser.GetChannels();
319 tr(
"Failed to parse '%1'").arg(
file) :
321 tr(
"Programmer Error : incorrect card type") :
322 tr(
"Failed to open '%1'").arg(
file));
331 uint sourceid,
bool is_mpts)
335 m_sourceid = sourceid;
342 is_mpts, m_scanMonitor);
344 MonitorProgress(
false,
false,
false,
false);
346 m_iptvScanner->Scan();
349 m_iptv_channels = m_iptvScanner->GetChannels();
357 m_sourceid = sourceid;
363 m_vboxScanner =
new VBoxChannelFetcher(cardid, inputname, sourceid, ftaOnly, serviceType, m_scanMonitor);
365 MonitorProgress(
false,
false,
false,
false);
367 m_vboxScanner->Scan();
380 m_sourceid = sourceid;
381 #if !defined( USING_MINGW ) && !defined( _MSC_VER ) 391 MonitorProgress(
false,
false,
false,
false);
393 m_ExternRecScanner->Scan();
407 const QString &inputname,
409 bool do_ignore_signal_timeout,
410 bool do_test_decryption)
412 uint signal_timeout = 1000;
413 uint channel_timeout = 40000;
417 if (device.isEmpty())
419 LOG(VB_GENERAL, LOG_ERR,
LOC +
"No Device");
420 InformUser(tr(
"Programmer Error: No Device"));
429 if (
"DVB" == card_type)
432 bool need_nit = ((
"QAM" == sub_type) ||
433 (
"QPSK" == sub_type) ||
434 (
"OFDM" == sub_type) ||
435 (
"DVB_T2" == sub_type));
441 signal_timeout = (do_ignore_signal_timeout) ?
442 channel_timeout * 10 : signal_timeout;
446 signal_timeout = max(signal_timeout, 1000U);
451 channel_timeout = max(channel_timeout, need_nit * 7 * 1000U);
455 if (
"DVB" == card_type)
460 if ((
"V4L" == card_type) || (
"MPEG" == card_type))
464 #ifdef USING_HDHOMERUN 465 if (
"HDHOMERUN" == card_type)
469 #endif // USING_HDHOMERUN 472 if (
"ASI" == card_type)
479 if (
"FREEBOX" == card_type)
486 if (
"VBOX" == card_type)
492 #if !defined( USING_MINGW ) && !defined( _MSC_VER ) 493 if (
"EXTERNAL" == card_type)
501 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Channel not created");
502 InformUser(tr(
"Programmer Error: Channel not created"));
507 m_channel->SetInputID(cardid);
510 if (!m_channel->Open())
512 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Channel could not be opened");
513 InformUser(tr(
"Channel could not be opened."));
519 m_sigmonScanner =
new ChannelScanSM(lis, card_type, m_channel,
520 sourceid, signal_timeout, channel_timeout,
521 inputname, do_test_decryption);
565 bool using_rotor =
false;
569 dvbm = m_sigmonScanner->GetDVBSignalMonitor();
574 MonitorProgress(mon, mon, dvbm, using_rotor);
void AddListener(SignalMonitorListener *listener)
static const int kTunerTypeDVBT
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
static const int kTunerTypeATSC
static QString ProbeDVBType(const QString &device)
virtual void Teardown(void)
Provides interface to the tuning hardware when using DVB drivers.
virtual bool ImportM3U(uint cardid, const QString &inputname, uint sourceid, bool is_mpts)
static const int kTunerTypeDVBS1
static bool GetTimeouts(uint inputid, uint &signal_timeout, uint &channel_timeout)
static const int kTunerTypeDVBS2
static const int kTunerTypeDVBT2
static const int kTunerTypeDVBC
virtual bool ImportExternRecorder(uint cardid, const QString &inputname, uint sourceid)
Parses dvb-utils channel scanner output files.
virtual DTVConfParser::return_t ImportDVBUtils(uint sourceid, int cardtype, const QString &file)
Implements tuning for TV cards using the V4L driver API, both versions 1 and 2.
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_search, 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())
static QString GetVideoDevice(uint inputid)
Signal monitoring base class.
Scanning class for cards that support a SignalMonitor class.
#define LOG(_MASK_, _LEVEL_, _STRING_)
static QString GetRawInputType(uint inputid)
virtual bool ImportVBox(uint cardid, const QString &inputname, uint sourceid, bool ftaOnly, ServiceRequirements serviceType)
Scans the transport when there is no tuner (for ASI)
virtual void PreScanCommon(int scantype, uint cardid, const QString &inputname, uint sourceid, bool do_ignore_signal_timeout, bool do_test_decryption)
virtual ~ChannelScanner()
bool HasFlags(uint64_t _flags) const