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