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