1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     camera_Api.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: 31562 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_CAMERA_CTR_CAMERA_API_H_
17 #define NN_CAMERA_CTR_CAMERA_API_H_
18 
19 /*! @file
20     @brief      CAMERA に関する API の宣言
21 */
22 
23 #include <nn/os.h>
24 #include <nn/math.h>
25 #include <nn/camera/CTR/camera_Types.h>
26 #include <nn/y2r/CTR/y2r_Types.h>
27 
28 #include <nn/camera/CTR/camera_Camera.h>
29 
30 namespace nn {
31 namespace camera {
32 namespace CTR {
33 
34     namespace detail
35     {
36         nn::Result InitializeBase(Handle* pSession, const char* name, bool isCheck = false);
37         nn::Result PingProcess(u8* connectedNumber);
38         void FinalizeBase(Handle* pSession);
39         void StartCapture( Port port );
40         void StopCapture( Port port );
41         bool IsBusy( Port port );
42         void ClearBuffer( Port port );
43         void GetVsyncInterruptEvent( nn::os::Event* pEvent, Port port );
44         void GetBufferErrorInterruptEvent( nn::os::Event* pEvent, Port port );
45         void SetReceiving( nn::os::Event* pEvent, u32 pDst, Port port, size_t imageSize, s16 transferUnit );
46         bool IsFinishedReceiving( Port port );
47         void SetTransferLines( Port port, s16 lines, s16 width, s16 height );
48         s16 GetMaxLines( s16 width, s16 height );
49         void SetTransferBytes( Port port, size_t bytes, s16 width, s16 height );
50         size_t GetTransferBytes( Port port );
51         size_t GetMaxBytes( s16 width, s16 height );
52         void SetTrimming( Port port, bool enable );
53         bool IsTrimming( Port port );
54         void SetTrimmingParams( Port port, s16 xStart, s16 yStart, s16 xEnd, s16 yEnd );
55         void GetTrimmingParams( s16* pXStart, s16* pYStart, s16* pXEnd, s16* pYEnd, Port port );
56         void SetTrimmingParamsCenter( Port port, s16 trimWidth, s16 trimHeight, s16 camWidth, s16 camHeight );
57 
58         nn::Result Activate( CameraSelect select );
59         nn::Result SwitchContext( CameraSelect select, Context next );
60         nn::Result SetExposure( CameraSelect select, s8 exposure );
61         nn::Result SetWhiteBalance( CameraSelect select, WhiteBalance wb );
62         nn::Result SetSharpness( CameraSelect select, s8 sharpness );
63         nn::Result SetAutoExposure( CameraSelect select, bool on );
64         nn::Result IsAutoExposure( bool* pOn, CameraSelect select );
65         nn::Result SetAutoWhiteBalance( CameraSelect select, bool on );
66         nn::Result IsAutoWhiteBalance( bool* pOn, CameraSelect select );
67         nn::Result FlipImage( CameraSelect select, Flip flip, Context context );
68         nn::Result SetDetailSize( CameraSelect select, s16 width, s16 height, s16 cropX0, s16 cropY0, s16 cropX1, s16 cropY1, Context context );
69         nn::Result SetSize( CameraSelect select, Size size, Context context );
70         nn::Result SetFrameRate( CameraSelect select, FrameRate rate );
71         nn::Result SetPhotoMode( CameraSelect select, PhotoMode mode );
72         nn::Result SetEffect( CameraSelect select, Effect effect, Context context );
73         nn::Result SetContrast( CameraSelect select, Contrast contrast );
74         nn::Result SetLensCorrection( CameraSelect select, LensCorrection correction );
75         nn::Result SetOutputFormat( CameraSelect select, OutputFormat format, Context context );
76         nn::Result SetAutoExposureWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height );
77         nn::Result SetAutoWhiteBalanceWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height );
78         nn::Result SetNoiseFilter( CameraSelect select, bool on );
79         nn::Result SynchronizeVsyncTiming( CameraSelect select1, CameraSelect select2 );
80         void GetLatestVsyncTiming( nn::fnd::TimeSpan *pTime, Port port, size_t past );
81         void GetStereoCameraCalibrationData( StereoCameraCalibrationData * pDst );
82         f32  GetParallaxOnChart( const StereoCameraCalibrationData & cal );
83         void GetStereoCameraCalibrationMatrix( nn::math::MTX34 * pDst, const StereoCameraCalibrationData & cal, const f32 translationByPixel, const bool isIncludeParallax );
84 
85         // パラメータ一括設定ユーティリティ関数
86         nn::Result SetPackageParameterWithoutContext(const PackageParameterCameraSelect& param);
87         nn::Result SetPackageParameterWithContext(const PackageParameterContext& param);
88         nn::Result SetPackageParameterWithContext(const PackageParameterContextDetail& param);
89 
90         nn::Result GetSuitableY2rStandardCoefficient(nn::y2r::CTR::StandardCoefficient* no);
91 
92         nn::Result PlayShutterSound( ShutterSoundType type );
93 
94         nn::Result LeaveApplication();
95         nn::Result ArriveApplication();
96     }
97 
98     namespace
99     {
100         const char PORT_NAME_USER[]      = "cam:u";
101     }
102 
103     /*!
104     @brief      CAMERA ライブラリの初期化を行い、カメラを使用可能な状態にします。
105 
106     @return     関数の実行結果を返します。以下に挙げる Result を返します。
107     @retval     ResultSuccess               処理に成功しました。
108     @retval     ResultAlreadyInitialized    既に自分自身が初期化済みです。
109     @retval     ResultUsingOtherProcess     すでに他のプロセスが初期化済みのため使用できません。
110     @retval     ResultIsSleeping            蓋閉じ中であるため使用できません。
111     @retval     ResultFatalError            カメラが物理的に故障している可能性があります。
112 
113     */
114     nn::Result Initialize();
115 
Initialize()116     inline nn::Result Initialize() { return detail::InitializeBase(&detail::Camera::s_Session, PORT_NAME_USER); }
117 
118     /*!
119     @brief      CAMERA ライブラリを終了します。
120 
121     @return     なし。
122     */
123     void Finalize();
124 
Finalize()125     inline void Finalize()    { detail::FinalizeBase(&detail::Camera::s_Session); }
126 
127     /*!
128       @brief        キャプチャを開始します。
129 
130       @param[in]    port    動作させるポートを指定します。
131       @return       なし。
132     */
StartCapture(Port port)133     inline void StartCapture( Port port )
134     {
135         detail::StartCapture(port);
136     }
137     /*!
138       @brief        キャプチャを停止します。
139 
140       @param[in]    port    停止するポートを指定します。
141       @return       なし。
142     */
StopCapture(Port port)143     inline void StopCapture( Port port )
144     {
145         detail::StopCapture(port);
146     }
147     /*!
148       @brief        カメラが画像データを取り込み中かどうかを取得します。
149 
150       @param[in]    port    確認するポートを指定します。
151       @return       取り込み中であれば true, そうでなければ false が返ります。
152     */
IsBusy(Port port)153     inline bool IsBusy( Port port )
154     {
155         return detail::IsBusy(port);
156     }
157     /*!
158       @brief        バッファ、エラーフラグをクリアします。
159 
160       @param[in]    port    クリアするポートを指定します。
161       @return       なし。
162     */
ClearBuffer(Port port)163     inline void ClearBuffer( Port port )
164     {
165         detail::ClearBuffer(port);
166     }
167     /*!
168       @brief        カメラのVSYNC割り込みの発生を検知するためのイベントを取得します。
169 
170       @param[out]   pEvent  VSYNC割り込み発生時に起こされるイベントです。
171       @param[in]    port    割り込みを検知するポートを指定します。
172       @return       なし。
173     */
GetVsyncInterruptEvent(nn::os::Event * pEvent,Port port)174     inline void GetVsyncInterruptEvent( nn::os::Event* pEvent, Port port )
175     {
176         detail::GetVsyncInterruptEvent(pEvent, port);
177     }
178     /*!
179       @brief        カメラのバッファエラー割り込みと再起動処理の発生を検知するためのイベントを取得します。
180 
181                     再起動処理の発生通知は、PORT_CAM1, PORT_CAM2 両方に対して発生します。
182 
183       @param[out]   pEvent  バッファエラーもしくは再起動処理の発生時に起こされるイベントです。
184       @param[in]    port    割り込みを検知するポートを指定します。
185       @return       なし。
186     */
GetBufferErrorInterruptEvent(nn::os::Event * pEvent,Port port)187     inline void GetBufferErrorInterruptEvent( nn::os::Event* pEvent, Port port )
188     {
189         detail::GetBufferErrorInterruptEvent(pEvent, port);
190     }
191     /*!
192       @brief        画像データを読み込む設定をします。
193                     1フレームの受信しか行いませんので、カメラフレーム毎に設定する必要があります。
194 
195       @param[out]   pEvent          転送完了時に起こされるイベントです。
196       @param[out]   pDst            画像データが転送されます。
197       @param[in]    port            画像データを読み込むポートを指定します。
198       @param[in]    imageSize       転送する合計サイズ(フレームサイズ)を指定します。transferUnit の整数倍の必要があります。
199       @param[in]    transferUnit    1回の転送サイズ(横サイズ×ライン数)を指定します。
200       @return       なし。
201     */
SetReceiving(nn::os::Event * pEvent,void * pDst,Port port,size_t imageSize,s16 transferUnit)202     inline void SetReceiving( nn::os::Event* pEvent, void* pDst, Port port, size_t imageSize, s16 transferUnit )
203     {
204         detail::SetReceiving(pEvent, reinterpret_cast<u32>(pDst), port, imageSize, transferUnit);
205     }
206     /*!
207       @brief        画像データの転送が終了したかチェックします。
208 
209       @param[in]    port    転送完了をチェックするポートを指定します。
210       @return       転送が終了していれば true, 終了していなければ false が返ります。
211     */
IsFinishedReceiving(Port port)212     inline bool IsFinishedReceiving( Port port )
213     {
214         return detail::IsFinishedReceiving(port);
215     }
216     /*!
217       @brief        バッファに保存するライン数を設定します。
218 
219                     保存するデータ量がバッファの容量(10 KB)を超えないように注意してください。
220 
221       @param[in]    port    ライン数を設定するポートを指定します。
222       @param[in]    lines   ライン数を指定します。<BR>
223                               以下のすべての条件を満たす必要があります。<BR>
224                               (1) 転送データ量 (width * lines * 2) が 256 Byte の倍数である<BR>
225                               (2) height が lines の倍数である<BR>
226                               (3) 転送データ量 (width * lines * 2) が 10 KByte (10240 Byte) 以下である
227       @param[in]    width   転送する画像の横幅を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
228       @param[in]    height  転送する画像の高さを指定します。トリミングをする場合にはトリミング後の画像の高さを指定してください。
229       @return       なし。
230     */
SetTransferLines(Port port,s16 lines,s16 width,s16 height)231     inline void SetTransferLines( Port port, s16 lines, s16 width, s16 height )
232     {
233         detail::SetTransferLines(port, lines, width, height);
234     }
235     /*!
236       @brief        バッファに保存できる最大のライン数を取得します。
237 
238                       バッファには最大 10 KByte までデータを保存することができますが、バッファエラーを回避するため
239                       最大値の半分である 5 KByte を基準に、ライン数を返します。
240 
241                       以下のすべての条件を満たすライン数 lines が存在しない場合、内部で停止します。<BR>
242                       (1) 転送データ量 (width * lines * 2) が 256 Byte の倍数である<BR>
243                       (2) height が lines の倍数である<BR>
244                       (3) 転送データ量 (width * lines * 2) が 5 KByte (5120 Byte) 以下である
245 
246       @param[in]    width   横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
247       @param[in]    height  高さ(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の高さを指定してください。
248       @return       バッファに保存できる最大のライン数を返します。
249     */
GetMaxLines(s16 width,s16 height)250     inline s16 GetMaxLines( s16 width, s16 height )
251     {
252         return detail::GetMaxLines( width, height );
253     }
254     /*!
255       @brief        バッファに保存するバイト数を設定します。
256 
257                     保存するデータ量がバッファの容量(10 KB)を超えないように注意してください。
258 
259       @param[in]    port    バイト数を設定するポートを指定します。
260       @param[in]    bytes   バイト数を指定します。<BR>
261                               以下のすべての条件を満たす必要があります。<BR>
262                               (1) bytes が 256 Byte の倍数である<BR>
263                               (2) 画像1フレームのデータ量 (width * height * 2) が bytes の倍数である
264       @param[in]    width   転送する画像の横幅を指定します。トリミングを有効にしている場合にはトリミング後の画像の横幅を指定してください。
265       @param[in]    height  転送する画像の高さを指定します。トリミングを有効にしている場合にはトリミング後の画像の高さを指定してください。
266       @return       なし。
267     */
SetTransferBytes(Port port,size_t bytes,s16 width,s16 height)268     inline void SetTransferBytes( Port port, size_t bytes, s16 width, s16 height )
269     {
270         detail::SetTransferBytes(port, bytes, width, height);
271     }
272     /*!
273       @brief        バッファに保存するバイト数の現在の設定を取得します。
274 
275       @param[in]    port    設定を取得するポートを指定します。
276       @return       転送バイト数の現在の設定を返します。
277     */
GetTransferBytes(Port port)278     inline size_t GetTransferBytes( Port port )
279     {
280         return detail::GetTransferBytes(port);
281     }
282     /*!
283       @brief        バッファに保存できる最大のバイト数を取得します。
284 
285                       バッファには最大 10 KByte までデータを保存することができますが、バッファエラーを回避するため
286                       最大値の半分である 5 KByte を基準に、バイト数を返します。<BR>
287                       なお、以下の条件を満たさない場合、内部で停止します。<BR>
288                       ・画像1フレームのデータ量 (width * height * 2) が 256 Byte の倍数である
289 
290       @param[in]    width   横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
291       @param[in]    height  高さ(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
292       @return       バッファに保存できる最大のバイト数を返します。
293     */
GetMaxBytes(s16 width,s16 height)294     inline size_t GetMaxBytes( s16 width, s16 height )
295     {
296         return detail::GetMaxBytes( width, height );
297     }
298     /*!
299       @brief        1ラインのバイト数を取得します。
300 
301       @param[in]    width   横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
302       @return       1ラインのバイト数を返します。
303     */
GetLineBytes(s16 width)304     inline size_t GetLineBytes( s16 width )
305     {
306         return   ((width) << 1);    // 1画素あたり2バイト必要
307     }
308     /*!
309       @brief        1フレームのバイト数を取得します。
310 
311       @param[in]    width   横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
312       @param[in]    height  縦幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。
313       @return       1フレームのバイト数を返します。
314     */
GetFrameBytes(s16 width,s16 height)315     inline size_t GetFrameBytes( s16 width, s16 height )
316     {
317         return (GetLineBytes(width) * (height));
318     }
319     /*!
320       @brief        トリミングの有効、無効を切り替えます。
321 
322       @param[in]    port    設定を変更するポートを指定します。
323       @param[in]    enable  トリミングを有効にするならば true, そうでないなら false を指定します。
324       @return       なし。
325     */
SetTrimming(Port port,bool enable)326     inline void SetTrimming( Port port, bool enable )
327     {
328         detail::SetTrimming(port, enable);
329     }
330     /*!
331       @brief        トリミングが有効になっているかチェックします。
332 
333       @param[in]    port    設定を確認するポートを指定します。
334       @return       トリミングが有効ならば true, 無効ならば false を返します。
335     */
IsTrimming(Port port)336     inline bool IsTrimming( Port port )
337     {
338         return detail::IsTrimming(port);
339     }
340     /*!
341       @brief        トリミングを行う位置を設定します。
342 
343                     設定できる値には以下の制限があります。<BR>
344                     ・トリミング範囲は (xStart,yStart) から (xEnd-1, yEnd-1) までとなる。<BR>
345                     ・xEnd - xStart, 及び yEnd - yStart の値が偶数になる必要がある。<BR>
346                     ・xStart および yStart も偶数である必要がある。
347 
348       @param[in]    port    設定を変更するポートを指定します。
349       @param[in]    xStart  トリミング開始位置(x座標)
350       @param[in]    yStart  トリミング開始位置(y座標)
351       @param[in]    xEnd    トリミング終了位置(x座標)
352       @param[in]    yEnd    トリミング終了位置(y座標)
353       @return       なし。
354     */
SetTrimmingParams(Port port,s16 xStart,s16 yStart,s16 xEnd,s16 yEnd)355     inline void SetTrimmingParams( Port port, s16 xStart, s16 yStart, s16 xEnd, s16 yEnd )
356     {
357         detail::SetTrimmingParams(port, xStart, yStart, xEnd, yEnd);
358     }
359     /*!
360       @brief        トリミングを行う位置を取得します。
361 
362       @param[out]   pXStart トリミング開始位置(x座標)
363       @param[out]   pYStart トリミング開始位置(y座標)
364       @param[out]   pXEnd   トリミング終了位置(x座標)
365       @param[out]   pYEnd   トリミング終了位置(y座標)
366       @param[in]    port    設定を取得するポートを指定します。
367       @return       なし。
368     */
GetTrimmingParams(s16 * pXStart,s16 * pYStart,s16 * pXEnd,s16 * pYEnd,Port port)369     inline void GetTrimmingParams( s16* pXStart, s16* pYStart, s16* pXEnd, s16* pYEnd, Port port )
370     {
371         detail::GetTrimmingParams(pXStart, pYStart, pXEnd, pYEnd, port);
372     }
373     /*!
374       @brief        トリミングを行う位置をカメラ画像の中心を基準に設定します。
375 
376                     設定できる値には SetTrimmingParams 関数と同じ制限があります。
377 
378       @param[in]    port    設定を変更するポートを指定します。
379       @param[in]    trimWidth   トリミングする横幅
380       @param[in]    trimHeight  トリミングする縦幅
381       @param[in]    camWidth    カメラ解像度の横幅
382       @param[in]    camHeight   カメラ解像度の縦幅
383       @return       なし。
384     */
SetTrimmingParamsCenter(Port port,s16 trimWidth,s16 trimHeight,s16 camWidth,s16 camHeight)385     inline void SetTrimmingParamsCenter( Port port, s16 trimWidth, s16 trimHeight, s16 camWidth, s16 camHeight )
386     {
387         detail::SetTrimmingParamsCenter(port, trimWidth, trimHeight, camWidth, camHeight);
388     }
389 
390 
391     /*!
392       @brief        カメラを起動します。
393 
394                     (注意)<BR>
395                     カメラを起動した直後の4フレームは取得した画像が極端に暗い場合があります。
396                     また、カメラが起動した後に自動露出が安定するまでのフレームは上記の4フレームと合わせて、
397                     屋内で14フレーム、屋外で30フレーム程度となります。
398 
399       @param[in]    select  起動するカメラを指定します。
400       @return       関数の実行結果を返します。以下に挙げる Result を返します。
401       @retval       ResultSuccess               処理に成功しました。
402       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
403       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
404     */
Activate(CameraSelect select)405     inline nn::Result Activate( CameraSelect select )
406     {
407         return detail::Activate(select);
408     }
409     /*!
410       @brief        カメラ設定のコンテキストを切り替えます。
411 
412       @param[in]    select  コンテキストを切り替えるカメラを指定します。
413       @param[in]    next    切り替え先のコンテキストを指定します。
414       @return       関数の実行結果を返します。以下に挙げる Result を返します。
415       @retval       ResultSuccess               処理に成功しました。
416       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
417       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
418     */
SwitchContext(CameraSelect select,Context next)419     inline nn::Result SwitchContext( CameraSelect select, Context next )
420     {
421         return detail::SwitchContext(select, next);
422     }
423     /*!
424       @brief        露光を設定します。
425 
426       @param[in]    select      設定を変更するカメラを指定します。
427       @param[in]    exposure    露出量を指定します。指定可能な値の範囲は [-5, +5] です。
428       @return       関数の実行結果を返します。以下に挙げる Result を返します。
429       @retval       ResultSuccess               処理に成功しました。
430       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
431       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
432     */
SetExposure(CameraSelect select,s8 exposure)433     inline nn::Result SetExposure( CameraSelect select, s8 exposure )
434     {
435         return detail::SetExposure(select, exposure);
436     }
437     /*!
438       @brief        ホワイトバランスを設定します。
439 
440       @param[in]    select  設定を変更するカメラを指定します。
441       @param[in]    wb      ホワイトバランスを指定します。
442       @return       関数の実行結果を返します。以下に挙げる Result を返します。
443       @retval       ResultSuccess               処理に成功しました。
444       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
445       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
446     */
SetWhiteBalance(CameraSelect select,WhiteBalance wb)447     inline nn::Result SetWhiteBalance( CameraSelect select, WhiteBalance wb )
448     {
449         return detail::SetWhiteBalance(select, wb);
450     }
451     /*!
452       @brief        鮮明度を設定します。
453 
454       @param[in]    select      設定を変更するカメラを指定します。
455       @param[in]    sharpness   鮮明度を指定します。指定可能な値の範囲は [-4, +5] です。
456       @return       関数の実行結果を返します。以下に挙げる Result を返します。
457       @retval       ResultSuccess               処理に成功しました。
458       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
459       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
460     */
SetSharpness(CameraSelect select,s8 sharpness)461     inline nn::Result SetSharpness( CameraSelect select, s8 sharpness )
462     {
463         return detail::SetSharpness(select, sharpness);
464     }
465     /*!
466       @brief        自動露出機能の有効・無効を設定します。
467 
468       @param[in]    select  設定を変更するカメラを指定します。
469       @param[in]    on      有効にするならば true, そうでないなら false を指定します。
470       @return       関数の実行結果を返します。以下に挙げる Result を返します。
471       @retval       ResultSuccess               処理に成功しました。
472       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
473       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
474     */
SetAutoExposure(CameraSelect select,bool on)475     inline nn::Result SetAutoExposure( CameraSelect select, bool on )
476     {
477         return detail::SetAutoExposure(select, on);
478     }
479     /*!
480       @brief        自動露出機能が有効になっているかチェックします。
481 
482       @param[out]   pOn     有効になっていれば true, そうでなければ false が返されます。
483       @param[in]    select  設定を確認するカメラを指定します。
484       @return       関数の実行結果を返します。以下に挙げる Result を返します。
485       @retval       ResultSuccess               処理に成功しました。
486       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
487       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
488     */
IsAutoExposure(bool * pOn,CameraSelect select)489     inline nn::Result IsAutoExposure( bool* pOn, CameraSelect select )
490     {
491         return detail::IsAutoExposure(pOn, select);
492     }
493     /*!
494       @brief        ホワイトバランスの自動調整機能の有効・無効を設定します。
495 
496       @param[in]    select  設定を変更するカメラを指定します。
497       @param[in]    on      有効にするならば true, そうでないなら false を指定します。
498       @return       関数の実行結果を返します。以下に挙げる Result を返します。
499       @retval       ResultSuccess               処理に成功しました。
500       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
501       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
502     */
SetAutoWhiteBalance(CameraSelect select,bool on)503     inline nn::Result SetAutoWhiteBalance( CameraSelect select, bool on )
504     {
505         return detail::SetAutoWhiteBalance(select, on);
506     }
507     /*!
508       @brief        ホワイトバランスの自動調整機能が有効になっているかチェックします。
509 
510       @param[out]   pOn     有効になっていれば true, そうでなければ false が返されます。
511       @param[in]    select  設定を確認するカメラを指定します。
512       @return       関数の実行結果を返します。以下に挙げる Result を返します。
513       @retval       ResultSuccess               処理に成功しました。
514       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
515       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
516     */
IsAutoWhiteBalance(bool * pOn,CameraSelect select)517     inline nn::Result IsAutoWhiteBalance( bool* pOn, CameraSelect select )
518     {
519         return detail::IsAutoWhiteBalance(pOn, select);
520     }
521     /*!
522       @brief        画像への反転処理を設定します。
523 
524       @param[in]    select      設定を変更するカメラを指定します。
525       @param[in]    flip        反転処理を指定します。
526       @param[in]    context     設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。
527       @return       関数の実行結果を返します。以下に挙げる Result を返します。
528       @retval       ResultSuccess               処理に成功しました。
529       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
530       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
531     */
532     inline nn::Result FlipImage( CameraSelect select, Flip flip, Context context = CONTEXT_BOTH )
533     {
534         return detail::FlipImage(select, flip, context);
535     }
536     /*!
537       @brief        解像度をピクセル単位で設定します。
538 
539       @param[in]    select      設定を変更するカメラを指定します。
540       @param[in]    width       画像の横幅を指定します。
541       @param[in]    height      画像の横幅を指定します。
542       @param[in]    cropX0      640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の左上端点の横方向座標を指定します。
543                                   画像の出力サイズにかかわらず [0, 639] の範囲で指定してください。
544                                   クロップ領域の幅が出力画像の幅以上となるように指定してください。
545                                   省略すると 0 が設定されます。
546       @param[in]    cropY0      640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の左上端点の縦方向座標を指定します。
547                                   画像の出力サイズにかかわらず [0, 479] の範囲で指定してください。
548                                   クロップ領域の高さが出力画像の高さ以上となるように指定してください。
549                                   省略すると 0 が設定されます。
550       @param[in]    cropX1      640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の右下端点の横方向座標を指定します。
551                                   画像の出力サイズにかかわらず [0, 639] の範囲で指定してください。
552                                   クロップ領域の幅が出力画像の幅以上となるように指定してください。
553                                   省略すると 639 が設定されます。
554       @param[in]    cropY1      640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の右下端点の縦方向座標を指定します。
555                                   画像の出力サイズにかかわらず [0, 479] の範囲で指定してください。
556                                   クロップ領域の高さが出力画像の高さ以上となるように指定してください。
557                                   省略すると 479 が設定されます。
558       @param[in]    context     設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。
559       @return       関数の実行結果を返します。以下に挙げる Result を返します。
560       @retval       ResultSuccess               処理に成功しました。
561       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
562       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
563     */
564     inline nn::Result SetDetailSize( CameraSelect select, s16 width, s16 height, s16 cropX0 = 0, s16 cropY0 = 0, s16 cropX1 = 639, s16 cropY1 = 479, Context context = CONTEXT_BOTH )
565     {
566         return detail::SetDetailSize(select, width, height, cropX0, cropY0, cropX1, cropY1, context);
567     }
568     /*!
569       @brief        解像度を設定します。
570 
571       @param[in]    select      設定を変更するカメラを指定します。
572       @param[in]    size        解像度を指定します。
573       @param[in]    context     設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。
574       @return       関数の実行結果を返します。以下に挙げる Result を返します。
575       @retval       ResultSuccess               処理に成功しました。
576       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
577       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
578     */
579     inline nn::Result SetSize( CameraSelect select, Size size, Context context = CONTEXT_BOTH )
580     {
581         return detail::SetSize(select, size, context);
582     }
583     /*!
584       @brief        フレームレートを設定します。
585 
586       @param[in]    select  設定を変更するカメラを指定します。
587       @param[in]    rate    フレームレートを指定します。
588       @return       関数の実行結果を返します。以下に挙げる Result を返します。
589       @retval       ResultSuccess               処理に成功しました。
590       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
591       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
592     */
SetFrameRate(CameraSelect select,FrameRate rate)593     inline nn::Result SetFrameRate( CameraSelect select, FrameRate rate )
594     {
595         return detail::SetFrameRate(select, rate);
596     }
597     /*!
598       @brief        撮影モードを設定します。
599 
600       @param[in]    select  設定を変更するカメラを指定します。
601       @param[in]    mode    撮影モードを指定します。
602       @return       関数の実行結果を返します。以下に挙げる Result を返します。
603       @retval       ResultSuccess               処理に成功しました。
604       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
605       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
606     */
SetPhotoMode(CameraSelect select,PhotoMode mode)607     inline nn::Result SetPhotoMode( CameraSelect select, PhotoMode mode )
608     {
609         return detail::SetPhotoMode(select, mode);
610     }
611     /*!
612       @brief        画像へのエフェクトを設定します。
613 
614       @param[in]    select  設定を変更するカメラを指定します。
615       @param[in]    effect  エフェクトを指定します。
616       @param[in]    context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。
617       @return       関数の実行結果を返します。以下に挙げる Result を返します。
618       @retval       ResultSuccess               処理に成功しました。
619       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
620       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
621     */
622     inline nn::Result SetEffect( CameraSelect select, Effect effect, Context context = CONTEXT_BOTH )
623     {
624         return detail::SetEffect(select, effect, context);
625     }
626     /*!
627       @brief        画像のコントラスト(ガンマカーブ)を設定します。
628 
629       @param[in]    select    設定を変更するカメラを指定します。
630       @param[in]    contrast  コントラスト(ガンマカーブ)を指定します。
631       @return       関数の実行結果を返します。以下に挙げる Result を返します。
632       @retval       ResultSuccess               処理に成功しました。
633       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
634       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
635     */
SetContrast(CameraSelect select,Contrast contrast)636     inline nn::Result SetContrast( CameraSelect select, Contrast contrast )
637     {
638         return detail::SetContrast(select, contrast);
639     }
640     /*!
641       @brief        レンズ補正の程度を設定します。
642 
643                     ここでのレンズ補正とは、光量の差によって画像の中心と周辺の明るさに差が出てしまう現象(周辺光量低下)の対策として、
644                     画像の周辺の明るさを補正し、中心の明るさに近づける処理のことを指します。
645 
646       @param[in]    select      設定を変更するカメラを指定します。
647       @param[in]    correction  レンズ補正の程度を指定します。
648       @return       関数の実行結果を返します。以下に挙げる Result を返します。
649       @retval       ResultSuccess               処理に成功しました。
650       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
651       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
652     */
SetLensCorrection(CameraSelect select,LensCorrection correction)653     inline nn::Result SetLensCorrection( CameraSelect select, LensCorrection correction )
654     {
655         return detail::SetLensCorrection(select, correction);
656     }
657     /*!
658       @brief        画像の出力形式を設定します。
659 
660                     :private
661 
662       @param[in]    select  設定を変更するカメラを指定します。
663       @param[in]    format  出力形式を指定します。画像形式によって画質が異なりますのでご注意ください。
664       @param[in]    context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。
665       @return       関数の実行結果を返します。以下に挙げる Result を返します。
666       @retval       ResultSuccess               処理に成功しました。
667       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
668       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
669     */
670     inline nn::Result SetOutputFormat( CameraSelect select, OutputFormat format, Context context = CONTEXT_BOTH )
671     {
672         return detail::SetOutputFormat(select, format, context);
673     }
674     /*!
675       @brief        自動露出の計算の基準となる領域(反応枠)を設定します。
676 
677       @param[in]    select  設定を変更するカメラを指定します。
678       @param[in]    startX  領域の左上端点の横方向座標を指定します。画像の左上端点の横方向座標を0として[0, 600]の間で40ピクセル単位で指定できます。
679       @param[in]    startY  領域の左上端点の縦方向座標を指定します。画像の左上端点の縦方向座標を0として[0, 450]の間で30ピクセル単位で指定できます。
680       @param[in]    width   領域の横幅を指定します。[0, 640]の間で40ピクセル単位で指定できます。
681       @param[in]    height  領域の高さを指定します。[0, 480]の間で30ピクセル単位で指定できます。
682       @return       関数の実行結果を返します。以下に挙げる Result を返します。
683       @retval       ResultSuccess               処理に成功しました。
684       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
685       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
686     */
SetAutoExposureWindow(CameraSelect select,s16 startX,s16 startY,s16 width,s16 height)687     inline nn::Result SetAutoExposureWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height )
688     {
689         return detail::SetAutoExposureWindow( select, startX, startY, width, height );
690     }
691     /*!
692       @brief        オートホワイトバランスの計算の基準となる領域(反応枠)を設定します。
693 
694       @param[in]    select  設定を変更するカメラを指定します。
695       @param[in]    startX  領域の左上端点の横方向座標を指定します。画像の左上端点の横方向座標を0として[0, 600]の間で40ピクセル単位で指定できます。
696       @param[in]    startY  領域の左上端点の縦方向座標を指定します。画像の左上端点の縦方向座標を0として[0, 450]の間で30ピクセル単位で指定できます。
697       @param[in]    width   領域の横幅を指定します。[0, 640]の間で40ピクセル単位で指定できます。
698       @param[in]    height  領域の高さを指定します。[0, 480]の間で30ピクセル単位で指定できます。
699       @return       関数の実行結果を返します。以下に挙げる Result を返します。
700       @retval       ResultSuccess               処理に成功しました。
701       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
702       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
703     */
SetAutoWhiteBalanceWindow(CameraSelect select,s16 startX,s16 startY,s16 width,s16 height)704     inline nn::Result SetAutoWhiteBalanceWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height )
705     {
706         return detail::SetAutoWhiteBalanceWindow( select, startX, startY, width, height );
707     }
708     /*!
709       @brief        ノイズフィルタを設定します。
710 
711       @param[in]    select  設定を変更するカメラを指定します。
712       @param[in]    on      ノイズフィルタを有効にする場合には true を指定し、無効にする場合には false を指定してください。デフォルトではノイズフィルタは有効です。
713       @return       関数の実行結果を返します。以下に挙げる Result を返します。
714       @retval       ResultSuccess               処理に成功しました。
715       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
716       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
717     */
SetNoiseFilter(CameraSelect select,bool on)718     inline nn::Result SetNoiseFilter( CameraSelect select, bool on )
719     {
720         return detail::SetNoiseFilter( select, on );
721     }
722     /*!
723       @brief        カメラVSYNC信号のタイミングを同期させます。ただし、タイミングのズレが完全に0になるわけではありません。
724 
725                     (注意)<BR>
726                     指定した2つのカメラ画像の明るさが異なる場合、
727                     関数実行直後の3フレームは取得した画像が極端に明るい場合があります。
728                     また、この場合、自動露出が安定するまでに最大で12フレームかかることがあります。
729 
730       @param[in]    select1  同期の対象となるカメラを指定します。
731       @param[in]    select2  同期の対象となるカメラを指定します。
732       @return       関数の実行結果を返します。以下に挙げる Result を返します。
733       @retval       ResultSuccess               処理に成功しました。
734       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
735       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
736     */
SynchronizeVsyncTiming(CameraSelect select1,CameraSelect select2)737     inline nn::Result SynchronizeVsyncTiming( CameraSelect select1, CameraSelect select2 )
738     {
739         return detail::SynchronizeVsyncTiming( select1, select2 );
740     }
741     /*!
742       @brief        カメラVsync信号が入力されたタイミングの履歴を取得します。
743 
744                     内部的には、カメラ割り込みのハンドラ内で Tick 値を取得しています。
745 
746       @param[out]   pTime   タイミングの格納先を指定します。
747       @param[in]    port    タイミングを取得したいカメラが接続されているポートを指定します。
748       @param[in]    past    タイミングの履歴の数を指定します。
749                               1 から 5 の間の整数を指定することができます。省略した場合、1 となります。
750                               pTime には直前のタイミングを先頭として過去にさかのぼって値が格納されます。
751                               そのため、pTime には past の分だけ領域が確保されている必要があります。
752                               ただし、カメラが起動してから入力された Vsync 信号の数(便宜上 frame とよびます)が past よりも小さい場合、
753                               pTime[frame] から pTime[past-1] までには不定値が格納されます。
754       @return       なし。
755     */
756     inline void GetLatestVsyncTiming( nn::fnd::TimeSpan *pTime, Port port, size_t past = 1)
757     {
758         detail::GetLatestVsyncTiming( pTime, port, past );
759     }
760     /*!
761       @brief        ステレオカメラの位置キャリブレーションデータを取得します。
762 
763       @param[out]   pDst    キャリブレーションデータの格納先を指定します。
764       @return       なし。
765     */
GetStereoCameraCalibrationData(StereoCameraCalibrationData * pDst)766     inline void GetStereoCameraCalibrationData( StereoCameraCalibrationData * pDst )
767     {
768         detail::GetStereoCameraCalibrationData( pDst );
769     }
770     /*!
771       @brief        ステレオカメラのキャリブレーションデータ測定時の測定チャート上での視差を計算します。
772 
773       @param[in]    cal     キャリブレーションデータを指定します。
774       @return       測定チャート上での視差を返します。
775                     返り値は右カメラ画像を基準とした場合の左カメラ画像の移動量として表現されます。
776                     単位はピクセルです。
777     */
GetParallaxOnChart(const StereoCameraCalibrationData & cal)778     inline f32 GetParallaxOnChart( const StereoCameraCalibrationData & cal )
779     {
780         return detail::GetParallaxOnChart( cal );
781     }
782     /*!
783       @brief        3D空間上で左カメラ画像を右カメラ画像に合わせるための補正行列を計算します。
784 
785       @param[out]   pDst                補正行列の格納先を指定します。
786       @param[in]    cal                 キャリブレーションデータを指定します。
787       @param[in]    translationByPixel  3D空間上でのカメラ画像を 1 ピクセル分だけ並進移動させるために必要な移動量を指定します。
788       @param[in]    isIncludeParallax   水平方向の移動量に測定チャート上での視差を含めるかどうかを指定します。
789       @return       なし。
790     */
791     inline void GetStereoCameraCalibrationMatrix(
792                         nn::math::MTX34                   * pDst,
793                         const StereoCameraCalibrationData & cal,
794                         const f32                         translationByPixel,
795                         const bool                        isIncludeParallax = true )
796     {
797         detail::GetStereoCameraCalibrationMatrix( pDst, cal, translationByPixel, isIncludeParallax );
798     }
799 
800     /*!
801       @brief        コンテキスト指定のないカメラの設定を一括して設定します。
802 
803                     @ref SetWhiteBalance で指定する値が WHITE_BALANCE_NORMAL でなければ、@ref SetAutoWhiteBalance の設定は行いません。
804 
805       @param[in]    param    設定するパラメータです。
806       @return       関数の実行結果を返します。以下に挙げる Result を返します。
807       @retval       ResultSuccess               処理に成功しました。
808       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
809       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
810     */
SetPackageParameterWithoutContext(const PackageParameterCameraSelect & param)811     inline nn::Result SetPackageParameterWithoutContext(const PackageParameterCameraSelect& param)
812     {
813         return detail::SetPackageParameterWithoutContext( param );
814     }
815 
816     /*!
817       :overload nodetail
818 
819       @brief        コンテキスト指定のあるカメラの設定を一括して設定します。
820                     解像度を列挙体で設定する際に使用します。
821 
822       @param[in]    param    設定するパラメータです。
823       @return       関数の実行結果を返します。以下に挙げる Result を返します。
824       @retval       ResultSuccess               処理に成功しました。
825       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
826       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
827     */
SetPackageParameterWithContext(const PackageParameterContext & param)828     inline nn::Result SetPackageParameterWithContext(const PackageParameterContext& param)
829     {
830         return detail::SetPackageParameterWithContext( param );
831     }
832 
833     /*!
834       :overload nodetail
835 
836       @brief        コンテキスト指定のあるカメラの設定を一括して設定します。
837                     解像度をピクセル単位で設定する際に使用します。
838 
839       @param[in]    param    設定するパラメータです。
840       @return       関数の実行結果を返します。以下に挙げる Result を返します。
841       @retval       ResultSuccess               処理に成功しました。
842       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
843       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
844     */
SetPackageParameterWithContext(const PackageParameterContextDetail & param)845     inline nn::Result SetPackageParameterWithContext(const PackageParameterContextDetail& param)
846     {
847         return detail::SetPackageParameterWithContext( param );
848     }
849 
850     /*!
851       @brief        カメラの出力データに適した Y2R の変換係数を取得します。
852 
853       @param[out]   no    カメラから取得した YUV データを RGB に変換する際に適した標準的な変換係数のタイプです。
854       @return       関数の実行結果を返します。以下に挙げる Result を返します。
855       @retval       ResultSuccess               処理に成功しました。
856       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
857       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
858     */
GetSuitableY2rStandardCoefficient(nn::y2r::CTR::StandardCoefficient * no)859     inline nn::Result GetSuitableY2rStandardCoefficient(nn::y2r::CTR::StandardCoefficient* no)
860     {
861         return detail::GetSuitableY2rStandardCoefficient( no );
862     }
863 
864     /*!
865       @brief        シャッター音の再生とカメラLEDの一時消灯を行います。
866 
867       @param[in]    type    再生するシャッター音の種類を指定します。
868       @return       関数の実行結果を返します。以下に挙げる Result を返します。
869       @retval       ResultSuccess               処理に成功しました。
870       @retval       ResultIsSleeping            蓋閉じ中であるため使用できません。
871       @retval       ResultFatalError            カメラが物理的に故障している可能性があります。
872     */
PlayShutterSound(ShutterSoundType type)873     inline nn::Result PlayShutterSound( ShutterSoundType type )
874     {
875         return detail::PlayShutterSound( type );
876     }
877 
878     // 他のアプレットに遷移することをカメラプロセスに通知する関数(内部用)
LeaveApplication()879     inline nn::Result LeaveApplication()
880     {
881         return detail::LeaveApplication();
882     }
ArriveApplication()883     inline nn::Result ArriveApplication()
884     {
885         return detail::ArriveApplication();
886     }
887 }
888 }
889 }
890 
891 #endif  // ifndef NN_CAMERA_CTR_CAMERA_API_H_
892