Skip to content

Commit

Permalink
MythPlayer: Only create and use MythDisplay when we have a GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
mark-kendall committed Dec 2, 2019
1 parent b47088e commit 77826c5
Show file tree
Hide file tree
Showing 10 changed files with 46 additions and 36 deletions.
3 changes: 2 additions & 1 deletion mythtv/libs/libmythtv/mythplayer.cpp
Expand Up @@ -148,6 +148,7 @@ void MythMultiLocker::Relock(void)

MythPlayer::MythPlayer(PlayerFlags flags)
: playerFlags(flags),
m_display((flags & kVideoIsNull) ? nullptr : MythDisplay::AcquireRelease()),
// CC608/708
cc608(this), cc708(this),
// Audio
Expand Down Expand Up @@ -2415,7 +2416,7 @@ bool MythPlayer::CanSupportDoubleRate(void)
{
refreshinterval = videosync->getRefreshInterval();
}
else
else if (m_display)
{
// used by the decoder before videosync is created
refreshinterval = m_display->GetDisplayInfo(frame_interval).Rate();
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/mythplayer.h
Expand Up @@ -647,7 +647,7 @@ class MTV_PUBLIC MythPlayer
#endif

// Window stuff
MythDisplay* m_display { MythDisplay::AcquireRelease() };
MythDisplay* m_display {nullptr};
QWidget *parentWidget {nullptr};
bool embedding {false};
QRect embedRect {0,0,0,0};
Expand Down
24 changes: 15 additions & 9 deletions mythtv/libs/libmythtv/mythvideoout.cpp
Expand Up @@ -154,7 +154,7 @@ MythVideoOutput *MythVideoOutput::Create(const QString &Decoder, MythCodecID
vo->SetVideoFrameRate(FrameRate);
vo->SetReferenceFrames(ReferenceFrames);
if (vo->Init(VideoDim, VideoDispDim, VideoAspect,
widget->winId(), display_rect, CodecID))
MythDisplay::AcquireRelease(), display_rect, CodecID))
{
vo->SetVideoScalingAllowed(true);
return vo;
Expand All @@ -166,7 +166,7 @@ MythVideoOutput *MythVideoOutput::Create(const QString &Decoder, MythCodecID
}
else if (vo && (PlayerFlags & kVideoIsNull))
{
if (vo->Init(VideoDim, VideoDispDim, VideoAspect, 0, QRect(), CodecID))
if (vo->Init(VideoDim, VideoDispDim, VideoAspect, nullptr, QRect(), CodecID))
return vo;

vo->m_dbDisplayProfile = nullptr;
Expand Down Expand Up @@ -253,7 +253,7 @@ MythVideoOutput *MythVideoOutput::Create(const QString &Decoder, MythCodecID
* Init(int,int,float,WId,int,int,int,int,WId) call.
*/
MythVideoOutput::MythVideoOutput()
: m_display(MythDisplay::AcquireRelease()),
: m_display(nullptr),
m_dbDisplayDimensionsMM(0,0),
m_dbAspectOverride(kAspect_Off),
m_dbAdjustFill(kAdjustFill_Off),
Expand Down Expand Up @@ -284,7 +284,8 @@ MythVideoOutput::~MythVideoOutput()
{
delete m_dbDisplayProfile;
ResizeForGui();
MythDisplay::AcquireRelease(false);
if (m_display)
MythDisplay::AcquireRelease(false);
}

/**
Expand All @@ -293,11 +294,10 @@ MythVideoOutput::~MythVideoOutput()
* \return true if successful, false otherwise.
*/
bool MythVideoOutput::Init(const QSize &VideoDim, const QSize &VideoDispDim,
float VideoAspect, WId WinID,
float VideoAspect, MythDisplay *Display,
const QRect &WindowRect, MythCodecID CodecID)
{
(void)WinID;

m_display = Display;
m_videoCodecID = CodecID;
bool wasembedding = m_window.IsEmbedding();
QRect oldrect;
Expand All @@ -309,7 +309,8 @@ bool MythVideoOutput::Init(const QSize &VideoDim, const QSize &VideoDispDim,

bool mainSuccess = m_window.Init(VideoDim, VideoDispDim,
VideoAspect, WindowRect,
m_dbAspectOverride, m_dbAdjustFill);
m_dbAspectOverride, m_dbAdjustFill,
m_display);

if (m_dbDisplayProfile)
m_dbDisplayProfile->SetInput(m_window.GetVideoDispDim());
Expand Down Expand Up @@ -928,7 +929,7 @@ void MythVideoOutput::DiscardFrames(bool KeyFrame, bool)
*/
void MythVideoOutput::ResizeForGui(void)
{
if (m_display->UsingVideoModes())
if (m_display && m_display->UsingVideoModes())
m_display->SwitchToGUI();
}

Expand All @@ -945,6 +946,8 @@ void MythVideoOutput::ResizeForGui(void)
*/
void MythVideoOutput::ResizeForVideo(int Width, int Height)
{
if (!m_display)
return;
if (!m_display->UsingVideoModes())
return;

Expand Down Expand Up @@ -991,6 +994,9 @@ void MythVideoOutput::ResizeForVideo(int Width, int Height)
*/
void MythVideoOutput::InitDisplayMeasurements(void)
{
if (!m_display)
return;

DisplayInfo disp = m_display->GetDisplayInfo();
QString source = "Actual";

Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/mythvideoout.h
Expand Up @@ -48,7 +48,7 @@ class MythVideoOutput
virtual ~MythVideoOutput();

virtual bool Init(const QSize &VideoDim, const QSize &VideoDispDim,
float VideoAspect, WId WinID,
float VideoAspect, MythDisplay *Display,
const QRect &WindowRect, MythCodecID CodecID);
virtual void SetVideoFrameRate(float);
virtual void SetDeinterlacing(bool Enable, bool DoubleRate, MythDeintType Force = DEINT_NONE);
Expand Down
7 changes: 3 additions & 4 deletions mythtv/libs/libmythtv/mythvideooutnull.cpp
Expand Up @@ -146,9 +146,8 @@ bool MythVideoOutputNull::InputChanged(const QSize &video_dim_buf,
return ok;
}

bool MythVideoOutputNull::Init(const QSize &video_dim_buf,
const QSize &video_dim_disp,
float aspect, WId winid,
bool MythVideoOutputNull::Init(const QSize &video_dim_buf, const QSize &video_dim_disp,
float aspect, MythDisplay *Display,
const QRect &win_rect, MythCodecID codec_id)
{
if ((video_dim_disp.width() <= 0) || (video_dim_disp.height() <= 0))
Expand All @@ -165,7 +164,7 @@ bool MythVideoOutputNull::Init(const QSize &video_dim_buf,
QMutexLocker locker(&global_lock);

MythVideoOutput::Init(video_dim_buf, video_dim_disp,
aspect, winid, win_rect, codec_id);
aspect, Display, win_rect, codec_id);

m_videoBuffers.Init(VideoBuffers::GetNumBuffers(FMT_YV12), true, kNeedFreeFrames,
kPrebufferFramesNormal, kPrebufferFramesSmall);
Expand Down
7 changes: 3 additions & 4 deletions mythtv/libs/libmythtv/mythvideooutnull.h
Expand Up @@ -11,10 +11,9 @@ class MythVideoOutputNull : public MythVideoOutput
MythVideoOutputNull();
~MythVideoOutputNull() override;

bool Init(const QSize &video_dim_buf,
const QSize &video_dim_disp,
float aspect,
WId winid, const QRect &win_rect, MythCodecID codec_id) override; // VideoOutput
bool Init(const QSize &video_dim_buf, const QSize &video_dim_disp,
float aspect, MythDisplay *Display,
const QRect &win_rect, MythCodecID codec_id) override;
void SetDeinterlacing(bool Enable, bool DoubleRate, MythDeintType Force = DEINT_NONE) override;
void PrepareFrame(VideoFrame *buffer, FrameScanType, OSD *osd) override; // VideoOutput
void Show(FrameScanType ) override; // VideoOutput
Expand Down
6 changes: 3 additions & 3 deletions mythtv/libs/libmythtv/opengl/mythvideooutopengl.cpp
Expand Up @@ -197,7 +197,7 @@ void MythVideoOutputOpenGL::DestroyBuffers(void)
}

bool MythVideoOutputOpenGL::Init(const QSize &VideoDim, const QSize &VideoDispDim, float Aspect,
WId, const QRect &DisplayVisibleRect, MythCodecID CodecId)
MythDisplay *Display, const QRect &DisplayVisibleRect, MythCodecID CodecId)
{
if (!m_render || !m_openGLPainter || !m_openGLVideo)
return false;
Expand All @@ -217,7 +217,7 @@ bool MythVideoOutputOpenGL::Init(const QSize &VideoDim, const QSize &VideoDispDi
m_openGLPainter->FreeResources();

// Default initialisation - mainly VideoOutWindow
if (!MythVideoOutput::Init(VideoDim, VideoDispDim, Aspect, 0, DisplayVisibleRect, CodecId))
if (!MythVideoOutput::Init(VideoDim, VideoDispDim, Aspect, Display, DisplayVisibleRect, CodecId))
return false;

// Ensure any new profile preferences are handled after a stream change
Expand Down Expand Up @@ -425,7 +425,7 @@ void MythVideoOutputOpenGL::ProcessFrame(VideoFrame *Frame, OSD */*osd*/,
m_dbDisplayProfile->SetInput(m_window.GetVideoDispDim(), 0 , codecName);

bool ok = Init(m_newVideoDim, m_newVideoDispDim, m_newAspect,
0, m_window.GetDisplayVisibleRect(), m_newCodecId);
m_display, m_window.GetDisplayVisibleRect(), m_newCodecId);
m_newCodecId = kCodec_NONE;
m_newVideoDim = QSize();
m_newVideoDispDim = QSize();
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/opengl/mythvideooutopengl.h
Expand Up @@ -20,7 +20,7 @@ class MythVideoOutputOpenGL : public MythVideoOutput

// VideoOutput
bool Init(const QSize &VideoDim, const QSize &VideoDispDim, float Aspect,
WId WinId, const QRect &DisplayVisibleRect, MythCodecID CodecId) override;
MythDisplay *Display, const QRect &DisplayVisibleRect, MythCodecID CodecId) override;

void PrepareFrame(VideoFrame *Frame, FrameScanType, OSD *Osd) override;
void ProcessFrame(VideoFrame *Frame, OSD *Osd,
Expand Down
24 changes: 14 additions & 10 deletions mythtv/libs/libmythtv/videooutwindow.cpp
Expand Up @@ -49,7 +49,7 @@ const float VideoOutWindow::kManualZoomMinVerticalZoom = 0.25F;
const int VideoOutWindow::kManualZoomMaxMove = 50;

VideoOutWindow::VideoOutWindow()
: m_display(MythDisplay::AcquireRelease()),
: m_display(nullptr),
// DB settings
m_dbMove(0, 0),
m_dbHorizScale(0.0F),
Expand Down Expand Up @@ -95,14 +95,6 @@ VideoOutWindow::VideoOutWindow()
m_dbMove = QPoint(gCoreContext->GetNumSetting("xScanDisplacement", 0),
gCoreContext->GetNumSetting("yScanDisplacement", 0));
m_dbUseGUISize = gCoreContext->GetBoolSetting("GuiSizeForTV", false);

PopulateGeometry();
connect(m_display, &MythDisplay::CurrentScreenChanged, this, &VideoOutWindow::ScreenChanged);
}

VideoOutWindow::~VideoOutWindow()
{
MythDisplay::AcquireRelease(false);
}

void VideoOutWindow::ScreenChanged(QScreen*)
Expand All @@ -113,11 +105,17 @@ void VideoOutWindow::ScreenChanged(QScreen*)

void VideoOutWindow::PopulateGeometry(void)
{
if (!m_display)
return;

qApp->processEvents();
if (not qobject_cast<QApplication*>(qApp))
return;

QScreen *screen = m_display->GetCurrentScreen();
if (!screen)
return;

if (MythDisplay::SpanAllScreens())
{
m_usingXinerama = true;
Expand Down Expand Up @@ -466,8 +464,14 @@ void VideoOutWindow::ApplyLetterboxing(void)

bool VideoOutWindow::Init(const QSize &VideoDim, const QSize &VideoDispDim,
float Aspect, const QRect &WindowRect,
AspectOverrideMode AspectOverride, AdjustFillMode AdjustFill)
AspectOverrideMode AspectOverride, AdjustFillMode AdjustFill, MythDisplay *Display)
{
if (!m_display && Display)
{
m_display = Display;
connect(m_display, &MythDisplay::CurrentScreenChanged, this, &VideoOutWindow::ScreenChanged);
}

// Refresh the geometry in case the video mode has changed
PopulateGeometry();

Expand Down
5 changes: 3 additions & 2 deletions mythtv/libs/libmythtv/videooutwindow.h
Expand Up @@ -28,11 +28,12 @@ class VideoOutWindow : public QObject

public:
VideoOutWindow();
~VideoOutWindow() override;
~VideoOutWindow() override = default;

bool Init(const QSize &VideoDim, const QSize &VideoDispDim,
float Aspect, const QRect &WindowRect,
AspectOverrideMode AspectOverride, AdjustFillMode AdjustFill);
AspectOverrideMode AspectOverride, AdjustFillMode AdjustFill,
MythDisplay* Display);

signals:
// Note These are emitted from MoveResize - which must be called after any call
Expand Down

0 comments on commit 77826c5

Please sign in to comment.