commit e0e227d99a9d9cfc6ddebbc152baae719ca37cc1
Author: Mark Spieth <mspieth@digivation.com.au>
Date: Thu Dec 22 01:03:50 2011 +1100
opentv channel and extended eit support
diff --git a/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp b/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
index de955f6e9a..363bed9fde 100644
a
|
b
|
class ScannedChannelInfo |
118 | 118 | nit_vec_t m_nits; |
119 | 119 | sdt_map_t m_sdts; |
120 | 120 | bat_vec_t m_bats; |
| 121 | QMap<uint64_t, uint64_t> opentv_channels; |
121 | 122 | }; |
122 | 123 | |
123 | 124 | /** \class ChannelScanSM |
… |
… |
ChannelScanSM::ChannelScanSM(ScanMonitor *_scan_monitor, |
158 | 159 | m_channelTimeout(channel_timeout), |
159 | 160 | m_inputName(std::move(_inputname)), |
160 | 161 | m_testDecryption(test_decryption), |
| 162 | scanOpenTVBouquet(0), |
| 163 | scanOpenTVRegion(0), |
| 164 | scanOpenTVRegionMask(0), |
161 | 165 | // Misc |
162 | 166 | m_analogSignalHandler(new AnalogSignalHandler(this)) |
163 | 167 | { |
… |
… |
void ChannelScanSM::SetAnalog(bool is_analog) |
251 | 255 | m_signalMonitor->AddListener(m_analogSignalHandler); |
252 | 256 | } |
253 | 257 | |
| 258 | void ChannelScanSM::SetOpenTV(uint openTVBouquet, uint openTVRegion) |
| 259 | { |
| 260 | scanOpenTVBouquet = openTVBouquet; |
| 261 | scanOpenTVRegion = openTVRegion; |
| 262 | if (openTVRegion) |
| 263 | scanOpenTVRegionMask = 1 << openTVRegion; |
| 264 | else |
| 265 | scanOpenTVRegionMask = (uint)-1; |
| 266 | } |
| 267 | |
254 | 268 | void ChannelScanSM::HandleAllGood(void) |
255 | 269 | { |
256 | 270 | QMutexLocker locker(&m_lock); |
… |
… |
void ChannelScanSM::HandleBAT(const BouquetAssociationTable *bat) |
507 | 521 | |
508 | 522 | m_otherTableTime = m_timer.elapsed() + m_otherTableTimeout; |
509 | 523 | |
| 524 | if (0 != bat->BouquetDescriptorsLength()) |
| 525 | { |
| 526 | vector<const unsigned char*> desc = |
| 527 | MPEGDescriptor::Parse(bat->BouquetDescriptors(), |
| 528 | bat->BouquetDescriptorsLength()); |
| 529 | } |
| 530 | |
510 | 531 | for (uint i = 0; i < bat->TransportStreamCount(); ++i) |
511 | 532 | { |
512 | 533 | uint tsid = bat->TSID(i); |
… |
… |
void ChannelScanSM::HandleBAT(const BouquetAssociationTable *bat) |
546 | 567 | m_defAuthorities[index] = authority.DefaultAuthority(); |
547 | 568 | } |
548 | 569 | } |
| 570 | |
| 571 | if (scanOpenTVBouquet > 0) |
| 572 | { |
| 573 | const unsigned char *otv_chan_list = |
| 574 | MPEGDescriptor::Find(parsed, PrivateDescriptorID::opentv_channel_list); |
| 575 | if (otv_chan_list) |
| 576 | { |
| 577 | OpenTVChannelListDescriptor opentvChannelList(otv_chan_list); |
| 578 | |
| 579 | uint64_t regionMask = (uint64_t)-1; |
| 580 | if (opentvChannelList.RegionID() > 0 && opentvChannelList.RegionID() < 32) |
| 581 | regionMask = ((uint64_t)1) << opentvChannelList.RegionID(); |
| 582 | |
| 583 | for (uint j = 0; j < opentvChannelList.ChannelCount(); j++) |
| 584 | { |
| 585 | uint64_t index = ((uint64_t)netid << 32) | |
| 586 | bat->BouquetID() << 16 | |
| 587 | opentvChannelList.ServiceID(j); |
| 588 | if (!m_currentInfo) |
| 589 | m_currentInfo = new ScannedChannelInfo(); |
| 590 | if (m_currentInfo->opentv_channels.contains(index)) |
| 591 | { |
| 592 | m_currentInfo->opentv_channels[index] |= regionMask << 32; |
| 593 | } |
| 594 | else |
| 595 | { |
| 596 | m_currentInfo->opentv_channels[index] = |
| 597 | regionMask << 32 | |
| 598 | (opentvChannelList.ChannelID(j) << 16); |
| 599 | } |
| 600 | if (regionMask & scanOpenTVRegionMask) |
| 601 | { |
| 602 | m_currentInfo->opentv_channels[index] |= |
| 603 | opentvChannelList.ChannelNumber(j); |
| 604 | } |
| 605 | } |
| 606 | } |
| 607 | } |
549 | 608 | } |
550 | 609 | UpdateChannelInfo(true); |
551 | 610 | } |
… |
… |
ChannelScanSM::GetChannelList(transport_scan_items_it_t trans_info, |
1652 | 1711 | if (it != ukChanNums.end()) |
1653 | 1712 | { |
1654 | 1713 | info.m_chanNum = QString::number(*it); |
| 1714 | continue; |
| 1715 | } |
| 1716 | |
| 1717 | // See if there is an openTV LCN |
| 1718 | if (scanOpenTVBouquet > 0) |
| 1719 | { |
| 1720 | QMap<uint64_t, uint64_t>::const_iterator oit = scan_info->opentv_channels.find( |
| 1721 | ((qlonglong)info.m_origNetId<<32) | scanOpenTVBouquet << 16 | info.m_serviceId); |
| 1722 | if (oit != scan_info->opentv_channels.end()) |
| 1723 | { |
| 1724 | uint chanNum = (*oit) & 0xffff; |
| 1725 | if (chanNum > 0) |
| 1726 | { |
| 1727 | info.m_chanNum = chanNum; |
| 1728 | continue; |
| 1729 | } |
| 1730 | } |
1655 | 1731 | } |
1656 | 1732 | } |
1657 | 1733 | |
diff --git a/mythtv/libs/libmythtv/channelscan/channelscan_sm.h b/mythtv/libs/libmythtv/channelscan/channelscan_sm.h
index 46613c92b0..2a4908792a 100644
a
|
b
|
class ChannelScanSM : public MPEGStreamListener, |
121 | 121 | void SetChannelTimeout(uint val) { m_channelTimeout = val; } |
122 | 122 | void SetScanDTVTunerType(DTVTunerType t) { m_scanDTVTunerType = t; } |
123 | 123 | void SetScanDTVTunerType(int t) { m_scanDTVTunerType = DTVTunerType(t); } |
| 124 | void SetOpenTV(uint openTVBouquet, uint openTVRegion); |
124 | 125 | |
125 | 126 | uint GetSignalTimeout(void) const { return m_signalTimeout; } |
126 | 127 | uint GetChannelTimeout(void) const { return m_channelTimeout; } |
… |
… |
class ChannelScanSM : public MPEGStreamListener, |
225 | 226 | // Optional info |
226 | 227 | DTVTunerType m_scanDTVTunerType {DTVTunerType::kTunerTypeUnknown}; |
227 | 228 | |
| 229 | uint scanOpenTVBouquet; |
| 230 | uint scanOpenTVRegion; |
| 231 | uint scanOpenTVRegionMask; |
| 232 | |
228 | 233 | /// The big lock |
229 | 234 | mutable QMutex m_lock; |
230 | 235 | |
diff --git a/mythtv/libs/libmythtv/channelscan/channelscanmiscsettings.h b/mythtv/libs/libmythtv/channelscan/channelscanmiscsettings.h
index 9f8ed5fa3f..0c36530987 100644
a
|
b
|
class ScanRollOff: public TransMythUIComboBoxSetting |
443 | 443 | }; |
444 | 444 | }; |
445 | 445 | |
| 446 | class OpenTVBouquet: public TransTextEditSetting |
| 447 | { |
| 448 | public: |
| 449 | OpenTVBouquet() |
| 450 | { |
| 451 | setLabel(QObject::tr("OpenTV Bouquet")); |
| 452 | setHelpText(QObject::tr("OpenTV Bouquet (Default: 0 = dont use)\n" |
| 453 | "OpenTV Bouquet for channel numbers.")); |
| 454 | }; |
| 455 | }; |
| 456 | |
| 457 | class OpenTVRegion: public TransTextEditSetting |
| 458 | { |
| 459 | public: |
| 460 | OpenTVRegion() |
| 461 | { |
| 462 | setLabel(QObject::tr("OpenTV Region")); |
| 463 | setHelpText(QObject::tr("OpenTV Region (Default: 0 = use any)\n" |
| 464 | "OpenTV Region for preferred channel numbers when duplicates exist.")); |
| 465 | }; |
| 466 | }; |
| 467 | |
446 | 468 | class PaneError : public GroupSetting |
447 | 469 | { |
448 | 470 | public: |
diff --git a/mythtv/libs/libmythtv/channelscan/channelscanner.cpp b/mythtv/libs/libmythtv/channelscan/channelscanner.cpp
index f20db6b584..7aa781685c 100644
a
|
b
|
void ChannelScanner::Scan( |
122 | 122 | bool do_full_channel_search, |
123 | 123 | bool do_add_full_ts, |
124 | 124 | ServiceRequirements service_requirements, |
| 125 | uint opentvBouquet, |
| 126 | uint opentvRegion, |
125 | 127 | // stuff needed for particular scans |
126 | 128 | uint mplexid /* TransportScan */, |
127 | 129 | const QMap<QString,QString> &startChan /* NITAddScan */, |
… |
… |
void ChannelScanner::Scan( |
155 | 157 | |
156 | 158 | bool ok = false; |
157 | 159 | |
| 160 | if (opentvBouquet) |
| 161 | m_sigmonScanner->SetOpenTV(opentvBouquet, opentvRegion); |
| 162 | |
158 | 163 | if ((ScanTypeSetting::FullScan_ATSC == scantype) || |
159 | 164 | (ScanTypeSetting::FullScan_DVBC == scantype) || |
160 | 165 | (ScanTypeSetting::FullScan_DVBT == scantype) || |
diff --git a/mythtv/libs/libmythtv/channelscan/channelscanner.h b/mythtv/libs/libmythtv/channelscan/channelscanner.h
index 66e0f9b7d9..ffab7fc6d4 100644
a
|
b
|
class MTV_PUBLIC ChannelScanner |
81 | 81 | bool do_full_channel_search, |
82 | 82 | bool do_add_full_ts, |
83 | 83 | ServiceRequirements service_requirements, |
| 84 | uint opentvBouquet, |
| 85 | uint opentvRegion, |
84 | 86 | // stuff needed for particular scans |
85 | 87 | uint mplexid, |
86 | 88 | const QMap<QString,QString> &startChan, |
diff --git a/mythtv/libs/libmythtv/channelscan/scanwizardconfig.cpp b/mythtv/libs/libmythtv/channelscan/scanwizardconfig.cpp
index 5e4a76e4a3..4af8114c44 100644
a
|
b
|
void ScanWizard::SetupConfig( |
37 | 37 | m_fullSearch = new FullChannelSearch(); |
38 | 38 | m_addFullTS = new AddFullTS(); |
39 | 39 | m_trustEncSI = new TrustEncSISetting(); |
| 40 | opentvBouquet = new OpenTVBouquet(); |
| 41 | opentvRegion = new OpenTVRegion(); |
40 | 42 | |
41 | 43 | setLabel(tr("Channel Scan")); |
42 | 44 | |
… |
… |
void ScanWizard::SetupConfig( |
47 | 49 | addChild(m_fullSearch); |
48 | 50 | addChild(m_addFullTS); |
49 | 51 | addChild(m_trustEncSI); |
| 52 | addChild(opentvBouquet); |
| 53 | addChild(opentvRegion); |
50 | 54 | |
51 | 55 | addChild(m_videoSource); |
52 | 56 | addChild(m_input); |
… |
… |
bool ScanWizard::DoTestDecryption(void) const |
110 | 114 | return m_trustEncSI->boolValue(); |
111 | 115 | } |
112 | 116 | |
| 117 | uint ScanWizard::GetOpenTVBouquet(void) const |
| 118 | { |
| 119 | return opentvBouquet->getValue().toUInt(0); |
| 120 | } |
| 121 | |
| 122 | uint ScanWizard::GetOpenTVRegion(void) const |
| 123 | { |
| 124 | return opentvRegion->getValue().toUInt(0); |
| 125 | } |
| 126 | |
113 | 127 | void ScanWizard::SetPaneDefaults(const QString &cardid_inputname) |
114 | 128 | { |
115 | 129 | const int sourceid = m_videoSource->getValue().toInt(); |
diff --git a/mythtv/libs/libmythtv/channelscan/scanwizardconfig.h b/mythtv/libs/libmythtv/channelscan/scanwizardconfig.h
index 0b4d968d63..5a208ce221 100644
a
|
b
|
class CompleteChannelsOnly; |
49 | 49 | class FullChannelSearch; |
50 | 50 | class AddFullTS; |
51 | 51 | class TrustEncSISetting; |
| 52 | class OpenTVBouquet; |
| 53 | class OpenTVRegion; |
52 | 54 | |
53 | 55 | class PaneAll; |
54 | 56 | class PaneATSC; |
… |
… |
class ScanOptionalConfig : public GroupSetting |
151 | 153 | PaneDVBUtilsImport *m_paneDVBUtilsImport {nullptr}; |
152 | 154 | PaneExistingScanImport *m_paneExistingScanImport {nullptr}; |
153 | 155 | }; |
154 | | |
155 | 156 | #endif // _SCAN_WIZARD_CONFIG_H_ |
diff --git a/mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp b/mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp
index 23217ff699..eb2aa7c839 100644
a
|
b
|
QString FreesatCallsignDescriptor::toString(void) const |
682 | 682 | return ret; |
683 | 683 | } |
684 | 684 | |
| 685 | QString OpenTVChannelListDescriptor::toString() const |
| 686 | { |
| 687 | QString ret = QString("OpenTVChannelListDescriptor region: %1 sid->chan_num(id): ").arg(RegionID()); |
| 688 | for (uint i = 0; i < ChannelCount(); i++) |
| 689 | { |
| 690 | ret += QString("%1->%2(%3)").arg(ServiceID(i)).arg(ChannelNumber(i)).arg(ChannelID(i)); |
| 691 | ret += (i+1<ChannelCount()) ? ", " : ""; |
| 692 | } |
| 693 | return ret; |
| 694 | } |
| 695 | |
685 | 696 | QString CAIdentifierDescriptor::toString(void) const |
686 | 697 | { |
687 | 698 | QString ret = QString("CAIdentifierDescriptor "); |
diff --git a/mythtv/libs/libmythtv/mpeg/dvbdescriptors.h b/mythtv/libs/libmythtv/mpeg/dvbdescriptors.h
index 57d2ae0db7..9b7c9b3902 100644
a
|
b
|
class BSkyBLCNDescriptor : public MPEGDescriptor |
2327 | 2327 | QString toString(void) const override; // MPEGDescriptor |
2328 | 2328 | }; |
2329 | 2329 | |
| 2330 | class OpenTVChannelListDescriptor : public MPEGDescriptor |
| 2331 | { |
| 2332 | public: |
| 2333 | OpenTVChannelListDescriptor(const unsigned char *data, int len = 300) : |
| 2334 | MPEGDescriptor(data, len, PrivateDescriptorID::opentv_channel_list) { } |
| 2335 | // Name bits loc expected value |
| 2336 | // descriptor_tag 8 0.0 0xB1 |
| 2337 | // descriptor_length 8 1.0 |
| 2338 | |
| 2339 | uint ChannelCount(void) const { return (DescriptorLength() - 2)/9; } |
| 2340 | |
| 2341 | uint RegionID() const |
| 2342 | { return (m_data[2] << 8) | m_data[3]; } |
| 2343 | |
| 2344 | uint ServiceID(uint i) const |
| 2345 | { return (m_data[4 + 0 + (i*9)] << 8) | m_data[4 + 1 + (i*9)]; } |
| 2346 | |
| 2347 | uint ChannelType(uint i) const |
| 2348 | { return m_data[4 + 2 + (i*9)]; } |
| 2349 | |
| 2350 | uint ChannelID(uint i) const |
| 2351 | { return ((m_data[4 + 3 + (i*9)] << 8) | m_data[4 + 5 + (i*9)]); } |
| 2352 | |
| 2353 | uint ChannelNumber(uint i) const |
| 2354 | { return ((m_data[4 + 5 + (i*9)] << 8) | m_data[4 + 6 + (i*9)]); } |
| 2355 | |
| 2356 | uint Flags(uint i) const |
| 2357 | { return ((m_data[4 + 7 + (i*9)] << 8) | m_data[4 + 8 + (i*9)]) & 0xf; } |
| 2358 | |
| 2359 | QString toString(void) const; |
| 2360 | }; |
| 2361 | |
2330 | 2362 | // ETSI TS 102 323 (TV Anytime) |
2331 | 2363 | class DVBContentIdentifierDescriptor : public MPEGDescriptor |
2332 | 2364 | { |
diff --git a/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp b/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp
index 3d8fb28a14..a57c7bbc56 100644
a
|
b
|
bool DVBStreamData::GetEITPIDChanges(const uint_vec_t &cur_pids, |
473 | 473 | add_pids.push_back(DVB_BVLONG_EIT_PID); |
474 | 474 | } |
475 | 475 | |
| 476 | // opentv eit pids |
| 477 | if (m_dvbEitDishnetLong) |
| 478 | { |
| 479 | uint pid; |
| 480 | for(pid=OTV_EIT_TIT_PID_START; pid <= OTV_EIT_TIT_PID_END; pid++) |
| 481 | { |
| 482 | if (find(cur_pids.begin(), cur_pids.end(), |
| 483 | pid) == cur_pids.end()) |
| 484 | add_pids.push_back(pid); |
| 485 | } |
| 486 | for(pid=OTV_EIT_SUP_PID_START; pid <= OTV_EIT_SUP_PID_END; pid++) |
| 487 | { |
| 488 | if (find(cur_pids.begin(), cur_pids.end(), |
| 489 | pid) == cur_pids.end()) |
| 490 | add_pids.push_back(pid); |
| 491 | } |
| 492 | } |
| 493 | |
476 | 494 | if (m_desiredNetId == PREMIERE_ONID && |
477 | 495 | find(cur_pids.begin(), cur_pids.end(), |
478 | 496 | (uint) PREMIERE_EIT_DIREKT_PID) == cur_pids.end()) |
… |
… |
bool DVBStreamData::GetEITPIDChanges(const uint_vec_t &cur_pids, |
523 | 541 | del_pids.push_back(DVB_BVLONG_EIT_PID); |
524 | 542 | } |
525 | 543 | |
| 544 | // opentv eit pids |
| 545 | if (m_dvbEitDishnetLong) |
| 546 | { |
| 547 | uint pid; |
| 548 | for(pid=OTV_EIT_TIT_PID_START; pid <= OTV_EIT_TIT_PID_END; pid++) |
| 549 | { |
| 550 | if (find(cur_pids.begin(), cur_pids.end(), |
| 551 | pid) != cur_pids.end()) |
| 552 | del_pids.push_back(pid); |
| 553 | } |
| 554 | for(pid=OTV_EIT_SUP_PID_START; pid <= OTV_EIT_SUP_PID_END; pid++) |
| 555 | { |
| 556 | if (find(cur_pids.begin(), cur_pids.end(), |
| 557 | pid) != cur_pids.end()) |
| 558 | del_pids.push_back(pid); |
| 559 | } |
| 560 | } |
| 561 | |
526 | 562 | if (m_desiredNetId == PREMIERE_ONID && |
527 | 563 | find(cur_pids.begin(), cur_pids.end(), |
528 | 564 | (uint) PREMIERE_EIT_DIREKT_PID) != cur_pids.end()) |
diff --git a/mythtv/libs/libmythtv/mpeg/mpegdescriptors.cpp b/mythtv/libs/libmythtv/mpeg/mpegdescriptors.cpp
index db8cb7fc93..dae8e1a2b5 100644
a
|
b
|
QString MPEGDescriptor::DescriptorTagString(void) const |
375 | 375 | case PrivateDescriptorID::premiere_content_transmission: /* 0xF2 */ |
376 | 376 | comma_list_append(str, "Possibly Premiere DE Content Transmission"); |
377 | 377 | break; |
| 378 | case PrivateDescriptorID::opentv_channel_list: /* 0xB1 */ |
| 379 | comma_list_append(str, "Possibly DVB OpenTV Channel List"); |
| 380 | break; |
378 | 381 | } |
379 | 382 | |
380 | 383 | if (str.isEmpty()) |
… |
… |
QString MPEGDescriptor::toStringPD(uint priv_dsid) const |
561 | 564 | SET_STRING(ComponentNameDescriptor); |
562 | 565 | } |
563 | 566 | // POSSIBLY UNSAFE ! -- end |
| 567 | else if (PrivateDescriptorID::opentv_channel_list == DescriptorTag()) |
| 568 | SET_STRING(OpenTVChannelListDescriptor); |
564 | 569 | else |
565 | 570 | { |
566 | 571 | str = QString("%1 Descriptor (0x%2) length(%3). Dumping\n") |
diff --git a/mythtv/libs/libmythtv/mpeg/mpegdescriptors.h b/mythtv/libs/libmythtv/mpeg/mpegdescriptors.h
index f3ad43a65f..dd64a2f611 100644
a
|
b
|
class PrivateDescriptorID |
218 | 218 | premiere_content_order = 0xF0, |
219 | 219 | premiere_parental_information = 0xF1, |
220 | 220 | premiere_content_transmission = 0xF2, |
| 221 | |
| 222 | // Private -- opentv |
| 223 | opentv_titles_1 = 0xA0, /* implemented */ |
| 224 | opentv_titles_2 = 0xA1, /* implemented */ |
| 225 | opentv_titles_3 = 0xA2, /* implemented */ |
| 226 | opentv_titles_4 = 0xA3, /* implemented */ |
| 227 | opentv_summaries_1 = 0xA8, /* implemented */ |
| 228 | opentv_summaries_2 = 0xA9, /* implemented */ |
| 229 | opentv_summaries_3 = 0xAA, /* implemented */ |
| 230 | opentv_summaries_4 = 0xAB, /* implemented */ |
| 231 | opentv_channel_list = 0xB1, /* partial */ |
221 | 232 | }; |
222 | 233 | }; |
223 | 234 | |
diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.h b/mythtv/libs/libmythtv/mpeg/mpegtables.h
index 045fd475e9..39c44e8d1d 100644
a
|
b
|
enum |
234 | 234 | /// The all-ones PID value 0x1FFF indicates a Null TS Packet |
235 | 235 | /// introduced to maintain a constant bit rate of a TS Multiplex. |
236 | 236 | MPEG_NULL_PID = 0x1fff, |
| 237 | |
| 238 | // OpenTV EIT PIDs |
| 239 | OTV_EIT_TIT_PID_START = 0x30, |
| 240 | OTV_EIT_TIT_PID_END = 0x37, |
| 241 | OTV_EIT_SUP_PID_START = 0x40, |
| 242 | OTV_EIT_SUP_PID_END = 0x47, |
237 | 243 | }; |
238 | 244 | |
239 | 245 | /** \class TableID |
… |
… |
class MTV_PUBLIC TableID |
364 | 370 | SRVLOC = 0xA1, |
365 | 371 | TSS = 0xA2, |
366 | 372 | CMPNAME = 0xA3, |
| 373 | |
| 374 | // opentv |
| 375 | OTV_EIT_TITbeg = 0xA0, // always on pids config (0x30-0x37) |
| 376 | OTV_EIT_TITend = 0xA3, // always on pids config (0x30-0x37) |
| 377 | OTV_EIT_SUMbeg = 0xA8, // always on pids config (0x40-0x47) |
| 378 | OTV_EIT_SUMend = 0xAB, // always on pids config (0x40-0x47) |
367 | 379 | }; |
368 | 380 | }; |
369 | 381 | |
diff --git a/mythtv/libs/libmythtv/scanwizard.cpp b/mythtv/libs/libmythtv/scanwizard.cpp
index 6b6f18478d..d200ef9f11 100644
a
|
b
|
void ScanWizard::Scan() |
186 | 186 | DoChannelNumbersOnly(), DoCompleteChannelsOnly(), |
187 | 187 | DoFullChannelSearch(), |
188 | 188 | DoAddFullTS(), GetServiceRequirements(), |
| 189 | GetOpenTVBouquet(), GetOpenTVRegion(), |
| 190 | |
189 | 191 | // stuff needed for particular scans |
190 | 192 | GetMultiplex(), start_chan, |
191 | 193 | GetFrequencyStandard(), GetModulation(), |
diff --git a/mythtv/libs/libmythtv/scanwizard.h b/mythtv/libs/libmythtv/scanwizard.h
index 1d9edab85e..4d7637890e 100644
a
|
b
|
class MTV_PUBLIC ScanWizard : public GroupSetting |
94 | 94 | bool DoFullChannelSearch(void) const; |
95 | 95 | bool DoAddFullTS(void) const; |
96 | 96 | bool DoTestDecryption(void) const; |
| 97 | uint GetOpenTVBouquet(void) const; |
| 98 | uint GetOpenTVRegion(void) const; |
97 | 99 | |
98 | 100 | protected: |
99 | 101 | VideoSourceSelector *m_videoSource {nullptr}; |
… |
… |
class MTV_PUBLIC ScanWizard : public GroupSetting |
107 | 109 | FullChannelSearch *m_fullSearch {nullptr}; |
108 | 110 | AddFullTS *m_addFullTS {nullptr}; |
109 | 111 | TrustEncSISetting *m_trustEncSI {nullptr}; |
| 112 | OpenTVBouquet *opentvBouquet; |
| 113 | OpenTVRegion *opentvRegion; |
110 | 114 | // End of members moved from ScanWizardConfig |
111 | 115 | }; |
112 | 116 | |
diff --git a/mythtv/programs/mythtv-setup/main.cpp b/mythtv/programs/mythtv-setup/main.cpp
index 8b2fc8ccab..5a8e4a4fd9 100644
a
|
b
|
int main(int argc, char *argv[]) |
258 | 258 | bool scanCompleteOnly = false; |
259 | 259 | bool scanFullChannelSearch = false; |
260 | 260 | bool addFullTS = false; |
| 261 | uint scanOpenTVBouquet = 0; |
| 262 | uint scanOpenTVRegion = 0; |
261 | 263 | ServiceRequirements scanServiceRequirements = kRequireAV; |
262 | 264 | uint scanCardId = 0; |
263 | 265 | QString frequencyStandard = "atsc"; |
… |
… |
int main(int argc, char *argv[]) |
351 | 353 | scanFullChannelSearch = true; |
352 | 354 | if (cmdline.toBool("addfullts")) |
353 | 355 | addFullTS = true; |
| 356 | if (cmdline.toBool("opentvbouquet")) |
| 357 | scanOpenTVBouquet = cmdline.toUInt("opentvbouquet"); |
| 358 | if (cmdline.toBool("opentvregion")) |
| 359 | scanOpenTVRegion = cmdline.toUInt("opentvregion"); |
354 | 360 | if (cmdline.toBool("servicetype")) |
355 | 361 | { |
356 | 362 | scanServiceRequirements = kRequireNothing; |
… |
… |
int main(int argc, char *argv[]) |
509 | 515 | scanFullChannelSearch, |
510 | 516 | addFullTS, |
511 | 517 | scanServiceRequirements, |
| 518 | scanOpenTVBouquet, |
| 519 | scanOpenTVRegion, |
512 | 520 | // stuff needed for particular scans |
513 | 521 | /* mplexid */ 0, |
514 | 522 | startChan, frequencyStandard, modulation, region); |