Skip to content

Commit

Permalink
More libmythtv to std::chrono conversions. (27a)
Browse files Browse the repository at this point in the history
  • Loading branch information
linuxdude42 committed Jan 25, 2021
1 parent 7949b0d commit c273094
Show file tree
Hide file tree
Showing 14 changed files with 69 additions and 67 deletions.
6 changes: 3 additions & 3 deletions mythtv/libs/libmythtv/eitscanner.cpp
Expand Up @@ -132,7 +132,7 @@ void EITScanner::run(void)
}

m_activeScanNextTrig = MythDate::current()
.addSecs(m_activeScanTrigTime);
.addSecs(m_activeScanTrigTime.count());
if (!m_activeScanChannels.empty())
{
++m_activeScanNextChan;
Expand Down Expand Up @@ -214,7 +214,7 @@ void EITScanner::StopPassiveScan(void)
LOG(VB_EIT, LOG_INFO, LOC_ID + "Stopped passive scan");
}

void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source)
void EITScanner::StartActiveScan(TVRec *_rec, std::chrono::seconds max_seconds_per_source)
{
m_rec = _rec;

Expand Down Expand Up @@ -273,7 +273,7 @@ void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source)
m_activeScanTrigTime = max_seconds_per_source;
// Add a little randomness to trigger time so multiple
// cards will have a staggered channel changing time.
m_activeScanTrigTime += MythRandom() % 29;
m_activeScanTrigTime += std::chrono::seconds(MythRandom() % 29);
m_activeScanStopped = false;
m_activeScan = true;
}
Expand Down
4 changes: 2 additions & 2 deletions mythtv/libs/libmythtv/eitscanner.h
Expand Up @@ -39,7 +39,7 @@ class EITScanner : public QRunnable
void StartPassiveScan(ChannelBase *channel, EITSource *eitSource);
void StopPassiveScan(void);

void StartActiveScan(TVRec *_rec, uint max_seconds_per_source);
void StartActiveScan(TVRec *_rec, std::chrono::seconds max_seconds_per_source);

void StopActiveScan(void);

Expand All @@ -65,7 +65,7 @@ class EITScanner : public QRunnable
volatile bool m_activeScanStopped {true}; // protected by lock
QWaitCondition m_activeScanCond; // protected by lock
QDateTime m_activeScanNextTrig;
uint m_activeScanTrigTime {0};
std::chrono::seconds m_activeScanTrigTime {0s};
QStringList m_activeScanChannels;
QStringList::iterator m_activeScanNextChan;
uint m_activeScanNextChanIndex {MythRandom()};
Expand Down
30 changes: 15 additions & 15 deletions mythtv/libs/libmythtv/jobqueue.cpp
Expand Up @@ -790,8 +790,8 @@ bool JobQueue::DeleteAllJobs(uint chanid, const QDateTime &recstartts)

// wait until running job(s) are done
bool jobsAreRunning = true;
int totalSlept = 0;
int maxSleep = 90;
std::chrono::seconds totalSlept = 0s;
std::chrono::seconds maxSleep = 90s;
while (jobsAreRunning && totalSlept < maxSleep)
{
usleep(1000);
Expand All @@ -817,7 +817,7 @@ bool JobQueue::DeleteAllJobs(uint chanid, const QDateTime &recstartts)
jobsAreRunning = false;
continue;
}
if ((totalSlept % 5) == 0)
if ((totalSlept % 5s) == 0s)
{
message = QString("Waiting on %1 jobs still running for "
"chanid %2 @ %3").arg(query.size())
Expand Down Expand Up @@ -1148,15 +1148,15 @@ QString JobQueue::StatusText(int status)
return tr("Undefined");
}

bool JobQueue::InJobRunWindow(int orStartsWithinMins)
bool JobQueue::InJobRunWindow(std::chrono::minutes orStartsWithinMins)
{
QString queueStartTimeStr;
QString queueEndTimeStr;
QTime queueStartTime;
QTime queueEndTime;
QTime curTime = QTime::currentTime();
bool inTimeWindow = false;
orStartsWithinMins = orStartsWithinMins < 0 ? 0 : orStartsWithinMins;
orStartsWithinMins = orStartsWithinMins < 0min ? 0min : orStartsWithinMins;

queueStartTimeStr = gCoreContext->GetSetting("JobQueueWindowStart", "00:00");
queueEndTimeStr = gCoreContext->GetSetting("JobQueueWindowEnd", "23:59");
Expand Down Expand Up @@ -1192,17 +1192,17 @@ bool JobQueue::InJobRunWindow(int orStartsWithinMins)
{
inTimeWindow = true;
}
else if (orStartsWithinMins > 0)
else if (orStartsWithinMins > 0min)
{
// Check if the window starts soon
if (curTime <= queueStartTime)
{
// Start time hasn't passed yet today
if (queueStartTime.secsTo(curTime) <= (orStartsWithinMins * 60))
if (queueStartTime.secsTo(curTime) <= duration_cast<std::chrono::seconds>(orStartsWithinMins).count())
{
LOG(VB_JOBQUEUE, LOG_INFO, LOC +
QString("Job run window will start within %1 minutes")
.arg(orStartsWithinMins));
.arg(orStartsWithinMins.count()));
inTimeWindow = true;
}
}
Expand All @@ -1213,12 +1213,12 @@ bool JobQueue::InJobRunWindow(int orStartsWithinMins)
QDateTime startDateTime = QDateTime(
curDateTime.date(), queueStartTime, Qt::UTC).addDays(1);

if (curDateTime.secsTo(startDateTime) <= (orStartsWithinMins * 60))
if (curDateTime.secsTo(startDateTime) <= duration_cast<std::chrono::seconds>(orStartsWithinMins).count())
{
LOG(VB_JOBQUEUE, LOG_INFO, LOC +
QString("Job run window will start "
"within %1 minutes (tomorrow)")
.arg(orStartsWithinMins));
.arg(orStartsWithinMins.count()));
inTimeWindow = true;
}
}
Expand All @@ -1227,18 +1227,18 @@ bool JobQueue::InJobRunWindow(int orStartsWithinMins)
return inTimeWindow;
}

bool JobQueue::HasRunningOrPendingJobs(int startingWithinMins)
bool JobQueue::HasRunningOrPendingJobs(std::chrono::minutes startingWithinMins)
{
/* startingWithinMins <= 0 - look for any pending jobs
> 0 - only consider pending starting within this time */
QMap<int, JobQueueEntry> jobs;
QMap<int, JobQueueEntry>::Iterator it;
QDateTime maxSchedRunTime = MythDate::current();
bool checkForQueuedJobs = (startingWithinMins <= 0
bool checkForQueuedJobs = (startingWithinMins <= 0min
|| InJobRunWindow(startingWithinMins));

if (checkForQueuedJobs && startingWithinMins > 0) {
maxSchedRunTime = maxSchedRunTime.addSecs(startingWithinMins * 60);
if (checkForQueuedJobs && startingWithinMins > 0min) {
maxSchedRunTime = maxSchedRunTime.addSecs(duration_cast<std::chrono::seconds>(startingWithinMins).count());
LOG(VB_JOBQUEUE, LOG_INFO, LOC +
QString("HasRunningOrPendingJobs: checking for jobs "
"starting before: %1")
Expand All @@ -1259,7 +1259,7 @@ bool JobQueue::HasRunningOrPendingJobs(int startingWithinMins)

if (checkForQueuedJobs) {
if ((tmpStatus != JOB_UNKNOWN) && (!(tmpStatus & JOB_DONE))) {
if (startingWithinMins <= 0) {
if (startingWithinMins <= 0min) {
LOG(VB_JOBQUEUE, LOG_INFO, LOC +
"HasRunningOrPendingJobs: found pending job");
return true;
Expand Down
5 changes: 3 additions & 2 deletions mythtv/libs/libmythtv/jobqueue.h
Expand Up @@ -12,6 +12,7 @@
#include <QMap>

#include "mythtvexp.h"
#include "mythchrono.h"

class MThread;
class ProgramInfo;
Expand Down Expand Up @@ -201,7 +202,7 @@ class MTV_PUBLIC JobQueue : public QObject, public QRunnable
static QString JobText(int jobType);
static QString StatusText(int status);

static bool HasRunningOrPendingJobs(int startingWithinMins = 0);
static bool HasRunningOrPendingJobs(std::chrono::minutes startingWithinMins = 0min);

static int GetJobsInQueue(QMap<int, JobQueueEntry> &jobs,
int findJobs = JOB_LIST_NOT_DONE);
Expand All @@ -227,7 +228,7 @@ class MTV_PUBLIC JobQueue : public QObject, public QRunnable

bool AllowedToRun(const JobQueueEntry& job);

static bool InJobRunWindow(int orStartsWithinMins = 0);
static bool InJobRunWindow(std::chrono::minutes orStartsWithinMins = 0min);

void StartChildJob(void *(*ChildThreadRoutine)(void *), int jobID);

Expand Down
15 changes: 7 additions & 8 deletions mythtv/libs/libmythtv/mythplayerui.cpp
@@ -1,3 +1,5 @@
#include <algorithm>

// MythTV
#include "mythsystemevent.h"
#include "audiooutput.h"
Expand Down Expand Up @@ -762,18 +764,15 @@ void MythPlayerUI::SetWatched(bool ForceWatched)
numFrames = static_cast<uint64_t>((endtime - starttime) * m_videoFrameRate);
}

auto offset = static_cast<int>(round(0.14 * (numFrames / m_videoFrameRate)));

if (offset < 240)
offset = 240; // 4 Minutes Min
else if (offset > 720)
offset = 720; // 12 Minutes Max
// 4 minutes min, 12 minutes max
auto offset = std::chrono::seconds(lround(0.14 * (numFrames / m_videoFrameRate)));
offset = std::clamp(offset, 240s, 720s);

if (ForceWatched || (m_framesPlayed > (numFrames - (offset * m_videoFrameRate))))
if (ForceWatched || (m_framesPlayed > (numFrames - (offset.count() * m_videoFrameRate))))
{
m_playerCtx->m_playingInfo->SaveWatched(true);
LOG(VB_GENERAL, LOG_INFO, LOC + QString("Marking recording as watched using offset %1 minutes")
.arg(offset/60));
.arg(offset.count()/60));
}

m_playerCtx->UnlockPlayingInfo(__FILE__, __LINE__);
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/mythsystemevent.cpp
Expand Up @@ -190,7 +190,7 @@ void MythSystemEventHandler::SubstituteMatches(const QStringList &tokens,
{
// 2rd Try searching for RecordingInfo
RecordingInfo::LoadStatus status = RecordingInfo::kNoProgram;
RecordingInfo recinfo2(chanid, recstartts, false, 0, &status);
RecordingInfo recinfo2(chanid, recstartts, false, 0h, &status);
if (status == RecordingInfo::kFoundProgram)
recinfo2.SubstituteMatches(command);
else
Expand Down
10 changes: 5 additions & 5 deletions mythtv/libs/libmythtv/recordinginfo.cpp
Expand Up @@ -236,7 +236,7 @@ RecordingInfo::RecordingInfo(
*/
RecordingInfo::RecordingInfo(
uint _chanid, const QDateTime &desiredts,
bool genUnknown, uint maxHours, LoadStatus *status)
bool genUnknown, std::chrono::hours maxHours, LoadStatus *status)
{
ProgramList schedList;
ProgramList progList;
Expand All @@ -257,12 +257,12 @@ RecordingInfo::RecordingInfo(
{
ProgramInfo *pginfo = progList[0];

if (maxHours > 0)
if (maxHours > 0h)
{
if (desiredts.secsTo(
pginfo->GetScheduledEndTime()) > (int)maxHours * 3600)
auto maxSecs = duration_cast<std::chrono::seconds>(maxHours);
if (desiredts.secsTo(pginfo->GetScheduledEndTime()) > maxSecs.count())
{
pginfo->SetScheduledEndTime(desiredts.addSecs(maxHours * 3600));
pginfo->SetScheduledEndTime(desiredts.addSecs(maxSecs.count()));
pginfo->SetRecordingEndTime(pginfo->GetScheduledEndTime());
}
}
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/recordinginfo.h
Expand Up @@ -183,7 +183,7 @@ class MTV_PUBLIC RecordingInfo : public ProgramInfo
kFakedZeroMinProgram = 3,
};
RecordingInfo(uint _chanid, const QDateTime &desiredts,
bool genUnknown, uint maxHours = 0,
bool genUnknown, std::chrono::hours maxHours = 0h,
LoadStatus *status = nullptr);

enum SpecialRecordingGroups {
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/tv_play.cpp
Expand Up @@ -7603,7 +7603,7 @@ void TV::QuickRecord()
QDateTime startts = MythDate::fromString(bi.m_startTime);

RecordingInfo::LoadStatus status = RecordingInfo::kNoProgram;
RecordingInfo recinfo(bi.m_chanId, startts, false, 0, &status);
RecordingInfo recinfo(bi.m_chanId, startts, false, 0h, &status);
if (RecordingInfo::kFoundProgram == status)
recinfo.QuickRecord();
recinfo.ToMap(infoMap);
Expand Down
44 changes: 23 additions & 21 deletions mythtv/libs/libmythtv/tv_rec.cpp
Expand Up @@ -53,7 +53,7 @@ static bool is_dishnet_eit(uint inputid);
static int init_jobs(const RecordingInfo *rec, RecordingProfile &profile,
bool on_host, bool transcode_bfr_comm, bool on_line_comm);
static void apply_broken_dvb_driver_crc_hack(ChannelBase* /*c*/, MPEGStreamData* /*s*/);
static int eit_start_rand(uint inputId, int eitTransportTimeout);
static std::chrono::seconds eit_start_rand(uint inputId, std::chrono::seconds eitTransportTimeout);

/** \class TVRec
* \brief This is the coordinating class of the \ref recorder_subsystem.
Expand Down Expand Up @@ -151,12 +151,13 @@ bool TVRec::Init(void)
gCoreContext->GetBoolSetting("AutoTranscodeBeforeAutoCommflag", false);
m_earlyCommFlag = gCoreContext->GetBoolSetting("AutoCommflagWhileRecording", false);
m_runJobOnHostOnly = gCoreContext->GetBoolSetting("JobsRunOnRecordHost", false);
m_eitTransportTimeout =
std::max(gCoreContext->GetNumSetting("EITTransportTimeout", 5) * 60, 6);
m_eitCrawlIdleStart = gCoreContext->GetNumSetting("EITCrawIdleStart", 60);
m_eitTransportTimeout = gCoreContext->GetDurSetting<std::chrono::minutes>("EITTransportTimeout", 5min);
if (m_eitTransportTimeout < 6s)
m_eitTransportTimeout = 6s;
m_eitCrawlIdleStart = gCoreContext->GetDurSetting<std::chrono::seconds>("EITCrawIdleStart", 60s);
m_audioSampleRateDB = gCoreContext->GetNumSetting("AudioSampleRate");
m_overRecordSecNrml = gCoreContext->GetNumSetting("RecordOverTime");
m_overRecordSecCat = gCoreContext->GetNumSetting("CategoryOverTime") * 60;
m_overRecordSecNrml = gCoreContext->GetDurSetting<std::chrono::minutes>("RecordOverTime");
m_overRecordSecCat = gCoreContext->GetDurSetting<std::chrono::minutes>("CategoryOverTime");
m_overRecordCategory= gCoreContext->GetSetting("OverTimeCategory");

m_eventThread->start();
Expand Down Expand Up @@ -332,8 +333,8 @@ QDateTime TVRec::GetRecordEndTime(const ProgramInfo *pi) const
{
bool spcat = (!m_overRecordCategory.isEmpty() &&
pi->GetCategory() == m_overRecordCategory);
int secs = (spcat) ? m_overRecordSecCat : m_overRecordSecNrml;
return pi->GetRecordingEndTime().addSecs(secs);
std::chrono::seconds secs = (spcat) ? m_overRecordSecCat : m_overRecordSecNrml;
return pi->GetRecordingEndTime().addSecs(secs.count());
}

/** \fn TVRec::CancelNextRecording(bool)
Expand Down Expand Up @@ -1019,8 +1020,8 @@ void TVRec::HandleStateChange(void)
{
m_scanner->StopActiveScan();
ClearFlags(kFlagEITScannerRunning, __FILE__, __LINE__);
m_eitScanStartTime = MythDate::current().addSecs(
m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout));
auto secs = m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout);
m_eitScanStartTime = MythDate::current().addSecs(secs.count());
}

// Handle different state transitions
Expand Down Expand Up @@ -1064,8 +1065,8 @@ void TVRec::HandleStateChange(void)
m_eitScanStartTime = MythDate::current();
if (m_scanner && (m_internalState == kState_None))
{
m_eitScanStartTime = m_eitScanStartTime.addSecs(
m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout));
auto secs = m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout);
m_eitScanStartTime = m_eitScanStartTime.addSecs(secs.count());
}
else
{
Expand Down Expand Up @@ -1249,10 +1250,10 @@ static int num_inputs(void)
return -1;
}

static int eit_start_rand(uint inputId, int eitTransportTimeout)
static std::chrono::seconds eit_start_rand(uint inputId, std::chrono::seconds eitTransportTimeout)
{
// Randomize start time a bit
int timeout = static_cast<int>(MythRandom() % (eitTransportTimeout / 3));
auto timeout = std::chrono::seconds(MythRandom()) % (eitTransportTimeout.count() / 3);

// Get the number of inputs and the position of the current input
// to distribute the scan start evenly over eitTransportTimeout
Expand All @@ -1278,8 +1279,8 @@ void TVRec::run(void)
(m_dvbOpt.m_dvbEitScan || get_use_eit(m_inputId))) // EIT is selected for card OR EIT is selected for video source
{
m_scanner = new EITScanner(m_inputId);
m_eitScanStartTime = m_eitScanStartTime.addSecs(
m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout));
auto secs = m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout);
m_eitScanStartTime = m_eitScanStartTime.addSecs(secs.count());
}
else
{
Expand Down Expand Up @@ -3579,8 +3580,8 @@ void TVRec::TuningShutdowns(const TuningRequest &request)
{
m_scanner->StopActiveScan();
ClearFlags(kFlagEITScannerRunning, __FILE__, __LINE__);
m_eitScanStartTime = MythDate::current().addSecs(
m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout));
auto secs = m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout);
m_eitScanStartTime = MythDate::current().addSecs(secs.count());
}

if (m_scanner && !request.IsOnSameMultiplex())
Expand Down Expand Up @@ -4573,9 +4574,10 @@ bool TVRec::GetProgramRingBufferForLiveTV(RecordingInfo **pginfo,
}
}

int hoursMax = gCoreContext->GetNumSetting("MaxHoursPerLiveTVRecording", 8);
if (hoursMax <= 0)
hoursMax = 8;
auto hoursMax =
gCoreContext->GetDurSetting<std::chrono::hours>("MaxHoursPerLiveTVRecording", 8h);
if (hoursMax <= 0h)
hoursMax = 8h;

RecordingInfo *prog = nullptr;
if (m_pseudoLiveTVRecording)
Expand Down
8 changes: 4 additions & 4 deletions mythtv/libs/libmythtv/tv_rec.h
Expand Up @@ -359,11 +359,11 @@ class MTV_PUBLIC TVRec : public SignalMonitorListener, public QRunnable
bool m_transcodeFirst {false};
bool m_earlyCommFlag {false};
bool m_runJobOnHostOnly {false};
int m_eitCrawlIdleStart {60};
int m_eitTransportTimeout {5*60};
std::chrono::seconds m_eitCrawlIdleStart {1min};
std::chrono::seconds m_eitTransportTimeout {5min};
int m_audioSampleRateDB {0};
int m_overRecordSecNrml {0};
int m_overRecordSecCat {0};
std::chrono::seconds m_overRecordSecNrml {0s};
std::chrono::seconds m_overRecordSecCat {0s};
QString m_overRecordCategory;

// Configuration variables from setup routines
Expand Down

0 comments on commit c273094

Please sign in to comment.