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