1 /*
2  *  Copyright (C) 2005-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: LGPL-2.1-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #include "RenderFlags.h"
10 
11 #include <map>
12 #include <string>
13 
GetFlagsColorMatrix(unsigned int color_matrix,unsigned width,unsigned height)14 unsigned int GetFlagsColorMatrix(unsigned int color_matrix, unsigned width, unsigned height)
15 {
16   switch(color_matrix)
17   {
18     case 10: // BT2020_CL
19     case  9: // BT2020_NCL
20       return CONF_FLAGS_YUVCOEF_BT2020;
21     case  7: // SMPTE 240M (1987)
22       return CONF_FLAGS_YUVCOEF_240M;
23     case  6: // SMPTE 170M
24     case  5: // ITU-R BT.470-2
25     case  4: // FCC
26       return CONF_FLAGS_YUVCOEF_BT601;
27     case  1: // ITU-R Rec.709 (1990) -- BT.709
28       return CONF_FLAGS_YUVCOEF_BT709;
29     case  3: // RESERVED
30     case  2: // UNSPECIFIED
31     default:
32       if(width > 1024 || height >= 600)
33         return CONF_FLAGS_YUVCOEF_BT709;
34       else
35         return CONF_FLAGS_YUVCOEF_BT601;
36       break;
37   }
38 }
39 
GetFlagsChromaPosition(unsigned int chroma_position)40 unsigned int GetFlagsChromaPosition(unsigned int chroma_position)
41 {
42   switch(chroma_position)
43   {
44     case 1: return CONF_FLAGS_CHROMA_LEFT;
45     case 2: return CONF_FLAGS_CHROMA_CENTER;
46     case 3: return CONF_FLAGS_CHROMA_TOPLEFT;
47   }
48   return 0;
49 }
50 
GetFlagsColorPrimaries(unsigned int color_primaries)51 unsigned int GetFlagsColorPrimaries(unsigned int color_primaries)
52 {
53   switch(color_primaries)
54   {
55     case 1: return CONF_FLAGS_COLPRI_BT709;
56     case 4: return CONF_FLAGS_COLPRI_BT470M;
57     case 5: return CONF_FLAGS_COLPRI_BT470BG;
58     case 6: return CONF_FLAGS_COLPRI_170M;
59     case 7: return CONF_FLAGS_COLPRI_240M;
60     case 9: return CONF_FLAGS_COLPRI_BT2020;
61   }
62   return 0;
63 }
64 
GetFlagsStereoMode(const std::string & mode)65 unsigned int GetFlagsStereoMode(const std::string& mode)
66 {
67   static std::map<std::string, unsigned int> convert;
68   if(convert.empty())
69   {
70     convert["mono"]                   = 0u;
71     convert["left_right"]             = CONF_FLAGS_STEREO_MODE_SBS | CONF_FLAGS_STEREO_CADANCE_LEFT_RIGHT;
72     convert["bottom_top"]             = CONF_FLAGS_STEREO_MODE_TAB | CONF_FLAGS_STEREO_CADANCE_RIGHT_LEFT;
73     convert["top_bottom"]             = CONF_FLAGS_STEREO_MODE_TAB | CONF_FLAGS_STEREO_CADANCE_LEFT_RIGHT;
74     convert["checkerboard_rl"]        = 0u;
75     convert["checkerboard_lr"]        = 0u;
76     convert["row_interleaved_rl"]     = 0u;
77     convert["row_interleaved_lr"]     = 0u;
78     convert["col_interleaved_rl"]     = 0u;
79     convert["col_interleaved_lr"]     = 0u;
80     convert["anaglyph_cyan_red"]      = 0u;
81     convert["right_left"]             = CONF_FLAGS_STEREO_MODE_SBS | CONF_FLAGS_STEREO_CADANCE_RIGHT_LEFT;
82     convert["anaglyph_green_magenta"] = 0u;
83     convert["anaglyph_yellow_blue"]   = 0u;
84     convert["block_lr"]               = 0u;
85     convert["block_rl"]               = 0u;
86   }
87   return convert[mode];
88 }
89 
90