MythTV  master
playbacksock.cpp
Go to the documentation of this file.
1 #include <QStringList>
2 #include <utility>
3 
4 using namespace std;
5 
6 #include "compat.h"
7 #include "playbacksock.h"
8 #include "programinfo.h"
9 #include "mainserver.h"
10 
11 #include "mythcorecontext.h"
12 #include "mythdate.h"
13 #include "inputinfo.h"
14 #include "referencecounter.h"
15 
16 #define LOC QString("PlaybackSock: ")
17 #define LOC_ERR QString("PlaybackSock, Error: ")
18 
20  MainServer *parent, MythSocket *lsock,
21  QString lhostname, PlaybackSockEventsMode eventsMode) :
22  ReferenceCounter("PlaybackSock")
23 {
24  m_parent = parent;
25  QString localhostname = gCoreContext->GetHostName();
26 
27  m_sock = lsock;
28  m_hostname = std::move(lhostname);
30  m_ip = "";
31 
32  m_local = (m_hostname == localhostname);
33 }
34 
36 {
37  m_sock->DecrRef();
38  m_sock = nullptr;
39 }
40 
41 bool PlaybackSock::wantsEvents(void) const
42 {
43  return (m_eventsMode != kPBSEvents_None);
44 }
45 
47 {
48  return ((m_eventsMode == kPBSEvents_Normal) ||
50 }
51 
53 {
54  return ((m_eventsMode == kPBSEvents_Normal) ||
56 }
57 
59 {
61 }
62 
64 {
65  return m_eventsMode;
66 }
67 
68 bool PlaybackSock::ReadStringList(QStringList &list)
69 {
70  m_sock->IncrRef();
71  ReferenceLocker rlocker(m_sock);
72  QMutexLocker locker(&m_sockLock);
73  if (!m_sock->IsDataAvailable())
74  {
75  LOG(VB_GENERAL, LOG_DEBUG,
76  "PlaybackSock::ReadStringList(): Data vanished !!!");
77  return false;
78  }
79  return m_sock->ReadStringList(list);
80 }
81 
83  QStringList &strlist, uint min_reply_length)
84 {
85  bool ok = false;
86 
87  m_sock->IncrRef();
88 
89  {
90  QMutexLocker locker(&m_sockLock);
92 
93  ok = m_sock->SendReceiveStringList(strlist);
94  while (ok && strlist[0] == "BACKEND_MESSAGE")
95  {
96  // oops, not for us
97  if (strlist.size() >= 2)
98  {
99  QString message = strlist[1];
100  strlist.pop_front();
101  strlist.pop_front();
102  MythEvent me(message, strlist);
103  gCoreContext->dispatch(me);
104  }
105 
106  ok = m_sock->ReadStringList(strlist);
107  }
109  }
110 
111  m_sock->DecrRef();
112 
113  if (!ok)
114  {
115  LOG(VB_GENERAL, LOG_ERR,
116  "PlaybackSock::SendReceiveStringList(): No response.");
117  return false;
118  }
119 
120  if (min_reply_length && ((uint)strlist.size() < min_reply_length))
121  {
122  LOG(VB_GENERAL, LOG_ERR,
123  "PlaybackSock::SendReceiveStringList(): Response too short");
124  return false;
125  }
126 
127  return true;
128 }
129 
133 {
134  QStringList strlist(QString("GO_TO_SLEEP"));
135 
136  return SendReceiveStringList(strlist, 1) && (strlist[0] == "OK");
137 }
138 
142 void PlaybackSock::GetDiskSpace(QStringList &o_strlist)
143 {
144  QStringList strlist(QString("QUERY_FREE_SPACE"));
145 
146  if (SendReceiveStringList(strlist, 8))
147  {
148  o_strlist += strlist;
149  }
150 }
151 
153 {
154  QStringList strlist(QString("CHECK_RECORDING"));
155  pginfo->ToStringList(strlist);
156 
157  if (SendReceiveStringList(strlist, 1))
158  return strlist[0].toInt();
159 
160  return 0;
161 }
162 
163 int PlaybackSock::DeleteFile(const QString &filename, const QString &sgroup)
164 {
165  QStringList strlist("DELETE_FILE");
166  strlist << filename;
167  strlist << sgroup;
168 
169  if (SendReceiveStringList(strlist, 1))
170  return strlist[0].toInt();
171 
172  return 0;
173 }
174 
176 {
177  QStringList strlist(QString("STOP_RECORDING"));
178  pginfo->ToStringList(strlist);
179 
180  if (SendReceiveStringList(strlist, 1))
181  return strlist[0].toInt();
182 
183  return 0;
184 }
185 
187  bool forceMetadataDelete)
188 {
189  QStringList strlist;
190 
191  if (forceMetadataDelete)
192  strlist = QStringList( QString("FORCE_DELETE_RECORDING"));
193  else
194  strlist = QStringList( QString("DELETE_RECORDING"));
195 
196  pginfo->ToStringList(strlist);
197 
198  if (SendReceiveStringList(strlist, 1))
199  return strlist[0].toInt();
200 
201  return 0;
202 }
203 
205  const QString &playbackhost)
206 {
207  QStringList strlist(QString("FILL_PROGRAM_INFO"));
208  strlist << playbackhost;
209  pginfo.ToStringList(strlist);
210 
211  if (SendReceiveStringList(strlist))
212  {
213  ProgramInfo tmp(strlist);
214  if (tmp.HasPathname() || tmp.GetChanID())
215  {
216  pginfo.clone(tmp, true);
217  return true;
218  }
219  }
220 
221  return false;
222 }
223 
224 QStringList PlaybackSock::GetSGFileList(QString &host, QString &groupname,
225  QString &directory, bool fileNamesOnly)
226 {
227  QStringList strlist(QString("QUERY_SG_GETFILELIST"));
228  strlist << host;
229  strlist << groupname;
230  strlist << directory;
231  strlist << QString::number(static_cast<int>(fileNamesOnly));
232 
233  SendReceiveStringList(strlist);
234 
235  return strlist;
236 }
237 
238 QStringList PlaybackSock::GetSGFileQuery(QString &host, QString &groupname,
239  QString &filename)
240 {
241  QStringList strlist(QString("QUERY_SG_FILEQUERY"));
242  strlist << host;
243  strlist << groupname;
244  strlist << filename;
245 
246  SendReceiveStringList(strlist);
247 
248  return strlist;
249 }
250 
251 QString PlaybackSock::GetFileHash(const QString& filename, const QString& storageGroup)
252 {
253  QStringList strlist(QString("QUERY_FILE_HASH"));
254  strlist << filename
255  << storageGroup;
256 
257  SendReceiveStringList(strlist);
258  return strlist[0];
259 }
260 
261 QStringList PlaybackSock::GetFindFile(const QString &host, const QString &filename,
262  const QString &storageGroup, bool useRegex)
263 {
264  QStringList strlist(QString("QUERY_FINDFILE"));
265  strlist << host
266  << storageGroup
267  << filename
268  << (useRegex ? "1" : "0")
269  << "0";
270 
271  SendReceiveStringList(strlist);
272  return strlist;
273 }
274 
275 QStringList PlaybackSock::GenPreviewPixmap(const QString &token,
276  const ProgramInfo *pginfo)
277 {
278  QStringList strlist(QString("QUERY_GENPIXMAP2"));
279  strlist += token;
280  pginfo->ToStringList(strlist);
281 
282  SendReceiveStringList(strlist);
283 
284  return strlist;
285 }
286 
287 QStringList PlaybackSock::GenPreviewPixmap(const QString &token,
288  const ProgramInfo *pginfo,
289  bool time_fmt_sec,
290  long long time,
291  const QString &outputFile,
292  const QSize &outputSize)
293 {
294  QStringList strlist(QString("QUERY_GENPIXMAP2"));
295  strlist += token;
296  pginfo->ToStringList(strlist);
297  strlist.push_back(time_fmt_sec ? "s" : "f");
298  strlist.push_back(QString::number(time));
299  strlist.push_back((outputFile.isEmpty()) ? "<EMPTY>" : outputFile);
300  strlist.push_back(QString::number(outputSize.width()));
301  strlist.push_back(QString::number(outputSize.height()));
302 
303  SendReceiveStringList(strlist);
304 
305  return strlist;
306 }
307 
309 {
310  QStringList strlist(QString("QUERY_PIXMAP_LASTMODIFIED"));
311  pginfo->ToStringList(strlist);
312 
313  SendReceiveStringList(strlist);
314 
315  if (!strlist.empty() && !strlist[0].isEmpty() && (strlist[0] != "BAD"))
316  {
317  return MythDate::fromSecsSinceEpoch(strlist[0].toLongLong());
318  }
319 
320  return QDateTime();
321 }
322 
324 {
325  QStringList strlist("QUERY_CHECKFILE");
326  strlist << QString::number(0); // don't check slaves
327  pginfo->ToStringList(strlist);
328 
329  if (SendReceiveStringList(strlist, 2))
330  {
331  pginfo->SetPathname(strlist[1]);
332  return strlist[0].toInt() != 0;
333  }
334 
335  return false;
336 }
337 
338 bool PlaybackSock::IsBusy(int capturecardnum, InputInfo *busy_input,
339  int time_buffer)
340 {
341  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
342 
343  strlist << "IS_BUSY";
344  strlist << QString::number(time_buffer);
345 
346  if (!SendReceiveStringList(strlist, 1))
347  {
348  LOG(VB_GENERAL, LOG_ERR, LOC + "IsBusy: " +
349  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum) +
350  " gave us no response.");
351  }
352 
353  bool state = false;
354 
355  if (!strlist.isEmpty())
356  {
357  QStringList::const_iterator it = strlist.begin();
358  state = ((*it).toInt() != 0);
359 
360  if (busy_input)
361  {
362  ++it;
363  if (!busy_input->FromStringList(it, strlist.end()))
364  {
365  LOG(VB_GENERAL, LOG_ERR, LOC + "IsBusy: "
366  "Failed to parse response to " +
367  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
368  state = false;
369  // pretend it's not busy if we can't parse response
370  }
371  }
372  }
373 
374  return state;
375 }
376 
381 int PlaybackSock::GetEncoderState(int capturecardnum)
382 {
383  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
384  strlist << "GET_STATE";
385 
386  if (!SendReceiveStringList(strlist, 1))
387  {
388  LOG(VB_GENERAL, LOG_ERR, LOC + "GetEncoderState: " +
389  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum) +
390  " gave us no response.");
391 
392  return kState_Error;
393  }
394 
395  return strlist[0].toInt();
396 }
397 
398 long long PlaybackSock::GetMaxBitrate(int capturecardnum)
399 {
400  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
401  strlist << "GET_MAX_BITRATE";
402 
403  if (SendReceiveStringList(strlist, 1))
404  return strlist[0].toLongLong();
405 
406  return 20200000LL; // Peak bit rate for HD-PVR
407 }
408 
414 {
415  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(cardid));
416  strlist << "GET_CURRENT_RECORDING";
417 
418  if (!SendReceiveStringList(strlist))
419  return nullptr;
420 
421  auto *pginfo = new ProgramInfo(strlist);
422  if (!pginfo->HasPathname() && !pginfo->GetChanID())
423  {
424  delete pginfo;
425  pginfo = nullptr;
426  }
427 
428  return pginfo;
429 }
430 
431 bool PlaybackSock::EncoderIsRecording(int capturecardnum,
432  const ProgramInfo *pginfo)
433 {
434  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
435  strlist << "MATCHES_RECORDING";
436  pginfo->ToStringList(strlist);
437 
438  if (SendReceiveStringList(strlist, 1))
439  return (bool) strlist[0].toInt();
440 
441  return false;
442 }
443 
445  ProgramInfo *pginfo)
446 {
447  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
448  strlist << "START_RECORDING";
449  pginfo->ToStringList(strlist);
450 
451  if (SendReceiveStringList(strlist, 3))
452  {
453  pginfo->SetRecordingID(strlist[1].toUInt());
454  pginfo->SetRecordingStartTime(
455  MythDate::fromSecsSinceEpoch(strlist[2].toLongLong()));
456  return RecStatus::Type(strlist[0].toInt());
457  }
458 
459  return RecStatus::Unknown;
460 }
461 
463 {
464  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
465  strlist << "GET_RECORDING_STATUS";
466 
467  if (!SendReceiveStringList(strlist, 1))
468  {
469  LOG(VB_GENERAL, LOG_ERR, LOC + "GetRecordingStatus: " +
470  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum) +
471  " did not respond.");
472 
473  return RecStatus::Unknown;
474  }
475 
476  return RecStatus::Type(strlist[0].toInt());
477 }
478 
479 void PlaybackSock::RecordPending(int capturecardnum, const ProgramInfo *pginfo,
480  int secsleft, bool hasLater)
481 {
482  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
483  strlist << "RECORD_PENDING";
484  strlist << QString::number(secsleft);
485  strlist << QString::number(static_cast<int>(hasLater));
486  pginfo->ToStringList(strlist);
487 
488  SendReceiveStringList(strlist);
489 }
490 
492  int rate, int notifyFrontend)
493 {
494  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
495  strlist << "SET_SIGNAL_MONITORING_RATE";
496  strlist << QString::number(rate);
497  strlist << QString::number(notifyFrontend);
498 
499  if (SendReceiveStringList(strlist, 1))
500  return strlist[0].toInt();
501 
502  return -1;
503 }
504 
505 void PlaybackSock::SetNextLiveTVDir(int capturecardnum, const QString& dir)
506 {
507  QStringList strlist(QString("SET_NEXT_LIVETV_DIR %1 %2")
508  .arg(capturecardnum)
509  .arg(dir));
510 
511  SendReceiveStringList(strlist);
512 }
513 
514 void PlaybackSock::CancelNextRecording(int capturecardnum, bool cancel)
515 {
516  QStringList strlist(QString("QUERY_REMOTEENCODER %1")
517  .arg(capturecardnum));
518 
519  strlist << "CANCEL_NEXT_RECORDING";
520  strlist << QString::number(static_cast<int>(cancel));
521 
522  SendReceiveStringList(strlist);
523 }
524 
525 QStringList PlaybackSock::ForwardRequest(const QStringList &slist)
526 {
527  QStringList strlist = slist;
528 
529  if (SendReceiveStringList(strlist))
530  return strlist;
531 
532  return QStringList();
533 }
534 
538 {
539  QStringList strlist(QString("ADD_CHILD_INPUT %1").arg(childid));
540  return SendReceiveStringList(strlist, 1) && (strlist[0] == "OK");
541 }
542 
543 /* vim: set expandtab tabstop=4 shiftwidth=4: */
ReferenceLocker
This decrements the reference on destruction.
Definition: referencecounter.h:66
RecStatus::Type
Type
Definition: recStatus.h:16
kPBSEvents_SystemOnly
@ kPBSEvents_SystemOnly
Definition: playbacksock.h:25
kPBSEvents_None
@ kPBSEvents_None
Definition: playbacksock.h:22
PlaybackSock::GetDiskSpace
void GetDiskSpace(QStringList &o_strlist)
Appends host's dir's total and used space in kilobytes.
Definition: playbacksock.cpp:142
PlaybackSock::wantsOnlySystemEvents
bool wantsOnlySystemEvents(void) const
Definition: playbacksock.cpp:58
PlaybackSock::m_hostname
QString m_hostname
Definition: playbacksock.h:119
PlaybackSock::m_sock
MythSocket * m_sock
Definition: playbacksock.h:118
ReferenceCounter::DecrRef
virtual int DecrRef(void)
Decrements reference count and deletes on 0.
Definition: referencecounter.cpp:125
PlaybackSock::EncoderIsRecording
bool EncoderIsRecording(int capturecardnum, const ProgramInfo *pginfo)
Definition: playbacksock.cpp:431
PlaybackSock::wantsSystemEvents
bool wantsSystemEvents(void) const
Definition: playbacksock.cpp:52
MythSocket::SendReceiveStringList
bool SendReceiveStringList(QStringList &list, uint min_reply_length=0, uint timeoutMS=kLongTimeout)
Definition: mythsocket.cpp:336
PlaybackSock::~PlaybackSock
~PlaybackSock() override
Definition: playbacksock.cpp:35
PlaybackSock::PlaybackSock
PlaybackSock(MainServer *parent, MythSocket *lsock, QString lhostname, PlaybackSockEventsMode eventsMode)
Definition: playbacksock.cpp:19
PlaybackSock::m_eventsMode
PlaybackSockEventsMode m_eventsMode
Definition: playbacksock.h:123
ProgramInfo::SetRecordingID
virtual void SetRecordingID(uint _recordedid)
Definition: programinfo.h:566
kPBSEvents_Normal
@ kPBSEvents_Normal
Definition: playbacksock.h:23
PlaybackSock::m_ip
QString m_ip
Definition: playbacksock.h:120
ProgramInfo::clone
virtual void clone(const ProgramInfo &other, bool ignore_non_serialized_data=false)
Copies important fields from other ProgramInfo.
Definition: programinfo.cpp:834
MythEvent
This class is used as a container for messages.
Definition: mythevent.h:16
PlaybackSock::FillProgramInfo
bool FillProgramInfo(ProgramInfo &pginfo, const QString &playbackhost)
Definition: playbacksock.cpp:204
arg
arg(title).arg(filename).arg(doDelete))
MainServer
Definition: mainserver.h:114
RecStatus::Unknown
@ Unknown
Definition: recStatus.h:32
playbacksock.h
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
kPBSEvents_NonSystem
@ kPBSEvents_NonSystem
Definition: playbacksock.h:24
PlaybackSock::eventsMode
PlaybackSockEventsMode eventsMode(void) const
Definition: playbacksock.cpp:63
PlaybackSock::m_sockLock
QMutex m_sockLock
Definition: playbacksock.h:129
kState_Error
@ kState_Error
Error State, if we ever try to enter this state errored is set.
Definition: tv.h:54
PlaybackSock::GenPreviewPixmap
QStringList GenPreviewPixmap(const QString &token, const ProgramInfo *pginfo)
Definition: playbacksock.cpp:275
PlaybackSock::DeleteFile
int DeleteFile(const QString &filename, const QString &sgroup)
Definition: playbacksock.cpp:163
tmp
static guint32 * tmp
Definition: goom_core.cpp:30
MythSocket
Class for communcating between myth backends and frontends.
Definition: mythsocket.h:26
MythDate::fromSecsSinceEpoch
MBASE_PUBLIC QDateTime fromSecsSinceEpoch(uint seconds)
This function takes the number of seconds since the start of the epoch and returns a QDateTime with t...
Definition: mythdate.cpp:68
PlaybackSock::StopRecording
int StopRecording(const ProgramInfo *pginfo)
Definition: playbacksock.cpp:175
mythdate.h
ProgramInfo::SetPathname
void SetPathname(const QString &pn)
Definition: programinfo.cpp:2332
programinfo.h
PlaybackSock::IsBusy
bool IsBusy(int capturecardnum, InputInfo *busy_input=nullptr, int time_buffer=5)
Definition: playbacksock.cpp:338
PlaybackSock::SendReceiveStringList
bool SendReceiveStringList(QStringList &strlist, uint min_reply_length=0)
Definition: playbacksock.cpp:82
PlaybackSock::GetSGFileQuery
QStringList GetSGFileQuery(QString &host, QString &groupname, QString &filename)
Definition: playbacksock.cpp:238
PlaybackSock::m_local
bool m_local
Definition: playbacksock.h:122
PlaybackSock::AddChildInput
bool AddChildInput(uint childid)
Tells a slave to add a child input.
Definition: playbacksock.cpp:537
compat.h
PlaybackSock::GetRecordingStatus
RecStatus::Type GetRecordingStatus(int capturecardnum)
Definition: playbacksock.cpp:462
PlaybackSock::CancelNextRecording
void CancelNextRecording(int capturecardnum, bool cancel)
Definition: playbacksock.cpp:514
PlaybackSock::GetFileHash
QString GetFileHash(const QString &filename, const QString &storageGroup)
Definition: playbacksock.cpp:251
PlaybackSock::CheckFile
bool CheckFile(ProgramInfo *pginfo)
Definition: playbacksock.cpp:323
PlaybackSock::wantsNonSystemEvents
bool wantsNonSystemEvents(void) const
Definition: playbacksock.cpp:46
filename
QString filename
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:634
PlaybackSock::SetSignalMonitoringRate
int SetSignalMonitoringRate(int capturecardnum, int rate, int notifyFrontend)
Definition: playbacksock.cpp:491
PlaybackSock::RecordPending
void RecordPending(int capturecardnum, const ProgramInfo *pginfo, int secsleft, bool hasLater)
Definition: playbacksock.cpp:479
PlaybackSock::SetNextLiveTVDir
void SetNextLiveTVDir(int capturecardnum, const QString &dir)
Definition: playbacksock.cpp:505
MythSocket::SetReadyReadCallbackEnabled
void SetReadyReadCallbackEnabled(bool enabled)
Definition: mythsocket.h:49
uint
unsigned int uint
Definition: compat.h:140
PlaybackSock::GetEncoderState
int GetEncoderState(int capturecardnum)
Definition: playbacksock.cpp:381
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:57
token
return token
Definition: musicutils.cpp:74
PlaybackSock::StartRecording
RecStatus::Type StartRecording(int capturecardnum, ProgramInfo *pginfo)
Definition: playbacksock.cpp:444
PlaybackSock::GoToSleep
bool GoToSleep(void)
Tells a slave to go to sleep.
Definition: playbacksock.cpp:132
referencecounter.h
PlaybackSock::wantsEvents
bool wantsEvents(void) const
Definition: playbacksock.cpp:41
PlaybackSock::GetRecording
ProgramInfo * GetRecording(uint cardid)
Returns the ProgramInfo being used by any current recording.
Definition: playbacksock.cpp:413
ProgramInfo
Holds information on recordings and videos.
Definition: programinfo.h:67
PlaybackSock::GetSGFileList
QStringList GetSGFileList(QString &host, QString &groupname, QString &directory, bool fileNamesOnly)
Definition: playbacksock.cpp:224
ProgramInfo::ToStringList
void ToStringList(QStringList &list) const
Serializes ProgramInfo into a QStringList which can be passed over a socket.
Definition: programinfo.cpp:1270
mythcorecontext.h
PlaybackSock::CheckRecordingActive
int CheckRecordingActive(const ProgramInfo *pginfo)
Definition: playbacksock.cpp:152
dir
QDir dir
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:1171
MythSocket::IsDataAvailable
bool IsDataAvailable(void)
Definition: mythsocket.cpp:567
inputinfo.h
InputInfo
Definition: inputinfo.h:14
mainserver.h
MythCoreContext::GetHostName
QString GetHostName(void)
Definition: mythcorecontext.cpp:841
PlaybackSock::GetFindFile
QStringList GetFindFile(const QString &host, const QString &filename, const QString &storageGroup, bool useRegex)
Definition: playbacksock.cpp:261
PlaybackSock::DeleteRecording
int DeleteRecording(const ProgramInfo *pginfo, bool forceMetadataDelete=false)
Definition: playbacksock.cpp:186
PlaybackSock::ForwardRequest
QStringList ForwardRequest(const QStringList &slist)
Definition: playbacksock.cpp:525
PlaybackSock::ReadStringList
bool ReadStringList(QStringList &list)
Definition: playbacksock.cpp:68
MythSocket::ReadStringList
bool ReadStringList(QStringList &list, uint timeoutMS=kShortTimeout)
Definition: mythsocket.cpp:323
PlaybackSockEventsMode
PlaybackSockEventsMode
Definition: playbacksock.h:21
ReferenceCounter::IncrRef
virtual int IncrRef(void)
Increments reference count.
Definition: referencecounter.cpp:101
MythCoreContext::dispatch
void dispatch(const MythEvent &event)
Definition: mythcorecontext.cpp:1706
LOC
#define LOC
Definition: playbacksock.cpp:16
PlaybackSock::m_parent
MainServer * m_parent
Definition: playbacksock.h:133
ReferenceCounter
General purpose reference counter.
Definition: referencecounter.h:26
PlaybackSock::GetMaxBitrate
long long GetMaxBitrate(int capturecardnum)
Definition: playbacksock.cpp:398
PlaybackSock::PixmapLastModified
QDateTime PixmapLastModified(const ProgramInfo *pginfo)
Definition: playbacksock.cpp:308
ProgramInfo::SetRecordingStartTime
void SetRecordingStartTime(const QDateTime &dt)
Definition: programinfo.h:513
InputInfo::FromStringList
virtual bool FromStringList(QStringList::const_iterator &it, const QStringList::const_iterator &end)
Definition: inputinfo.cpp:13