Release 4.0.0-preview1-00201
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.Util / ImageUtil / ImageColorSpace.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Diagnostics;
19
20 namespace Tizen.Multimedia.Util
21 {
22     internal enum ImageColorSpace
23     {
24         /// <summary>
25         /// YV12 - YCrCb planar format.
26         /// </summary>
27         YV12,
28         /// <summary>
29         /// YUV422 - planar.
30         /// </summary>
31         Yuv422,
32         /// <summary>
33         /// YUV420 - planar.
34         /// </summary>
35         I420,
36         /// <summary>
37         /// NV12- planar.
38         /// </summary>
39         NV12,
40         /// <summary>
41         /// UYVY - packed.
42         /// </summary>
43         Uyvy,
44         /// <summary>
45         /// YUYV - packed.
46         /// </summary>
47         Yuyv,
48         /// <summary>
49         /// RGB565, high-byte is blue.
50         /// </summary>
51         Rgb565,
52         /// <summary>
53         /// RGB888, high-byte is blue.
54         /// </summary>
55         Rgb888,
56         /// <summary>
57         /// ARGB8888, high-byte is blue.
58         /// </summary>
59         Argb8888,
60         /// <summary>
61         /// BGRA8888, high-byte is alpha.
62         /// </summary>
63         Bgra8888,
64         /// <summary>
65         /// RGBA8888, high-byte is alpha.
66         /// </summary>
67         Rgba8888,
68         /// <summary>
69         /// BGRX8888, high-byte is X.
70         /// </summary>
71         Bgrx8888,
72         /// <summary>
73         /// NV21- planar.
74         /// </summary>
75         NV21,
76         /// <summary>
77         /// NV16- planar.
78         /// </summary>
79         NV16,
80         /// <summary>
81         /// NV61- planar.
82         /// </summary>
83         NV61,
84     }
85
86     internal static class ImageColorSpaceExtensions
87     {
88         internal static ColorSpace ToCommonColorSpace(this ImageColorSpace value)
89         {
90             Debug.Assert(Enum.IsDefined(typeof(ImageColorSpace), value));
91
92             switch (value)
93             {
94                 case ImageColorSpace.YV12: return ColorSpace.YV12;
95
96                 case ImageColorSpace.Uyvy: return ColorSpace.Uyvy;
97
98                 case ImageColorSpace.Yuyv: return ColorSpace.Yuyv;
99
100                 case ImageColorSpace.Yuv422: return ColorSpace.Yuv422;
101
102                 case ImageColorSpace.I420: return ColorSpace.I420;
103
104                 case ImageColorSpace.Rgb565: return ColorSpace.Rgb565;
105
106                 case ImageColorSpace.Rgb888: return ColorSpace.Rgb888;
107
108                 case ImageColorSpace.Argb8888: return ColorSpace.Argb8888;
109
110                 case ImageColorSpace.Bgra8888: return ColorSpace.Bgra8888;
111
112                 case ImageColorSpace.Rgba8888: return ColorSpace.Rgba8888;
113
114                 case ImageColorSpace.Bgrx8888: return ColorSpace.Bgrx8888;
115
116                 case ImageColorSpace.NV12: return ColorSpace.NV12;
117
118                 case ImageColorSpace.NV16: return ColorSpace.NV16;
119
120                 case ImageColorSpace.NV21: return ColorSpace.NV21;
121
122                 case ImageColorSpace.NV61: return ColorSpace.NV61;
123             }
124
125             Debug.Fail($"Not supported color space : {value.ToString()}!");
126             throw new NotSupportedException("Implementation does not support the specified value.");
127         }
128     }
129
130     internal static class ImageColorSpaceSupport
131     {
132         internal static ImageColorSpace ToImageColorSpace(this ColorSpace colorSpace)
133         {
134             ValidationUtil.ValidateEnum(typeof(ColorSpace), colorSpace, nameof(colorSpace));
135
136             switch (colorSpace)
137             {
138                 case ColorSpace.YV12: return ImageColorSpace.YV12;
139
140                 case ColorSpace.Uyvy: return ImageColorSpace.Uyvy;
141
142                 case ColorSpace.Yuyv: return ImageColorSpace.Yuyv;
143
144                 case ColorSpace.Yuv422: return ImageColorSpace.Yuv422;
145
146                 case ColorSpace.I420: return ImageColorSpace.I420;
147
148                 case ColorSpace.Rgb565: return ImageColorSpace.Rgb565;
149
150                 case ColorSpace.Rgb888: return ImageColorSpace.Rgb888;
151
152                 case ColorSpace.Argb8888: return ImageColorSpace.Argb8888;
153
154                 case ColorSpace.Bgra8888: return ImageColorSpace.Bgra8888;
155
156                 case ColorSpace.Rgba8888: return ImageColorSpace.Rgba8888;
157
158                 case ColorSpace.Bgrx8888: return ImageColorSpace.Bgrx8888;
159
160                 case ColorSpace.NV12: return ImageColorSpace.NV12;
161
162                 case ColorSpace.NV16: return ImageColorSpace.NV16;
163
164                 case ColorSpace.NV21: return ImageColorSpace.NV21;
165
166                 case ColorSpace.NV61: return ImageColorSpace.NV61;
167             }
168
169             throw new NotSupportedException($"The ColorSpace.{colorSpace.ToString()} is not supported.");
170         }
171     }
172 }