11 #include "utils/Map.h"    13 #include <string_view>    15 #include <fmt/format.h>    23   VS_INTERLACEMETHOD_NONE=0,
    24   VS_INTERLACEMETHOD_AUTO=1,
    25   VS_INTERLACEMETHOD_RENDER_BLEND=2,
    26   VS_INTERLACEMETHOD_RENDER_WEAVE=4,
    27   VS_INTERLACEMETHOD_RENDER_BOB=6,
    28   VS_INTERLACEMETHOD_DEINTERLACE=7,
    29   VS_INTERLACEMETHOD_VDPAU_BOB=8,
    30   VS_INTERLACEMETHOD_VDPAU_INVERSE_TELECINE=11,
    31   VS_INTERLACEMETHOD_VDPAU_TEMPORAL=12,
    32   VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF=13,
    33   VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL=14,
    34   VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL_HALF=15,
    35   VS_INTERLACEMETHOD_DEINTERLACE_HALF=16,
    36   VS_INTERLACEMETHOD_VAAPI_BOB = 22,
    37   VS_INTERLACEMETHOD_VAAPI_MADI = 23,
    38   VS_INTERLACEMETHOD_VAAPI_MACI = 24,
    39   VS_INTERLACEMETHOD_DXVA_AUTO = 32,
    40   VS_INTERLACEMETHOD_MAX 
    44 struct fmt::formatter<EINTERLACEMETHOD> : fmt::formatter<std::string_view>
    46   template<
typename FormatContext>
    47   constexpr 
auto format(
const EINTERLACEMETHOD& interlaceMethod, FormatContext& ctx)
    49     const auto it = interlaceMethodMap.find(interlaceMethod);
    50     if (it == interlaceMethodMap.cend())
    51       throw std::range_error(
"no interlace method string found");
    53     return fmt::formatter<string_view>::format(it->second, ctx);
    57   static constexpr 
auto interlaceMethodMap = make_map<EINTERLACEMETHOD, std::string_view>({
    58       {VS_INTERLACEMETHOD_NONE, 
"none"},
    59       {VS_INTERLACEMETHOD_AUTO, 
"auto"},
    60       {VS_INTERLACEMETHOD_RENDER_BLEND, 
"render blend"},
    61       {VS_INTERLACEMETHOD_RENDER_WEAVE, 
"render weave"},
    62       {VS_INTERLACEMETHOD_RENDER_BOB, 
"render bob"},
    63       {VS_INTERLACEMETHOD_DEINTERLACE, 
"deinterlace"},
    64       {VS_INTERLACEMETHOD_VDPAU_BOB, 
"vdpau bob"},
    65       {VS_INTERLACEMETHOD_VDPAU_INVERSE_TELECINE, 
"vdpau inverse telecine"},
    66       {VS_INTERLACEMETHOD_VDPAU_TEMPORAL, 
"vdpau temporal"},
    67       {VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF, 
"vdpau temporal half"},
    68       {VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL, 
"vdpau temporal spatial"},
    69       {VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL_HALF, 
"vdpau temporal spatial half"},
    70       {VS_INTERLACEMETHOD_DEINTERLACE_HALF, 
"deinterlace half"},
    71       {VS_INTERLACEMETHOD_VAAPI_BOB, 
"vaapi bob"},
    72       {VS_INTERLACEMETHOD_VAAPI_MADI, 
"vaapi madi"},
    73       {VS_INTERLACEMETHOD_VAAPI_MACI, 
"vaapi maci"},
    74       {VS_INTERLACEMETHOD_DXVA_AUTO, 
"dxva auto"},
    80   VS_SCALINGMETHOD_NEAREST=0,
    81   VS_SCALINGMETHOD_LINEAR,
    82   VS_SCALINGMETHOD_CUBIC_B_SPLINE,
    83   VS_SCALINGMETHOD_CUBIC_MITCHELL,
    84   VS_SCALINGMETHOD_CUBIC_CATMULL,
    85   VS_SCALINGMETHOD_CUBIC_0_075,
    86   VS_SCALINGMETHOD_CUBIC_0_1,
    87   VS_SCALINGMETHOD_LANCZOS2,
    88   VS_SCALINGMETHOD_LANCZOS3_FAST,
    89   VS_SCALINGMETHOD_LANCZOS3,
    90   VS_SCALINGMETHOD_SINC8,
    91   VS_SCALINGMETHOD_BICUBIC_SOFTWARE,
    92   VS_SCALINGMETHOD_LANCZOS_SOFTWARE,
    93   VS_SCALINGMETHOD_SINC_SOFTWARE,
    94   VS_SCALINGMETHOD_VDPAU_HARDWARE,
    95   VS_SCALINGMETHOD_DXVA_HARDWARE,
    96   VS_SCALINGMETHOD_AUTO,
    97   VS_SCALINGMETHOD_SPLINE36_FAST,
    98   VS_SCALINGMETHOD_SPLINE36,
   103 struct fmt::formatter<ESCALINGMETHOD> : fmt::formatter<std::string_view>
   106   template<
typename FormatContext>
   107   constexpr 
auto format(
const ESCALINGMETHOD& scalingMethod, FormatContext& ctx)
   109     const auto it = scalingMethodMap.find(scalingMethod);
   110     if (it == scalingMethodMap.cend())
   111       throw std::range_error(
"no scaling method string found");
   113     return fmt::formatter<string_view>::format(it->second, ctx);
   117   static constexpr 
auto scalingMethodMap = make_map<ESCALINGMETHOD, std::string_view>({
   118       {VS_SCALINGMETHOD_NEAREST, 
"nearest neighbour"},
   119       {VS_SCALINGMETHOD_LINEAR, 
"linear"},
   120       {VS_SCALINGMETHOD_CUBIC_B_SPLINE, 
"cubic b spline"},
   121       {VS_SCALINGMETHOD_CUBIC_MITCHELL, 
"cubic mitchell"},
   122       {VS_SCALINGMETHOD_CUBIC_CATMULL, 
"cubic catmull"},
   123       {VS_SCALINGMETHOD_CUBIC_0_075, 
"cubic 0/075"},
   124       {VS_SCALINGMETHOD_CUBIC_0_1, 
"cubic 0/1"},
   125       {VS_SCALINGMETHOD_LANCZOS2, 
"lanczos2"},
   126       {VS_SCALINGMETHOD_LANCZOS3_FAST, 
"lanczos3 fast"},
   127       {VS_SCALINGMETHOD_LANCZOS3, 
"lanczos3"},
   128       {VS_SCALINGMETHOD_SINC8, 
"sinc8"},
   129       {VS_SCALINGMETHOD_BICUBIC_SOFTWARE, 
"bicubic software"},
   130       {VS_SCALINGMETHOD_LANCZOS_SOFTWARE, 
"lanczos software"},
   131       {VS_SCALINGMETHOD_SINC_SOFTWARE, 
"sinc software"},
   132       {VS_SCALINGMETHOD_VDPAU_HARDWARE, 
"vdpau"},
   133       {VS_SCALINGMETHOD_DXVA_HARDWARE, 
"dxva"},
   134       {VS_SCALINGMETHOD_AUTO, 
"auto"},
   135       {VS_SCALINGMETHOD_SPLINE36_FAST, 
"spline32 fast"},
   136       {VS_SCALINGMETHOD_SPLINE36, 
"spline32"},
   139   static_assert(VS_SCALINGMETHOD_MAX == scalingMethodMap.size(),
   140                 "scalingMethodMap doesn't match the size of ESCALINGMETHOD, did you forget to "   141                 "add/remove a mapping?");
   146   VS_TONEMAPMETHOD_OFF = 0,
   147   VS_TONEMAPMETHOD_REINHARD = 1,
   148   VS_TONEMAPMETHOD_ACES = 2,
   149   VS_TONEMAPMETHOD_HABLE = 3,
   154 struct fmt::formatter<ETONEMAPMETHOD> : fmt::formatter<std::string_view>
   157   template<
typename FormatContext>
   158   constexpr 
auto format(
const ETONEMAPMETHOD& tonemapMethod, FormatContext& ctx)
   160     const auto it = tonemapMethodMap.find(tonemapMethod);
   161     if (it == tonemapMethodMap.cend())
   162       throw std::range_error(
"no tonemap method string found");
   164     return fmt::formatter<string_view>::format(it->second, ctx);
   168   static constexpr 
auto tonemapMethodMap = make_map<ETONEMAPMETHOD, std::string_view>({
   169       {VS_TONEMAPMETHOD_OFF, 
"off"},
   170       {VS_TONEMAPMETHOD_REINHARD, 
"reinhard"},
   171       {VS_TONEMAPMETHOD_ACES, 
"aces"},
   172       {VS_TONEMAPMETHOD_HABLE, 
"hable"},
   175   static_assert(VS_TONEMAPMETHOD_MAX == tonemapMethodMap.size(),
   176                 "tonemapMethodMap doesn't match the size of ETONEMAPMETHOD, did you forget to "   177                 "add/remove a mapping?");
   189   ViewModeStretch16x9Nonlin,
   190   ViewModeZoom120Width,
   202   EINTERLACEMETHOD m_InterlaceMethod;
   203   ESCALINGMETHOD m_ScalingMethod;
   205   float m_CustomZoomAmount; 
   206   float m_CustomPixelRatio; 
   207   float m_CustomVerticalShift; 
   208   bool  m_CustomNonLinStretch;
   210   float m_VolumeAmplification;
   211   int m_SubtitleStream;
   212   float m_SubtitleDelay;
   213   int m_subtitleVerticalPosition{0};
   214   bool m_subtitleVerticalPositionSave{
false};
   219   float m_NoiseReduction;
   227   ETONEMAPMETHOD m_ToneMapMethod;
   228   float m_ToneMapParam;
   230   int m_CenterMixLevel; 
   233 class CCriticalSection;
   243   void SetSubtitleStream(
int stream);
   244   void SetSubtitleVisible(
bool visible);
   245   void SetAudioStream(
int stream);
   246   void SetVideoStream(
int stream);
   247   void SetAudioDelay(
float delay);
   248   void SetSubtitleDelay(
float delay);
   256   void SetSubtitleVerticalPosition(
int value, 
bool save);
   258   void SetViewMode(
int mode, 
float zoom, 
float par, 
float shift, 
bool stretch);
   259   void SetVolumeAmplification(
float amp);
   263   CCriticalSection &m_critSection;
 Definition: VideoSettings.h:234
Definition: VideoSettings.h:194