00001
00002
00003
00004
00005
00006
00007
00008 #ifndef VIDEOOUTWINDOW_H_
00009 #define VIDEOOUTWINDOW_H_
00010
00011 #include <QSize>
00012 #include <QRect>
00013 #include <QPoint>
00014
00015 #include "mythcodecid.h"
00016 #include "videoouttypes.h"
00017
00018 class MythPlayer;
00019
00020 class VideoOutWindow
00021 {
00022 public:
00023 VideoOutWindow();
00024
00025 bool Init(const QSize &new_video_dim, float aspect,
00026 const QRect &new_display_visible_rect,
00027 AspectOverrideMode aspectoverride,
00028 AdjustFillMode adjustfill);
00029
00030 bool InputChanged(const QSize &input_size, float aspect,
00031 MythCodecID myth_codec_id, void *codec_private);
00032 void VideoAspectRatioChanged(float aspect);
00033
00034 void EmbedInWidget(const QRect&);
00035 void StopEmbedding(void);
00036
00037 void ToggleAdjustFill(
00038 AdjustFillMode adjustFillMode = kAdjustFill_Toggle);
00039
00040 void ToggleAspectOverride(
00041 AspectOverrideMode aspectOverrideMode = kAspect_Toggle);
00042
00043 void ResizeDisplayWindow(const QRect&, bool);
00044
00045 void MoveResize(void);
00046 void Zoom(ZoomDirection direction);
00047
00048
00049 void SetVideoScalingAllowed(bool change);
00050 void SetAllowPreviewEPG(bool allowPreviewEPG)
00051 { allowpreviewepg = allowPreviewEPG; }
00052 void SetDisplayDim(QSize displayDim)
00053 { display_dim = displayDim; }
00054 void SetDisplayAspect(float displayAspect)
00055 { display_aspect = displayAspect; }
00056 void SetPIPState(PIPState setting);
00057 void SetVideoDim(QSize dim)
00058 { video_dim = dim; }
00059 void SetDisplayVisibleRect(QRect rect)
00060 { display_visible_rect = rect; }
00061 void SetNeedRepaint(bool needRepaint)
00062 { needrepaint = needRepaint; }
00063
00064
00065 bool IsVideoScalingAllowed(void) const { return db_scaling_allowed; }
00067 bool IsEmbedding(void) const { return embedding; }
00068 QSize GetVideoDim(void) const { return video_dim; }
00069 QSize GetActualVideoDim(void) const { return video_dim_act; }
00070 QSize GetVideoDispDim(void) const { return video_disp_dim; }
00071 QSize GetDisplayDim(void) const { return display_dim; }
00072 float GetMzScaleV(void) const { return mz_scale_v; }
00073 float GetMzScaleH(void) const { return mz_scale_h; }
00074 QPoint GetMzMove(void) const { return mz_move; }
00075 int GetPIPSize(void) const { return db_pip_size; }
00076 PIPState GetPIPState(void) const { return pip_state; }
00077 float GetOverridenVideoAspect(void) const { return overriden_video_aspect;}
00078 QRect GetDisplayVisibleRect(void) const { return display_visible_rect; }
00079 QRect GetScreenGeometry(void) const { return screen_geom; }
00080 QRect GetVideoRect(void) const { return video_rect; }
00081 QRect GetDisplayVideoRect(void) const { return display_video_rect; }
00082 QRect GetEmbeddingRect(void) const { return embedding_rect; }
00083 bool UsingXinerama(void) const { return using_xinerama; }
00084 bool UsingGuiSize(void) const { return db_use_gui_size; }
00085
00088 AspectOverrideMode GetAspectOverride(void) const
00089 { return aspectoverride; }
00092 AdjustFillMode GetAdjustFill(void) const { return adjustfill; }
00093
00094 float GetVideoAspect(void) const { return video_aspect; }
00095 bool IsPreviewEPGAllowed(void) const { return allowpreviewepg; }
00096 bool IsRepaintNeeded(void) const { return needrepaint; }
00098 float GetDisplayAspect(void) const { return display_aspect; }
00099 QRect GetTmpDisplayVisibleRect(void) const
00100 { return tmp_display_visible_rect; }
00101 QRect GetVisibleOSDBounds(float&, float&, float) const;
00102 QRect GetTotalOSDBounds(void) const;
00103
00104 QRect GetPIPRect(PIPLocation location,
00105 MythPlayer *pipplayer = NULL,
00106 bool do_pixel_adj = true) const;
00107
00108 protected:
00109 void ApplyDBScaleAndMove(void);
00110 void ApplyManualScaleAndMove(void);
00111 void ApplyLetterboxing(void);
00112 void ApplySnapToVideoRect(void);
00113 void PrintMoveResizeDebug(void);
00114 void SetVideoAspectRatio(float aspect);
00115
00116 private:
00117 QPoint db_move;
00118 float db_scale_horiz;
00119 float db_scale_vert;
00120 int db_pip_size;
00121 bool db_scaling_allowed;
00122 bool db_use_gui_size;
00123
00124 bool using_xinerama;
00125 int screen_num;
00126 QRect screen_geom;
00127
00128
00129 float mz_scale_v;
00130 float mz_scale_h;
00131 QPoint mz_move;
00132
00133
00134 QSize display_dim;
00135 float display_aspect;
00136
00137
00138 QSize video_dim;
00139 QSize video_disp_dim;
00140 QSize video_dim_act;
00141 float video_aspect;
00142
00145 float overriden_video_aspect;
00147 AspectOverrideMode aspectoverride;
00149 AdjustFillMode adjustfill;
00150
00152 QRect video_rect;
00154 QRect display_video_rect;
00157 QRect display_visible_rect;
00160 QRect tmp_display_visible_rect;
00162 QRect embedding_rect;
00163
00165 bool embedding;
00166 bool needrepaint;
00167 bool allowpreviewepg;
00168 PIPState pip_state;
00169
00170
00171 static const float kManualZoomMaxHorizontalZoom;
00172 static const float kManualZoomMaxVerticalZoom;
00173 static const float kManualZoomMinHorizontalZoom;
00174 static const float kManualZoomMinVerticalZoom;
00175 static const int kManualZoomMaxMove;
00176 };
00177
00178 #endif
00179