1 /*
2  *  Copyright (C) 2005-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 // VideoSettings.h: interface for the CVideoSettings class.
12 //
13 //////////////////////////////////////////////////////////////////////
14 
15 enum EINTERLACEMETHOD
16 {
17   VS_INTERLACEMETHOD_NONE=0,
18   VS_INTERLACEMETHOD_AUTO=1,
19   VS_INTERLACEMETHOD_RENDER_BLEND=2,
20   VS_INTERLACEMETHOD_RENDER_WEAVE=4,
21   VS_INTERLACEMETHOD_RENDER_BOB=6,
22   VS_INTERLACEMETHOD_DEINTERLACE=7,
23   VS_INTERLACEMETHOD_VDPAU_BOB=8,
24   VS_INTERLACEMETHOD_VDPAU_INVERSE_TELECINE=11,
25   VS_INTERLACEMETHOD_VDPAU_TEMPORAL=12,
26   VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF=13,
27   VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL=14,
28   VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL_HALF=15,
29   VS_INTERLACEMETHOD_DEINTERLACE_HALF=16,
30   VS_INTERLACEMETHOD_VAAPI_BOB = 22,
31   VS_INTERLACEMETHOD_VAAPI_MADI = 23,
32   VS_INTERLACEMETHOD_VAAPI_MACI = 24,
33   VS_INTERLACEMETHOD_DXVA_AUTO = 32,
34   VS_INTERLACEMETHOD_MAX // do not use and keep as last enum value.
35 };
36 
37 enum ESCALINGMETHOD
38 {
39   VS_SCALINGMETHOD_NEAREST=0,
40   VS_SCALINGMETHOD_LINEAR,
41   VS_SCALINGMETHOD_CUBIC_B_SPLINE,
42   VS_SCALINGMETHOD_CUBIC_MITCHELL,
43   VS_SCALINGMETHOD_CUBIC_CATMULL,
44   VS_SCALINGMETHOD_CUBIC_0_075,
45   VS_SCALINGMETHOD_CUBIC_0_1,
46   VS_SCALINGMETHOD_LANCZOS2,
47   VS_SCALINGMETHOD_LANCZOS3_FAST,
48   VS_SCALINGMETHOD_LANCZOS3,
49   VS_SCALINGMETHOD_SINC8,
50   VS_SCALINGMETHOD_BICUBIC_SOFTWARE,
51   VS_SCALINGMETHOD_LANCZOS_SOFTWARE,
52   VS_SCALINGMETHOD_SINC_SOFTWARE,
53   VS_SCALINGMETHOD_VDPAU_HARDWARE,
54   VS_SCALINGMETHOD_DXVA_HARDWARE,
55   VS_SCALINGMETHOD_AUTO,
56   VS_SCALINGMETHOD_SPLINE36_FAST,
57   VS_SCALINGMETHOD_SPLINE36,
58   VS_SCALINGMETHOD_MAX // do not use and keep as last enum value.
59 };
60 
61 enum ETONEMAPMETHOD
62 {
63   VS_TONEMAPMETHOD_OFF = 0,
64   VS_TONEMAPMETHOD_REINHARD = 1,
65   VS_TONEMAPMETHOD_ACES = 2,
66   VS_TONEMAPMETHOD_HABLE = 3,
67   VS_TONEMAPMETHOD_MAX
68 };
69 
70 enum ViewMode
71 {
72   ViewModeNormal = 0,
73   ViewModeZoom,
74   ViewModeStretch4x3,
75   ViewModeWideZoom,
76   ViewModeStretch16x9,
77   ViewModeOriginal,
78   ViewModeCustom,
79   ViewModeStretch16x9Nonlin,
80   ViewModeZoom120Width,
81   ViewModeZoom110Width
82 };
83 
84 class CVideoSettings
85 {
86 public:
87   CVideoSettings();
88   ~CVideoSettings() = default;
89 
90   bool operator!=(const CVideoSettings &right) const;
91 
92   EINTERLACEMETHOD m_InterlaceMethod;
93   ESCALINGMETHOD m_ScalingMethod;
94   int m_ViewMode; // current view mode
95   float m_CustomZoomAmount; // custom setting zoom amount
96   float m_CustomPixelRatio; // custom setting pixel ratio
97   float m_CustomVerticalShift; // custom setting vertical shift
98   bool  m_CustomNonLinStretch;
99   int m_AudioStream;
100   float m_VolumeAmplification;
101   int m_SubtitleStream;
102   float m_SubtitleDelay;
103   bool m_SubtitleOn;
104   float m_Brightness;
105   float m_Contrast;
106   float m_Gamma;
107   float m_NoiseReduction;
108   bool m_PostProcess;
109   float m_Sharpness;
110   float m_AudioDelay;
111   int m_ResumeTime;
112   int m_StereoMode;
113   bool m_StereoInvert;
114   int m_VideoStream;
115   int m_ToneMapMethod;
116   float m_ToneMapParam;
117   int m_Orientation;
118   int m_CenterMixLevel; // relative to metadata or default
119 };
120 
121 class CCriticalSection;
122 class CVideoSettingsLocked
123 {
124 public:
125   CVideoSettingsLocked(CVideoSettings &vs, CCriticalSection &critSection);
126   virtual ~CVideoSettingsLocked() = default;
127 
128   CVideoSettingsLocked(CVideoSettingsLocked const &) = delete;
129   void operator=(CVideoSettingsLocked const &x) = delete;
130 
131   void SetSubtitleStream(int stream);
132   void SetSubtitleVisible(bool visible);
133   void SetAudioStream(int stream);
134   void SetVideoStream(int stream);
135   void SetAudioDelay(float delay);
136   void SetSubtitleDelay(float delay);
137   void SetViewMode(int mode, float zoom, float par, float shift, bool stretch);
138   void SetVolumeAmplification(float amp);
139 
140 protected:
141   CVideoSettings &m_videoSettings;
142   CCriticalSection &m_critSection;
143 };
144