32#include "libmythbase/mythconfig.h"
53#define LOC QString("ChScan: ")
90 m_vboxScanner->
Stop();
92 m_vboxScanner =
nullptr;
97 if (m_externRecScanner)
99 m_externRecScanner->Stop();
100 delete m_externRecScanner;
101 m_externRecScanner =
nullptr;
115 const QString &inputname,
117 bool do_ignore_signal_timeout,
119 bool do_test_decryption,
122 bool do_complete_only,
123 bool do_full_channel_search,
124 bool do_remove_duplicates,
129 const QMap<QString,QString> &startChan,
130 const QString &freq_std,
133 const QString &tbl_start,
134 const QString &tbl_end)
146 sourceid, do_ignore_signal_timeout, do_test_decryption);
148 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
"Scan()");
152 LOG(VB_CHANSCAN, LOG_ERR,
LOC +
"Scan(): scanner does not exist...");
168 LOG(VB_CHANSCAN, LOG_INFO,
LOC + QString(
"ScanTransports(%1, %2, %3)")
169 .arg(freq_std, mod, tbl));
173 if ((mod.startsWith(
"qam", Qt::CaseInsensitive)) &&
183 sourceid, freq_std, mod, tbl, tbl_start, tbl_end);
192 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
"ScanTransports()");
199 LOG(VB_CHANSCAN, LOG_INFO,
LOC + QString(
"ScanExistingTransports of source %1")
217 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
218 QString(
"ScanForChannels for source %1").arg(sourceid));
221 QString sub_type = card_type;
222 if (card_type ==
"DVB")
226 ok = !device.isEmpty();
250 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
"IPTVImportMPTS: no channels");
254 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
255 QString(
"ScanIPTVChannels(%1) IPTV MPTS").arg(sourceid));
262 InformUser(tr(
"Error scanning MPTS in IPTV"));
269 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
270 QString(
"ScanTransport(%1)").arg(mplexid));
276 QString sistandard =
"mpeg";
277 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
278 "ScanCurrentTransport(" + sistandard +
")");
283 LOG(VB_CHANSCAN, LOG_INFO,
LOC +
284 "Importing channels from External Recorder");
290 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to handle tune complete.");
292 "Failed to handle tune complete."));
342 msg = tr(
"Failed to parse '%1'").arg(
file);
344 msg = tr(
"Programmer Error : incorrect card type");
346 msg = tr(
"Failed to open '%1'").arg(
file);
355 [[maybe_unused]]
const QString &inputname,
379 [[maybe_unused]]
const QString &inputname,
381 [[maybe_unused]]
bool ftaOnly,
394 m_vboxScanner->Scan();
403 [[maybe_unused]]
const QString &inputname,
407#if !defined( _WIN32 )
419 m_externRecScanner->Scan();
428 [[maybe_unused]]
const QString &inputname,
442 m_hdhrScanner->Scan();
453 const QString &inputname,
455 [[maybe_unused]]
bool do_ignore_signal_timeout,
456 bool do_test_decryption)
458 bool monitor_snr =
false;
459 std::chrono::milliseconds signal_timeout = 1s;
460 std::chrono::milliseconds channel_timeout = 40s;
464 if (device.isEmpty())
466 LOG(VB_GENERAL, LOG_ERR,
LOC +
"No Device");
467 InformUser(tr(
"Programmer Error: No Device"));
477 if (
"DVB" == card_type)
480 bool need_nit = ((
"QAM" == sub_type) ||
481 (
"QPSK" == sub_type) ||
482 (
"OFDM" == sub_type) ||
483 (
"DVB_T2" == sub_type));
489 signal_timeout = (do_ignore_signal_timeout) ?
490 channel_timeout * 10 : signal_timeout;
494 signal_timeout = std::max(signal_timeout, 1000ms);
499 channel_timeout = std::max(channel_timeout,
static_cast<int>(need_nit) * 7 * 1000ms);
506 if ((
"V4L" == card_type) || (
"MPEG" == card_type))
511 if (
"HDHOMERUN" == card_type)
519 if (
"SATIP" == card_type)
526 if (
"ASI" == card_type)
533 if (
"FREEBOX" == card_type)
540 if (
"VBOX" == card_type)
546#if !defined( _WIN32 )
547 if (
"EXTERNAL" == card_type)
555 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Channel not created");
556 InformUser(tr(
"Programmer Error: Channel not created"));
566 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Channel could not be opened");
567 InformUser(tr(
"Channel could not be opened."));
574 sourceid, signal_timeout, channel_timeout,
575 inputname, do_test_decryption);
618 bool using_rotor =
false;
629 bool monitor_lock = mon !=
nullptr;
630 bool monitor_strength = mon !=
nullptr;
631 MonitorProgress(monitor_lock, monitor_strength, monitor_snr, using_rotor);
static QString GetRawInputType(uint inputid)
static QString ProbeDVBType(const QString &device)
INPUT_TYPES
all the different inputs
static QString GetVideoDevice(uint inputid)
static bool GetTimeouts(uint inputid, std::chrono::milliseconds &signal_timeout, std::chrono::milliseconds &channel_timeout)
virtual bool Open(void)=0
Opens the channel changing hardware for use.
void SetInputID(uint _inputid)
Scanning class for cards that support a SignalMonitor class.
bool ScanTransportsStartingOn(int sourceid, const QMap< QString, QString > &startChan)
Generates a list of frequencies to scan and adds it to the scanTransport list, and then sets the scan...
bool ScanForChannels(uint sourceid, const QString &std, const QString &cardtype, const DTVChannelList &channels)
bool ScanTransport(uint mplexid, bool follow_nit)
void SetAnalog(bool is_analog)
DVBSignalMonitor * GetDVBSignalMonitor(void)
void SetSignalTimeout(std::chrono::milliseconds val)
SignalMonitor * GetSignalMonitor(void)
bool ScanTransports(int SourceID, const QString &std, const QString &mod, const QString &country, const QString &table_start=QString(), const QString &table_end=QString())
Generates a list of frequencies to scan and adds it to the scanTransport list, and then sets the scan...
std::chrono::milliseconds GetSignalTimeout(void) const
bool ScanExistingTransports(uint sourceid, bool follow_nit)
If we are not already scanning a frequency table, this creates a new frequency table from database an...
bool ScanCurrentTransport(const QString &sistandard)
void StartScanner(void)
Starts the ChannelScanSM event loop.
bool ScanIPTVChannels(uint sourceid, const fbox_chan_map_t &iptv_channels)
void SetScanDTVTunerType(DTVTunerType t)
bool m_completeOnly
Only complete channels desired post scan?
virtual DTVConfParser::return_t ImportDVBUtils(uint sourceid, CardUtil::INPUT_TYPES cardtype, const QString &file)
virtual ~ChannelScanner()
IPTVChannelFetcher * m_iptvScanner
ChannelScanSM * m_sigmonScanner
virtual bool ImportHDHR(uint cardid, const QString &inputname, uint sourceid, ServiceRequirements serviceType)
virtual void Teardown(void)
virtual void PreScanCommon(int scantype, uint cardid, const QString &inputname, uint sourceid, bool do_ignore_signal_timeout, bool do_test_decryption)
virtual bool ImportM3U(uint cardid, const QString &inputname, uint sourceid, bool is_mpts)
bool m_fullSearch
Extended search for old channels post scan?
bool m_channelNumbersOnly
Only channels with logical channel numbers desired post scan?
fbox_chan_map_t m_iptvChannels
bool m_freeToAirOnly
Only fta channels desired post scan?
bool m_removeDuplicates
Remove duplicate transports and channels?
DTVChannelList m_channels
imported channels
virtual void MonitorProgress(bool, bool, bool, bool)
virtual bool ImportVBox(uint cardid, const QString &inputname, uint sourceid, bool ftaOnly, ServiceRequirements serviceType)
ScanMonitor * m_scanMonitor
bool m_addFullTS
Add MPTS "full transport stream" channels.
ServiceRequirements m_serviceRequirements
Services desired post scan.
virtual void InformUser(const QString &)=0
virtual bool ImportExternRecorder(uint cardid, const QString &inputname, uint sourceid)
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())
Parses dvb-utils channel scanner output files.
static const int kTunerTypeDVBS2
static const int kTunerTypeDVBT
static const int kTunerTypeDVBC
static const int kTunerTypeDVBS1
static const int kTunerTypeDVBT2
static const int kTunerTypeATSC
Provides interface to the tuning hardware when using DVB drivers.
void Stop(void)
Stops the scanning thread running.
fbox_chan_map_t GetChannels(void)
void Scan(void)
Scans the given frequency list.
void ScanPercentComplete(int pct)
virtual void deleteLater(void)
void ScanUpdateStatusText(const QString &status)
@ CurrentTransportScan
Scans the transport when there is no tuner (for ASI)
Signal monitoring base class.
void AddListener(SignalMonitorListener *listener)
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
bool HasFlags(uint64_t _flags) const
Implements tuning for TV cards using the V4L driver API, both versions 1 and 2.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)