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 DisplayChanged ();
48 void SourceChanged (QSize VideoDim, QSize VideoDispDim, float Aspect);
49 void VideoAspectRatioChanged(float Aspect);
50 virtual void EmbedPlayback (bool Embed, QRect Rect);
53 void ResizeDisplayWindow (QRect Rect, bool SaveVisibleRect);
54 void MoveResize (void);
55 void Zoom (ZoomDirection Direction);
56 void ToggleMoveBottomLine (void);
57 void SaveBottomLine (void);
58 void SetVideoScalingAllowed (bool Change);
59 void SetDisplayAspect (float DisplayAspect);
60 void SetWindowSize (QSize Size);
61 void SetITVResize (QRect Rect);
62 void SetRotation (int Rotation);
64
65 public:
66 // Gets
67 bool IsEmbedding(void) const { return m_embedding; }
68 bool IsEmbeddingAndHidden() const { return m_embeddingHidden; }
69 QSize GetVideoDim(void) const { return m_videoDim; }
70 QSize GetVideoDispDim(void) const { return m_videoDispDim; }
72 QRect GetDisplayVisibleRect(void) const { return m_displayVisibleRect; }
73 QRect GetWindowRect(void) const { return m_windowRect; }
74 QRect GetRawWindowRect(void) const { return m_rawWindowRect; }
75 QRect GetVideoRect(void) const { return m_videoRect; }
76 QRect GetDisplayVideoRect(void) const { return m_displayVideoRect; }
77 QRect GetEmbeddingRect(void) const { return m_rawEmbeddingRect; }
78 bool UsingGuiSize(void) const { return m_dbUseGUISize; }
80 float GetVideoAspect(void) const { return m_videoAspect; }
81 float GetDisplayAspect(void) const { return m_displayAspect; }
83 bool VideoIsFullScreen(void) const;
84 QRegion GetBoundingRegion(void) const;
85
86
87 private:
88 void PopulateGeometry (void);
89 void ApplyDBScaleAndMove (void);
90 void ApplyManualScaleAndMove (void);
91 void ApplyLetterboxing (void);
92 void PrintMoveResizeDebug (void);
93 void SetVideoAspectRatio (float Aspect);
94 static QSize Fix1088 (QSize Dimensions);
95 void Rotate (void);
96
97 protected:
99
100 private:
101 QPoint m_dbMove {0,0};
102 float m_dbHorizScale {0.0F};
103 float m_dbVertScale {0.0F};
104 bool m_dbScalingAllowed {true};
105 bool m_dbUseGUISize {false};
109
110 // Manual Zoom
111 float m_manualVertScale {1.0F};
112 float m_manualHorizScale {1.0F};
113 QPoint m_manualMove {0,0};
114
115 // Physical dimensions
116 float m_displayAspect {1.3333F};
117
118 // Video dimensions
119 QSize m_videoDim {640,480};
120 QSize m_videoDispDim {640,480};
121 float m_videoAspect {1.3333F};
122
125 float m_videoAspectOverride {1.3333F};
130 int m_rotation {0};
132
134 QRect m_videoRect {0,0,0,0};
136 QRect m_displayVideoRect {0,0,0,0};
139 QRect m_displayVisibleRect {0,0,0,0};
141 QRect m_windowRect {0,0,0,0};
143 QRect m_rawWindowRect {0,0,0,0};
146 QRect m_tmpDisplayVisibleRect {0,0,0,0};
150
151 // Interactive TV (MHEG) video embedding
152 bool m_itvResizing {false};
155
157 bool m_embedding {false};
158 bool m_embeddingHidden { false };
159 bool m_bottomLine {false};
160
161 // Constants
163 static const float kManualZoomMaxVerticalZoom;
165 static const float kManualZoomMinVerticalZoom;
166 static const int kManualZoomMaxMove;
167};
168
169#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 Zoom(ZoomDirection Direction)
Sets up zooming into to different parts of the video.
StereoscopicMode m_stereoOverride
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:20
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