diff --git a/mythtv/libs/libmythtv/eitscanner.cpp b/mythtv/libs/libmythtv/eitscanner.cpp
index 3a67c6d760..b20b5d6f01 100644
a
|
b
|
EITScanner::EITScanner(uint _cardnum) |
35 | 35 | exitThread(false), |
36 | 36 | rec(NULL), activeScan(false), |
37 | 37 | activeScanStopped(true), activeScanTrigTime(0), |
| 38 | activeScanNextChanIndex(INT_MAX), |
38 | 39 | cardnum(_cardnum) |
39 | 40 | { |
40 | 41 | QStringList langPref = iso639_get_language_list(); |
… |
… |
void EITScanner::run(void) |
128 | 129 | } |
129 | 130 | |
130 | 131 | if (activeScanNextChan == activeScanChannels.end()) |
| 132 | { |
131 | 133 | activeScanNextChan = activeScanChannels.begin(); |
| 134 | activeScanNextChanIndex = 0; |
| 135 | LOG(VB_EIT, LOG_INFO, |
| 136 | LOC_ID + QString("##EITScanner::run1 %1 of %2") |
| 137 | .arg(activeScanNextChanIndex) |
| 138 | .arg(activeScanChannels.size())); |
| 139 | } |
132 | 140 | |
133 | 141 | if (!(*activeScanNextChan).isEmpty()) |
134 | 142 | { |
… |
… |
void EITScanner::run(void) |
147 | 155 | activeScanNextTrig = MythDate::current() |
148 | 156 | .addSecs(activeScanTrigTime); |
149 | 157 | ++activeScanNextChan; |
| 158 | if (activeScanChannels.size()) |
| 159 | { |
| 160 | activeScanNextChanIndex = |
| 161 | (activeScanNextChanIndex+1) % activeScanChannels.size(); |
| 162 | LOG(VB_EIT, LOG_INFO, |
| 163 | LOC_ID + QString("##EITScanner::run2 %1 of %2") |
| 164 | .arg(activeScanNextChanIndex) |
| 165 | .arg(activeScanChannels.size())); |
| 166 | } |
150 | 167 | |
151 | 168 | // 24 hours ago |
152 | 169 | #if QT_VERSION < QT_VERSION_CHECK(5,8,0) |
… |
… |
void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source) |
272 | 289 | // order when the backend is first started up. |
273 | 290 | if (activeScanChannels.size()) |
274 | 291 | { |
275 | | uint randomStart = random() % activeScanChannels.size(); |
276 | | activeScanNextChan = activeScanChannels.begin()+randomStart; |
| 292 | // Start on a random channel the first time. For all |
| 293 | // subsequent times, start on the next channel. This makes |
| 294 | // sure the immediately following channels get scanned in a |
| 295 | // timely manner if we keep erroring out on the previous |
| 296 | // channel. |
| 297 | if (activeScanNextChanIndex >= activeScanChannels.size()) |
| 298 | activeScanNextChanIndex = random(); |
| 299 | else |
| 300 | activeScanNextChanIndex += 1; |
| 301 | activeScanNextChanIndex = |
| 302 | activeScanNextChanIndex % activeScanChannels.size(); |
| 303 | activeScanNextChan = |
| 304 | activeScanChannels.begin() + activeScanNextChanIndex; |
| 305 | LOG(VB_EIT, LOG_INFO, |
| 306 | LOC_ID + QString("##EITScanner::StartActiveScan1 %1 of %2") |
| 307 | .arg(activeScanNextChanIndex) |
| 308 | .arg(activeScanChannels.size())); |
277 | 309 | |
278 | 310 | activeScanNextTrig = MythDate::current(); |
279 | 311 | activeScanTrigTime = max_seconds_per_source; |
diff --git a/mythtv/libs/libmythtv/eitscanner.h b/mythtv/libs/libmythtv/eitscanner.h
index 9d604021aa..e8853f7b75 100644
a
|
b
|
class EITScanner : public QRunnable |
65 | 65 | uint activeScanTrigTime; |
66 | 66 | QStringList activeScanChannels; |
67 | 67 | QStringList::iterator activeScanNextChan; |
| 68 | uint activeScanNextChanIndex; |
68 | 69 | |
69 | 70 | uint cardnum; |
70 | 71 | |
diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
index c6a9d71385..d4fc42327c 100644
a
|
b
|
void TVRec::HandleStateChange(void) |
1091 | 1091 | changeState = false; |
1092 | 1092 | |
1093 | 1093 | eitScanStartTime = MythDate::current(); |
| 1094 | LOG(VB_CHANNEL, LOG_INFO, |
| 1095 | LOC + QString("##TVRec::HandleStateChange1a %1") |
| 1096 | .arg(eitScanStartTime.toString())); |
1094 | 1097 | if (scanner && (internalState == kState_None)) |
1095 | 1098 | { |
1096 | 1099 | eitScanStartTime = eitScanStartTime.addSecs( |
1097 | 1100 | eitCrawlIdleStart + eit_start_rand(eitTransportTimeout)); |
| 1101 | LOG(VB_CHANNEL, LOG_INFO, |
| 1102 | LOC + QString("##TVRec::HandleStateChange1b %1") |
| 1103 | .arg(eitScanStartTime.toString())); |
1098 | 1104 | } |
1099 | 1105 | else |
| 1106 | { |
1100 | 1107 | eitScanStartTime = eitScanStartTime.addYears(1); |
| 1108 | LOG(VB_CHANNEL, LOG_INFO, |
| 1109 | LOC + QString("##TVRec::HandleStateChange1c %1") |
| 1110 | .arg(eitScanStartTime.toString())); |
| 1111 | } |
1101 | 1112 | } |
1102 | 1113 | #undef TRANSITION |
1103 | 1114 | #undef SET_NEXT |
… |
… |
void TVRec::run(void) |
1293 | 1304 | ClearFlags(kFlagExitPlayer | kFlagFinishRecording, __FILE__, __LINE__); |
1294 | 1305 | |
1295 | 1306 | eitScanStartTime = MythDate::current(); |
| 1307 | LOG(VB_CHANNEL, LOG_INFO, |
| 1308 | LOC + QString("##TVRec::run1a %1") |
| 1309 | .arg(eitScanStartTime.toString())); |
1296 | 1310 | // check whether we should use the EITScanner in this TVRec instance |
1297 | 1311 | if (CardUtil::IsEITCapable(genOpt.inputtype) && |
1298 | 1312 | (!GetDTVChannel() || GetDTVChannel()->IsMaster()) && |
… |
… |
void TVRec::run(void) |
1301 | 1315 | scanner = new EITScanner(inputid); |
1302 | 1316 | eitScanStartTime = eitScanStartTime.addSecs( |
1303 | 1317 | eitCrawlIdleStart + eit_start_rand(eitTransportTimeout)); |
| 1318 | LOG(VB_CHANNEL, LOG_INFO, |
| 1319 | LOC + QString("##TVRec::run1b %1") |
| 1320 | .arg(eitScanStartTime.toString())); |
1304 | 1321 | } |
1305 | 1322 | else |
| 1323 | { |
1306 | 1324 | eitScanStartTime = eitScanStartTime.addYears(1); |
| 1325 | LOG(VB_CHANNEL, LOG_INFO, |
| 1326 | LOC + QString("##TVRec::run1c %1") |
| 1327 | .arg(eitScanStartTime.toString())); |
| 1328 | } |
1307 | 1329 | |
1308 | 1330 | while (HasFlags(kFlagRunMainLoop)) |
1309 | 1331 | { |
… |
… |
void TVRec::run(void) |
1450 | 1472 | LOG(VB_EIT, LOG_INFO, LOC + |
1451 | 1473 | "EIT scanning disabled for this input."); |
1452 | 1474 | eitScanStartTime = eitScanStartTime.addYears(1); |
| 1475 | LOG(VB_CHANNEL, LOG_INFO, |
| 1476 | LOC + QString("##TVRec::run2a %1") |
| 1477 | .arg(eitScanStartTime.toString())); |
1453 | 1478 | } |
1454 | 1479 | else if (!get_use_eit(GetInputId())) |
1455 | 1480 | { |
1456 | 1481 | LOG(VB_EIT, LOG_INFO, LOC + |
1457 | 1482 | "EIT scanning disabled for all sources on this input."); |
1458 | 1483 | eitScanStartTime = eitScanStartTime.addYears(1); |
| 1484 | LOG(VB_CHANNEL, LOG_INFO, |
| 1485 | LOC + QString("##TVRec::run2b %1") |
| 1486 | .arg(eitScanStartTime.toString())); |
1459 | 1487 | } |
1460 | 1488 | else |
1461 | 1489 | { |
… |
… |
void TVRec::run(void) |
1475 | 1503 | SetFlags(kFlagEITScannerRunning, __FILE__, __LINE__); |
1476 | 1504 | eitScanStartTime = |
1477 | 1505 | QDateTime::currentDateTime().addYears(1); |
| 1506 | LOG(VB_CHANNEL, LOG_INFO, |
| 1507 | LOC + QString("##TVRec::run3a %1") |
| 1508 | .arg(eitScanStartTime.toString())); |
1478 | 1509 | } |
1479 | 1510 | else |
1480 | 1511 | { |
… |
… |
void TVRec::run(void) |
1483 | 1514 | "because input %2 is busy") |
1484 | 1515 | .arg(inputid).arg(busy_input.inputid)); |
1485 | 1516 | eitScanStartTime = eitScanStartTime.addSecs(300); |
| 1517 | LOG(VB_CHANNEL, LOG_INFO, |
| 1518 | LOC + QString("##TVRec::run3b %1") |
| 1519 | .arg(eitScanStartTime.toString())); |
1486 | 1520 | } |
1487 | 1521 | inputsLock.unlock(); |
1488 | 1522 | } |