1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     camera_Types.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 25675 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_CAMERA_CTR_CAMERA_TYPES_H_
17 #define NN_CAMERA_CTR_CAMERA_TYPES_H_
18 
19 #include <nn/Result.h>
20 #include <nn/camera/CTR/camera_CalibrationTypes.h>
21 
22 namespace nn {
23 namespace csnd {
24 namespace CTR {
25 
26 struct DataInfo;
27 
28 struct ChannelParam;
29 
30 struct OptionInfo;
31 
32 }
33 }
34 }
35 
36 namespace nn {
37 namespace camera {
38 namespace CTR {
39     /*!
40       @brief   カメラの組み合わせを示す列挙体です。
41     */
42     enum CameraSelect
43     {
44         SELECT_NONE      = 0,                                   //!< カメラ指定なし
45         SELECT_OUT1      = (1<<0),                              //!< 外側カメラ(R)を指定
46         SELECT_IN1       = (1<<1),                              //!< 内側カメラを指定
47         SELECT_IN1_OUT1  = (SELECT_OUT1|SELECT_IN1),            //!< 内側カメラと外側カメラ(R)を指定
48         SELECT_OUT2      = (1<<2),                              //!< 外側カメラ(L)を指定
49         SELECT_OUT1_OUT2 = (SELECT_OUT1|SELECT_OUT2),           //!< 外側カメラ(R)と外側カメラ(L)を指定
50         SELECT_IN1_OUT2  = (SELECT_IN1|SELECT_OUT2),            //!< 内側カメラと外側カメラ(L)を指定
51         SELECT_ALL       = (SELECT_OUT1|SELECT_IN1|SELECT_OUT2) //!< 全てのカメラを指定
52     };
53     /*!
54       @brief    カメラの接続先ポートを示す列挙体です。
55     */
56     enum Port
57     {
58         PORT_NONE = 0,                    //!< ポート指定なし
59         PORT_CAM1 = (1<<0),               //!< 内側カメラ、外側カメラ(R)用のポートを指定
60         PORT_CAM2 = (1<<1),               //!< 外側カメラ(L)用のポートを指定
61         PORT_BOTH = (PORT_CAM1|PORT_CAM2) //!< 両方のポートを指定
62     };
63     /*!
64       @brief    カメラのコンテキストを示す列挙体です。
65     */
66     enum Context
67     {
68         CONTEXT_NONE = 0,                    //!< コンテキスト指定なし
69         CONTEXT_A    = (1<<0),               //!< コンテキストAを指定
70         CONTEXT_B    = (1<<1),               //!< コンテキストBを指定
71         CONTEXT_BOTH = (CONTEXT_A|CONTEXT_B) //!< コンテキストA,Bを両方指定
72     };
73     /*!
74       @brief    反転処理の種類を示す列挙体です。
75     */
76     enum Flip
77     {
78         FLIP_NONE = 0,   //!< 反転処理を行わない
79         FLIP_HORIZONTAL, //!< 左右反転を行う
80         FLIP_VERTICAL,   //!< 上下反転を行う
81         FLIP_REVERSE,    //!< 180度回転を行う
82         FLIP_MAX
83     };
84     /*!
85       @brief    解像度を示す列挙体です。
86     */
87     enum Size
88     {
89         SIZE_VGA,           //!< 640x480
90         SIZE_QVGA,          //!< 320x240
91         SIZE_QQVGA,         //!< 160x120
92         SIZE_CIF,           //!< 352x288
93         SIZE_QCIF,          //!< 176x144
94         SIZE_DS_LCD,        //!< 256x192
95         SIZE_DS_LCDx4,      //!< 512x384
96         SIZE_CTR_TOP_LCD,   //!< 400x240
97 
98         SIZE_MAX,
99 
100         SIZE_CTR_BOTTOM_LCD = SIZE_QVGA     //!< 320x240
101     };
102     /*!
103       @brief    フレームレートを示す列挙体です。
104     */
105     enum FrameRate
106     {
107         FRAME_RATE_15 = 0,   //!< 15fps固定
108         FRAME_RATE_15_TO_5,  //!< 明るさに応じて15fpsから5fpsの間で自動的に変化
109         FRAME_RATE_15_TO_2,  //!< 明るさに応じて15fpsから2fpsの間で自動的に変化
110         FRAME_RATE_10,       //!< 10fps固定
111         FRAME_RATE_8_5,      //!< 8.5fps固定
112         FRAME_RATE_5,        //!< 5fps固定
113         FRAME_RATE_20,       //!< 20fps固定
114         FRAME_RATE_20_TO_5,  //!< 明るさに応じて20fpsから5fpsの間で自動的に変化
115         FRAME_RATE_30,       //!< 30fps固定
116         FRAME_RATE_30_TO_5,  //!< 明るさに応じて30fpsから5fpsの間で自動的に変化
117         FRAME_RATE_15_TO_10, //!< 明るさに応じて15fpsから10fpsの間で自動的に変化
118         FRAME_RATE_20_TO_10, //!< 明るさに応じて20fpsから10fpsの間で自動的に変化
119         FRAME_RATE_30_TO_10, //!< 明るさに応じて30fpsから10fpsの間で自動的に変化
120         FRAME_RATE_MAX
121     };
122     /*!
123       @brief    ホワイトバランスを示す列挙体です。
124     */
125     enum WhiteBalance
126     {
127         WHITE_BALANCE_AUTO,
128 
129         WHITE_BALANCE_3200K,
130         WHITE_BALANCE_4150K,
131         WHITE_BALANCE_5200K,
132         WHITE_BALANCE_6000K,
133         WHITE_BALANCE_7000K,
134 
135         WHITE_BALANCE_MAX,
136 
137         // alias
138         WHITE_BALANCE_NORMAL                     = WHITE_BALANCE_AUTO,  //!< オートホワイトバランス
139         WHITE_BALANCE_TUNGSTEN                   = WHITE_BALANCE_3200K, //!< タングステン光(白熱電球)
140         WHITE_BALANCE_WHITE_FLUORESCENT_LIGHT    = WHITE_BALANCE_4150K, //!< 白色蛍光灯
141         WHITE_BALANCE_DAYLIGHT                   = WHITE_BALANCE_5200K, //!< 太陽光
142         WHITE_BALANCE_CLOUDY                     = WHITE_BALANCE_6000K, //!< くもり
143         WHITE_BALANCE_HORIZON                    = WHITE_BALANCE_6000K, //!< 夕焼け
144         WHITE_BALANCE_SHADE                      = WHITE_BALANCE_7000K  //!< 日陰
145     };
146     /*!
147       @brief    撮影モードを示す列挙体です。
148     */
149     enum PhotoMode
150     {
151         PHOTO_MODE_NORMAL,    //!< 補正なし
152         PHOTO_MODE_PORTRAIT,  //!< 人物
153         PHOTO_MODE_LANDSCAPE, //!< 風景
154         PHOTO_MODE_NIGHTVIEW, //!< 暗視
155         PHOTO_MODE_LETTER,    //!< 文字撮影 (QRコード)
156 
157         PHOTO_MODE_MAX
158     };
159     /*!
160       @brief    エフェクトを示す列挙体です。
161     */
162     enum Effect
163     {
164         EFFECT_NONE,     //!< エフェクトなし
165         EFFECT_MONO,     //!< モノクロ調
166         EFFECT_SEPIA,    //!< セピア調
167         EFFECT_NEGATIVE, //!< ネガポジ反転
168         EFFECT_NEGAFILM, //!< フィルム調のネガポジ反転(NEGATIVEに対して、UとVの順番が入れ替わっている)
169         EFFECT_SEPIA01,  //!< セピア調
170         EFFECT_SOLARIZE_A_01,    //!< 明暗の反転(閾値No.1)
171         EFFECT_SOLARIZE_A_02,    //!< 明暗の反転(閾値No.2)
172         EFFECT_SOLARIZE_A_03,    //!< 明暗の反転(閾値No.3)
173         EFFECT_SOLARIZE_A_04,    //!< 明暗の反転(閾値No.4)
174         EFFECT_SOLARIZE_A_05,    //!< 明暗の反転(閾値No.5)
175         EFFECT_SOLARIZE_A_06,    //!< 明暗の反転(閾値No.6)
176         EFFECT_SOLARIZE_A_07,    //!< 明暗の反転(閾値No.7)
177         EFFECT_SOLARIZE_A_08,    //!< 明暗の反転(閾値No.8)
178         EFFECT_SOLARIZE_A_09,    //!< 明暗の反転(閾値No.9)
179         EFFECT_SOLARIZE_A_10,    //!< 明暗の反転(閾値No.10)
180         EFFECT_SOLARIZE_B_01,    //!< 明暗の反転(閾値No.1)に加えてUとVの順番を入れ替える
181         EFFECT_SOLARIZE_B_02,    //!< 明暗の反転(閾値No.2)に加えてUとVの順番を入れ替える
182         EFFECT_SOLARIZE_B_03,    //!< 明暗の反転(閾値No.3)に加えてUとVの順番を入れ替える
183         EFFECT_SOLARIZE_B_04,    //!< 明暗の反転(閾値No.4)に加えてUとVの順番を入れ替える
184         EFFECT_SOLARIZE_B_05,    //!< 明暗の反転(閾値No.5)に加えてUとVの順番を入れ替える
185         EFFECT_SOLARIZE_B_06,    //!< 明暗の反転(閾値No.6)に加えてUとVの順番を入れ替える
186         EFFECT_SOLARIZE_B_07,    //!< 明暗の反転(閾値No.7)に加えてUとVの順番を入れ替える
187         EFFECT_SOLARIZE_B_08,    //!< 明暗の反転(閾値No.8)に加えてUとVの順番を入れ替える
188         EFFECT_SOLARIZE_B_09,    //!< 明暗の反転(閾値No.9)に加えてUとVの順番を入れ替える
189         EFFECT_SOLARIZE_B_10,    //!< 明暗の反転(閾値No.10)に加えてUとVの順番を入れ替える
190 
191         EFFECT_MAX
192     };
193     /*!
194       @brief    コントラスト(ガンマカーブ)のパターンを示す列挙体です。
195     */
196     enum Contrast
197     {
198         CONTRAST_PATTERN_01,    //!< コントラストのパターンNo.1
199         CONTRAST_PATTERN_02,    //!< コントラストのパターンNo.2
200         CONTRAST_PATTERN_03,    //!< コントラストのパターンNo.3
201         CONTRAST_PATTERN_04,    //!< コントラストのパターンNo.4
202         CONTRAST_PATTERN_05,    //!< コントラストのパターンNo.5
203         CONTRAST_PATTERN_06,    //!< コントラストのパターンNo.6
204         CONTRAST_PATTERN_07,    //!< コントラストのパターンNo.7
205         CONTRAST_PATTERN_08,    //!< コントラストのパターンNo.8
206         CONTRAST_PATTERN_09,    //!< コントラストのパターンNo.9
207         CONTRAST_PATTERN_10,    //!< コントラストのパターンNo.10
208         CONTRAST_PATTERN_11,    //!< コントラストのパターンNo.11
209 
210         CONTRAST_MAX,
211 
212         CONTRAST_LOW    = CONTRAST_PATTERN_05,  //!< デフォルトよりもコントラスト比が低くなる設定
213         CONTRAST_NORMAL = CONTRAST_PATTERN_06,  //!< デフォルトの設定
214         CONTRAST_HIGH   = CONTRAST_PATTERN_07   //!< デフォルトよりもコントラスト比が高くなる設定
215     };
216     /*!
217       @brief    レンズ補正の程度を示す列挙体です。
218 
219                 ここでのレンズ補正とは、光量の差によって画像の中心と周辺の明るさに差が出てしまう現象(周辺光量低下)の対策として、
220                 画像の周辺の明るさを補正し、中心の明るさに近づける処理のことを指します。
221     */
222     enum LensCorrection
223     {
224         LENS_CORRECTION_OFF,        //!< レンズ補正をOFFにする
225         LENS_CORRECTION_ON_70,      //!< 画像の中心と周辺の明るさの比率が70%になるように周辺の明るさを調整する設定
226         LENS_CORRECTION_ON_90,      //!< 画像の中心と周辺の明るさの比率が90%になるように周辺の明るさを調整する設定
227 
228         LENS_CORRECTION_MAX,
229 
230         LENS_CORRECTION_DARK    = LENS_CORRECTION_OFF,      //!< デフォルト設定よりも画像の周辺が暗くなる設定
231         LENS_CORRECTION_NORMAL  = LENS_CORRECTION_ON_70,    //!< デフォルト設定
232         LENS_CORRECTION_BRIGHT  = LENS_CORRECTION_ON_90     //!< デフォルト設定よりも画像の周辺が明るくなる設定
233     };
234     /*!
235       @brief    画像の出力形式を示す列挙体です。
236 
237                     :private
238 
239     */
240     enum OutputFormat
241     {
242         OUTPUT_YUV_422, //!< YUV422フォーマット (ラインフォーマット)
243         OUTPUT_RGB_565, //!< RGB565フォーマット (ラインフォーマット)
244 
245         OUTPUT_MAX
246     };
247     /*!
248       @brief    シャッター音の種類を示す列挙体です。
249     */
250     enum ShutterSoundType
251     {
252         SHUTTER_SOUND_TYPE_NORMAL,    //!< 通常の撮影用シャッター音
253         SHUTTER_SOUND_TYPE_MOVIE,     //!< 動画撮影開始音
254         SHUTTER_SOUND_TYPE_MOVIE_END, //!< 動画撮影終了音
255         SHUTTER_SOUND_TYPE_MAX
256     };
257 
258     /*!
259       @brief    コンテキストなし、カメラ指定ありのパラメータの一括設定用の構造体です。
260     */
261     struct PackageParameterCameraSelect
262     {
263         CameraSelect    camera;                         //!< パラメータを設定するカメラの組み合わせ
264 
265         s8              exposure;                       //!< SetExposure で指定する値
266         WhiteBalance    whiteBalance;                   //!< SetWhiteBalance で指定する値
267         s8              sharpness;                      //!< SetSharpness で指定する値
268         bool            autoExposureOn;                 //!< SetAutoExposure で指定する値
269         bool            autoWhiteBalanceOn;             //!< SetAutoWhiteBalance で指定する値
270         FrameRate       frameRate;                      //!< SetFrameRate で指定する値
271         PhotoMode       photoMode;                      //!< SetPhotoMode で指定する値
272         Contrast        contrast;                       //!< SetContrast で指定する値
273         LensCorrection  lensCorrection;                 //!< SetLensCorrection で指定する値
274         bool            noiseFilterOn;                  //!< SetNoiseFilter で指定する値
275         NN_PADDING1;
276         s16             autoExposureWindowStartX;       //!< SetAutoExposureWindow で指定する startX の値
277         s16             autoExposureWindowStartY;       //!< SetAutoExposureWindow で指定する startY の値
278         s16             autoExposureWindowWidth;        //!< SetAutoExposureWindow で指定する width の値
279         s16             autoExposureWindowHeight;       //!< SetAutoExposureWindow で指定する height の値
280         s16             autoWhiteBalanceWindowStartX;   //!< SetAutoWhiteBalanceWindow で指定する startX の値
281         s16             autoWhiteBalanceWindowStartY;   //!< SetAutoWhiteBalanceWindow で指定する startY の値
282         s16             autoWhiteBalanceWindowWidth;    //!< SetAutoWhiteBalanceWindow で指定する width の値
283         s16             autoWhiteBalanceWindowHeight;   //!< SetAutoWhiteBalanceWindow で指定する height の値
284     };
285 
286     /*!
287       @brief    コンテキストあり、カメラ指定ありのパラメータの一括設定用の構造体です。
288                 SetDetailSize の方式でサイズ指定する場合に使用します。
289     */
290     struct PackageParameterContext
291     {
292         CameraSelect    camera;     //!< パラメータを設定するカメラの組み合わせ
293         Context         context;    //!< パラメータを設定するカメラのコンテキスト
294 
295         Flip            flip;       //!< FlipImage で指定する値
296         Effect          effect;     //!< SetEffect で指定する値
297         Size            size;       //!< SetSize で指定する値
298     };
299 
300     /*!
301       @brief    コンテキストあり、カメラ指定ありのパラメータの一括設定用の構造体です。
302                 SetDetailSize の方式でサイズ指定する場合に使用します。
303     */
304     struct PackageParameterContextDetail
305     {
306         CameraSelect    camera;     //!< パラメータを設定するカメラの組み合わせ
307         Context         context;    //!< パラメータを設定するカメラのコンテキスト
308 
309         Flip            flip;       //!< FlipImage で指定する値
310         Effect          effect;     //!< SetEffect で指定する値
311         s16             width;      //!< SetDetailSize で指定する width の値
312         s16             height;     //!< SetDetailSize で指定する height の値
313         s16             cropX0;     //!< SetDetailSize で指定する cropX0 の値
314         s16             cropY0;     //!< SetDetailSize で指定する cropY0 の値
315         s16             cropX1;     //!< SetDetailSize で指定する cropX1 の値
316         s16             cropY1;     //!< SetDetailSize で指定する cropY1 の値
317     };
318 
319 } // namespace CTR
320 } // namespace camera
321 } // namespace nn
322 
323 #endif //NN_CAMERA_CTR_CAMERA_TYPES_H_
324