Skip to content

Commit

Permalink
PiP: Remove the extra thread created for PiP playback.
Browse files Browse the repository at this point in the history
This is no longer needed as all players are run from the main thread. By
and large, the 'playback loop' for a pip player is a no-op as the
decoding is elsewhere and the actual processing of video frames is
handled by the main player (though a small optimisation is needed for
the VideoSync).

Cherry-picked from a90960c
  • Loading branch information
Mark Kendall committed May 10, 2011
1 parent 4062695 commit 983e6d7
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 58 deletions.
40 changes: 2 additions & 38 deletions mythtv/libs/libmythtv/playercontext.cpp
Expand Up @@ -23,17 +23,6 @@
const uint PlayerContext::kSMExitTimeout = 2000;
const uint PlayerContext::kMaxChannelHistory = 30;

void PlayerThread::run(void)
{
if (!m_player)
return;

VERBOSE(VB_PLAYBACK, QString("PiP thread starting"));
m_player->StartPlaying();
exec();
VERBOSE(VB_PLAYBACK, QString("PiP thread finishing"));
}

PlayerContext::PlayerContext(const QString &inUseID) :
recUsage(inUseID), player(NULL), playerUnsafe(false), recorder(NULL),
tvchain(NULL), buffer(NULL), playingInfo(NULL),
Expand All @@ -54,7 +43,7 @@ PlayerContext::PlayerContext(const QString &inUseID) :
stateLock(QMutex::Recursive),
// pip
pipState(kPIPOff), pipRect(0,0,0,0), parentWidget(NULL), pipLocation(0),
useNullVideo(false), playerNeedsThread(false), playerThread(NULL),
useNullVideo(false),
// embedding
embedWinID(0), embedBounds(0,0,0,0)
{
Expand All @@ -80,7 +69,6 @@ void PlayerContext::TeardownPlayer(void)
SetRingBuffer(NULL);
SetTVChain(NULL);
SetPlayingInfo(NULL);
DeletePlayerThread();
}

/**
Expand Down Expand Up @@ -220,7 +208,6 @@ QRect PlayerContext::GetStandAlonePIPRect(void)
bool PlayerContext::StartPIPPlayer(TV *tv, TVState desiredState)
{
bool ok = false;
playerNeedsThread = true;

if (!useNullVideo && parentWidget)
{
Expand All @@ -237,7 +224,6 @@ bool PlayerContext::StartPIPPlayer(TV *tv, TVState desiredState)
0, NULL);
}

playerNeedsThread = false;
return ok;
}

Expand Down Expand Up @@ -486,17 +472,7 @@ bool PlayerContext::StartPlaying(int maxWait)
if (!player)
return false;

DeletePlayerThread();
if (playerNeedsThread)
{
playerThread = new PlayerThread(player);
if (playerThread)
playerThread->start();
}
else
{
player->StartPlaying();
}
player->StartPlaying();

maxWait = (maxWait <= 0) ? 20000 : maxWait;
#ifdef USING_VALGRIND
Expand Down Expand Up @@ -525,22 +501,10 @@ bool PlayerContext::StartPlaying(int maxWait)

void PlayerContext::StopPlaying(void)
{
DeletePlayerThread();
if (player)
player->StopPlaying();
}

void PlayerContext::DeletePlayerThread(void)
{
if (playerThread)
{
playerThread->exit();
playerThread->wait();
delete playerThread;
playerThread = NULL;
}
}

/** \fn PlayerContext::StartOSD(TV *tv)
* \brief Initializes the on screen display.
*
Expand Down
20 changes: 0 additions & 20 deletions mythtv/libs/libmythtv/playercontext.h
Expand Up @@ -5,15 +5,12 @@
#include <deque>
using namespace std;

#include <pthread.h>

// Qt headers
#include <QWidget>
#include <QString>
#include <QMutex>
#include <QHash>
#include <QRect>
#include <QThread>

#include "mythdeque.h"
#include "tv.h"
Expand Down Expand Up @@ -45,20 +42,6 @@ typedef enum
typedef deque<QString> StringDeque;
typedef QHash<QString,QString> InfoMap;

class PlayerThread : public QThread
{
Q_OBJECT

public:
PlayerThread(MythPlayer *player) : QThread(NULL), m_player(player) { }

protected:
virtual void run(void);

private:
MythPlayer *m_player;
};

class MPUBLIC PlayerContext
{
public:
Expand All @@ -73,7 +56,6 @@ class MPUBLIC PlayerContext
void TeardownPlayer(void);
bool StartPlaying(int maxWait = -1);
void StopPlaying(void);
void DeletePlayerThread(void);
bool StartOSD(TV *tv);
void UpdateTVChain(void);
bool ReloadTVChain(void);
Expand Down Expand Up @@ -228,8 +210,6 @@ class MPUBLIC PlayerContext
int pipLocation;
/// True iff software scaled PIP should be used
bool useNullVideo;
bool playerNeedsThread;
PlayerThread *playerThread;

// Embedding related
WId embedWinID; ///< Window ID when embedded in another widget
Expand Down

0 comments on commit 983e6d7

Please sign in to comment.