MythTV master
mythvideobounds.h
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2/*
3 * Copyright (C) Daniel Kristjansson, Jens Rehaag 2008
4 *
5 * Copyright notice is in mythvideobounds.cpp of the MythTV project.
6 */
7
8#ifndef MYTHVIDEOBOUNDS_H_
9#define MYTHVIDEOBOUNDS_H_
10
11// Qt
12#include <QRegion>
13#include <QCoreApplication>
14
15// MythTV
16#include "mythplayerstate.h"
17#include "videoouttypes.h"
18
19class QScreen;
20class MythDisplay;
21class MythPlayer;
22
23class MythVideoBounds : public QObject
24{
25 Q_OBJECT
26
27 public:
29 ~MythVideoBounds() override = default;
30
31 bool InitBounds(QSize VideoDim, QSize VideoDispDim,
32 float Aspect, QRect WindowRect);
33 void SetDisplay(MythDisplay* mDisplay);
34
35 signals:
36 void UpdateOSDMessage (const QString& Message);
37 // Note These are emitted from MoveResize - which must be called after any call
38 // that changes the current video dimensions or video rectangles.
39 void VideoSizeChanged (const QSize &VideoDim, const QSize &VideoDispDim);
40 void VideoRectsChanged (const QRect &DisplayVideoRect, const QRect &VideoRect);
41 void VisibleRectChanged (const QRect &DisplayVisibleRect);
42 void WindowRectChanged (const QRect &WindowRect);
44
45 public slots:
47 void ScreenChanged (QScreen *screen);
48 void PhysicalDPIChanged (qreal /*DPI*/);
49 void SourceChanged (QSize VideoDim, QSize VideoDispDim, float Aspect);
50 void VideoAspectRatioChanged(float Aspect);
51 virtual void EmbedPlayback (bool Embed, QRect Rect);
54 void ResizeDisplayWindow (QRect Rect, bool SaveVisibleRect);
55 void MoveResize (void);
56 void Zoom (ZoomDirection Direction);
57 void ToggleMoveBottomLine (void);
58 void SaveBottomLine (void);
59 void SetVideoScalingAllowed (bool Change);
60 void SetDisplayAspect (float DisplayAspect);
61 void SetWindowSize (QSize Size);
62 void SetITVResize (QRect Rect);
63 void SetRotation (int Rotation);
65
66 public:
67 // Gets
68 bool IsEmbedding(void) const { return m_embedding; }
69 bool IsEmbeddingAndHidden() const { return m_embeddingHidden; }
70 QSize GetVideoDim(void) const { return m_videoDim; }
71 QSize GetVideoDispDim(void) const { return m_videoDispDim; }
73 QRect GetDisplayVisibleRect(void) const { return m_displayVisibleRect; }
74 QRect GetWindowRect(void) const { return m_windowRect; }
75 QRect GetRawWindowRect(void) const { return m_rawWindowRect; }
76 QRect GetVideoRect(void) const { return m_videoRect; }
77 QRect GetDisplayVideoRect(void) const { return m_displayVideoRect; }
78 QRect GetEmbeddingRect(void) const { return m_rawEmbeddingRect; }
79 bool UsingGuiSize(void) const { return m_dbUseGUISize; }
81 float GetVideoAspect(void) const { return m_videoAspect; }
82 float GetDisplayAspect(void) const { return m_displayAspect; }
84 bool VideoIsFullScreen(void) const;
85 QRegion GetBoundingRegion(void) const;
86
87
88 private:
89 void PopulateGeometry (void);
90 void ApplyDBScaleAndMove (void);
91 void ApplyManualScaleAndMove (void);
92 void ApplyLetterboxing (void);
93 void PrintMoveResizeDebug (void);
94 void SetVideoAspectRatio (float Aspect);
95 static QSize Fix1088 (QSize Dimensions);
96 void Rotate (void);
97
98 protected:
100
101 private:
102 QPoint m_dbMove {0,0};
103 float m_dbHorizScale {0.0F};
104 float m_dbVertScale {0.0F};
105 bool m_dbScalingAllowed {true};
106 bool m_dbUseGUISize {false};
110
111 // Manual Zoom
112 float m_manualVertScale {1.0F};
113 float m_manualHorizScale {1.0F};
114 QPoint m_manualMove {0,0};
115
116 // Physical dimensions
117 float m_displayAspect {1.3333F};
118
119 // Video dimensions
120 QSize m_videoDim {640,480};
121 QSize m_videoDispDim {640,480};
122 float m_videoAspect {1.3333F};
123
126 float m_videoAspectOverride {1.3333F};
131 int m_rotation {0};
133
135 QRect m_videoRect {0,0,0,0};
137 QRect m_displayVideoRect {0,0,0,0};
140 QRect m_displayVisibleRect {0,0,0,0};
142 QRect m_windowRect {0,0,0,0};
144 QRect m_rawWindowRect {0,0,0,0};
147 QRect m_tmpDisplayVisibleRect {0,0,0,0};
151
152 // Interactive TV (MHEG) video embedding
153 bool m_itvResizing {false};
156
158 bool m_embedding {false};
159 bool m_embeddingHidden { false };
160 bool m_bottomLine {false};
161
162 // Constants
164 static const float kManualZoomMaxVerticalZoom;
166 static const float kManualZoomMinVerticalZoom;
167 static const int kManualZoomMaxMove;
168};
169
170#endif
QRect GetEmbeddingRect(void) const
void RefreshVideoBoundsState()
Send out latest state to listeners.
QRect GetDisplayVideoRect(void) const
void SetITVResize(QRect Rect)
void SetRotation(int Rotation)
Set the rotation in degrees.
void Rotate(void)
Adjust various settings to facilitate portrait mode calculations.
bool IsEmbedding(void) const
QSize m_videoDispDim
Pixel dimensions of video display area.
static const float kManualZoomMaxHorizontalZoom
virtual void EmbedPlayback(bool Embed, QRect Rect)
QSize GetVideoDim(void) const
float m_manualHorizScale
Manually applied horizontal scaling.
float m_dbVertScale
Vertical Overscan/Underscan percentage.
QSize GetVideoDispDim(void) const
QSize m_videoDim
Pixel dimensions of video buffer.
float m_dbHorizScale
Horizontal Overscan/Underscan percentage.
QRect m_displayVideoRect
Pixel rectangle in display window into which video_rect maps to.
void VideoRectsChanged(const QRect &DisplayVideoRect, const QRect &VideoRect)
AdjustFillMode GetAdjustFill(void) const
void SaveBottomLine(void)
static const float kManualZoomMinVerticalZoom
float GetOverridenVideoAspect(void) const
void MoveResize(void)
performs all the calculations for video framing and any resizing.
static QSize Fix1088(QSize Dimensions)
static const float kManualZoomMaxVerticalZoom
QRect m_windowRect
Rectangle describing QWidget bounds.
AspectOverrideMode m_dbAspectOverride
void UpdateOSDMessage(const QString &Message)
QRect GetVideoRect(void) const
void VideoBoundsStateChanged(MythVideoBoundsState VideoState)
QRect m_videoRect
Pixel rectangle in video frame to display.
void SourceChanged(QSize VideoDim, QSize VideoDispDim, float Aspect)
Update for new source video dimensions and aspect ratio.
bool m_embedding
State variables.
bool m_dbUseGUISize
Use the gui size for video window.
void WindowRectChanged(const QRect &WindowRect)
void VisibleRectChanged(const QRect &DisplayVisibleRect)
void ToggleAdjustFill(AdjustFillMode AdjustFillMode=kAdjustFill_Toggle)
Sets up letterboxing for various standard video frame and monitor dimensions, then calls MoveResize()...
float m_videoAspectOverride
Normally this is the same as videoAspect, but may not be if the user has toggled the aspect override ...
MythDisplay * m_display
void SetDisplayAspect(float DisplayAspect)
bool VideoIsFullScreen(void) const
Check whether the video display rect covers the entire window/framebuffer.
void SetVideoScalingAllowed(bool Change)
Disable or enable underscan/overscan.
QRect m_tmpDisplayVisibleRect
Used to save the display_visible_rect for restoration after video embedding ends.
void ToggleAspectOverride(AspectOverrideMode AspectMode=kAspect_Toggle)
Enforce different aspect ratio than detected, then calls VideoAspectRatioChanged(float) to apply them...
void ApplyLetterboxing(void)
AspectOverrideMode m_videoAspectOverrideMode
AspectOverrideMode to use to modify overriden_video_aspect.
void SetVideoAspectRatio(float Aspect)
Sets MythVideoBounds::video_aspect to aspect, and sets MythVideoBounds::overriden_video_aspect if asp...
float m_videoAspect
Physical aspect ratio of video.
void ApplyManualScaleAndMove(void)
Apply scales and moves from "Zoom Mode" settings.
void ToggleMoveBottomLine(void)
QRect GetDisplayVisibleRect(void) const
void PopulateGeometry(void)
QRegion GetBoundingRegion(void) const
Return the region of DisplayVisibleRect that lies outside of DisplayVideoRect.
float m_displayAspect
Physical aspect ratio of playback window.
AdjustFillMode m_adjustFill
Zoom mode.
float m_manualVertScale
Manually applied vertical scaling.
QRect GetRawWindowRect(void) const
bool InitBounds(QSize VideoDim, QSize VideoDispDim, float Aspect, QRect WindowRect)
float GetVideoAspect(void) const
QRect m_rawWindowRect
Rectangle describing QWidget bounds - not adjusted for high DPI scaling (macos)
static const int kManualZoomMaxMove
QRect m_rawItvDisplayVideoRect
void SetDisplay(MythDisplay *mDisplay)
QPoint m_manualMove
Manually applied percentage move.
QRect GetWindowRect(void) const
void SetWindowSize(QSize Size)
void VideoAspectRatioChanged(float Aspect)
Calls SetVideoAspectRatio(float aspect), then calls MoveResize() to apply changes.
StereoscopicMode GetStereoOverride() const
bool UsingGuiSize(void) const
void ResizeDisplayWindow(QRect Rect, bool SaveVisibleRect)
Resize Display Window.
void ScreenChanged(QScreen *screen)
void Zoom(ZoomDirection Direction)
Sets up zooming into to different parts of the video.
StereoscopicMode m_stereoOverride
void PhysicalDPIChanged(qreal)
void PrintMoveResizeDebug(void)
bool m_dbScalingAllowed
disable this to prevent overscan/underscan
void SetStereoOverride(StereoscopicMode Mode)
void ApplyDBScaleAndMove(void)
Apply scales and moves for "Overscan" and "Underscan" DB settings.
void VideoSizeChanged(const QSize &VideoDim, const QSize &VideoDispDim)
~MythVideoBounds() override=default
bool IsEmbeddingAndHidden() const
float GetDisplayAspect(void) const
QRect m_displayVisibleRect
Visible portion of display window in pixels.
QRect m_embeddingRect
Embedded video rectangle.
static const float kManualZoomMinHorizontalZoom
AdjustFillMode m_dbAdjustFill
QPoint m_dbMove
Percentage move from database.
Mode
Definition: synaesthesia.h:23
AspectOverrideMode
Definition: videoouttypes.h:61
@ kAspect_Toggle
Definition: videoouttypes.h:62
@ kAspect_Off
Definition: videoouttypes.h:63
AdjustFillMode
Definition: videoouttypes.h:72
@ kAdjustFill_Off
Definition: videoouttypes.h:74
@ kAdjustFill_Toggle
Definition: videoouttypes.h:73
ZoomDirection
Definition: videoouttypes.h:43
StereoscopicMode
@ kStereoscopicModeAuto