Skip to content

Commit

Permalink
mythexternrecorder: Add ondatastart command option
Browse files Browse the repository at this point in the history
The config file can now specify a command to run as soon as data is detected
from the 'external' application.
  • Loading branch information
jpoet committed May 17, 2020
1 parent 8e28726 commit e4d9172
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
7 changes: 7 additions & 0 deletions mythtv/programs/mythexternrecorder/MythExternControl.cpp
Expand Up @@ -513,6 +513,13 @@ bool Buffer::Fill(const QByteArray & buffer)
static int s_droppedBytes = 0;

m_parent->m_flow_mutex.lock();

if (!m_dataSeen)
{
m_dataSeen = true;
emit m_parent->DataStarted();
}

if (m_data.size() < MAX_QUEUE)
{
block_t blk(reinterpret_cast<const uint8_t *>(buffer.constData()),
Expand Down
2 changes: 2 additions & 0 deletions mythtv/programs/mythexternrecorder/MythExternControl.h
Expand Up @@ -66,6 +66,7 @@ class Buffer : QObject
std::thread m_thread;

stack_t m_data;
bool m_dataSeen {false};

std::chrono::time_point<std::chrono::system_clock> m_heartbeat;
};
Expand Down Expand Up @@ -152,6 +153,7 @@ class MythExternControl : public QObject
void FirstChannel(const QString & serial);
void NextChannel(const QString & serial);
void Cleanup(void);
void DataStarted(void);

public slots:
void SetDescription(const QString & desc) { m_desc = desc; }
Expand Down
32 changes: 32 additions & 0 deletions mythtv/programs/mythexternrecorder/MythExternRecApp.cpp
Expand Up @@ -87,6 +87,7 @@ bool MythExternRecApp::config(void)
m_recDesc = settings.value("RECORDER/desc").toString();
m_cleanup = settings.value("RECORDER/cleanup").toString();
m_tuneCommand = settings.value("TUNER/command", "").toString();
m_onDataStart = settings.value("TUNER/ondatastart", "").toString();
m_channelsIni = settings.value("TUNER/channels", "").toString();
m_lockTimeout = settings.value("TUNER/timeout", "").toInt();
m_scanCommand = settings.value("SCANNER/command", "").toString();
Expand Down Expand Up @@ -295,6 +296,37 @@ Q_SLOT void MythExternRecApp::Cleanup(void)
LOG(VB_RECORD, LOG_INFO, LOC + ": Cleanup finished.");
}

Q_SLOT void MythExternRecApp::DataStarted(void)
{
if (m_onDataStart.isEmpty())
return;

QString cmd = m_onDataStart;

LOG(VB_RECORD, LOG_INFO, LOC +
QString(" Data started, finishing tune: '%1'").arg(cmd));

QProcess finish;
finish.start(cmd);
if (!finish.waitForStarted())
{
LOG(VB_RECORD, LOG_ERR, LOC + ": Failed to finish tune process: "
+ ENO);
return;
}
finish.waitForFinished(5000);
if (finish.state() == QProcess::NotRunning)
{
if (finish.exitStatus() != QProcess::NormalExit)
{
LOG(VB_RECORD, LOG_ERR, LOC + ": Finish tune failed: " + ENO);
return;
}
}

LOG(VB_RECORD, LOG_INFO, LOC + ": tunning finished.");
}

Q_SLOT void MythExternRecApp::LoadChannels(const QString & serial)
{
if (m_channelsIni.isEmpty())
Expand Down
2 changes: 2 additions & 0 deletions mythtv/programs/mythexternrecorder/MythExternRecApp.h
Expand Up @@ -70,6 +70,7 @@ class MythExternRecApp : public QObject
void LockTimeout(const QString & serial);
void HasTuner(const QString & serial);
void Cleanup(void);
void DataStarted(void);
void LoadChannels(const QString & serial);
void FirstChannel(const QString & serial);
void NextChannel(const QString & serial);
Expand Down Expand Up @@ -108,6 +109,7 @@ class MythExternRecApp : public QObject

QProcess m_tuneProc;
QString m_tuneCommand;
QString m_onDataStart;
QString m_channelsIni;
uint m_lockTimeout { 0 };

Expand Down
2 changes: 2 additions & 0 deletions mythtv/programs/mythexternrecorder/main.cpp
Expand Up @@ -116,6 +116,8 @@ int main(int argc, char *argv[])
process, &MythExternRecApp::HasTuner);
QObject::connect(control, &MythExternControl::Cleanup,
process, &MythExternRecApp::Cleanup);
QObject::connect(control, &MythExternControl::DataStarted,
process, &MythExternRecApp::DataStarted);
QObject::connect(control, &MythExternControl::LoadChannels,
process, &MythExternRecApp::LoadChannels);
QObject::connect(control, &MythExternControl::FirstChannel,
Expand Down

0 comments on commit e4d9172

Please sign in to comment.