/*---------------------------------------------------------------------------* Project: Horizon File: camera_Api.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 34383 $ *---------------------------------------------------------------------------*/ #ifndef NN_CAMERA_CTR_CAMERA_API_H_ #define NN_CAMERA_CTR_CAMERA_API_H_ /*! @file @brief CAMERA に関する API の宣言 */ #include #include #include #include #include namespace nn { namespace camera { namespace CTR { namespace detail { nn::Result InitializeBase(Handle* pSession, const char* name, bool isCheck = false); void FinalizeBase(Handle* pSession); void StartCapture( Port port ); void StopCapture( Port port ); bool IsBusy( Port port ); void ClearBuffer( Port port ); void GetVsyncInterruptEvent( nn::os::Event* pEvent, Port port ); void GetBufferErrorInterruptEvent( nn::os::Event* pEvent, Port port ); void SetReceiving( nn::os::Event* pEvent, u32 pDst, Port port, size_t imageSize, s16 transferUnit ); bool IsFinishedReceiving( Port port ); void SetTransferLines( Port port, s16 lines, s16 width, s16 height ); s16 GetMaxLines( s16 width, s16 height ); void SetTransferBytes( Port port, size_t bytes, s16 width, s16 height ); size_t GetTransferBytes( Port port ); size_t GetMaxBytes( s16 width, s16 height ); void SetTrimming( Port port, bool enable ); bool IsTrimming( Port port ); void SetTrimmingParams( Port port, s16 xStart, s16 yStart, s16 xEnd, s16 yEnd ); void GetTrimmingParams( s16* pXStart, s16* pYStart, s16* pXEnd, s16* pYEnd, Port port ); void SetTrimmingParamsCenter( Port port, s16 trimWidth, s16 trimHeight, s16 camWidth, s16 camHeight ); nn::Result Activate( CameraSelect select ); nn::Result SwitchContext( CameraSelect select, Context next ); nn::Result SetExposure( CameraSelect select, s8 exposure ); nn::Result SetWhiteBalance( CameraSelect select, WhiteBalance wb ); nn::Result SetSharpness( CameraSelect select, s8 sharpness ); nn::Result SetAutoExposure( CameraSelect select, bool on ); nn::Result IsAutoExposure( bool* pOn, CameraSelect select ); nn::Result SetAutoWhiteBalance( CameraSelect select, bool on ); nn::Result IsAutoWhiteBalance( bool* pOn, CameraSelect select ); nn::Result FlipImage( CameraSelect select, Flip flip, Context context ); nn::Result SetDetailSize( CameraSelect select, s16 width, s16 height, s16 cropX0, s16 cropY0, s16 cropX1, s16 cropY1, Context context ); nn::Result SetSize( CameraSelect select, Size size, Context context ); nn::Result SetFrameRate( CameraSelect select, FrameRate rate ); nn::Result SetPhotoMode( CameraSelect select, PhotoMode mode ); nn::Result SetEffect( CameraSelect select, Effect effect, Context context ); nn::Result SetContrast( CameraSelect select, Contrast contrast ); nn::Result SetLensCorrection( CameraSelect select, LensCorrection correction ); nn::Result SetOutputFormat( CameraSelect select, OutputFormat format, Context context ); nn::Result SetAutoExposureWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height ); nn::Result SetAutoWhiteBalanceWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height ); nn::Result SetNoiseFilter( CameraSelect select, bool on ); nn::Result SynchronizeVsyncTiming( CameraSelect select1, CameraSelect select2 ); void GetLatestVsyncTiming( nn::fnd::TimeSpan *pTime, Port port, size_t past ); void GetStereoCameraCalibrationData( StereoCameraCalibrationData * pDst ); f32 GetParallaxOnChart( const StereoCameraCalibrationData & cal ); void GetStereoCameraCalibrationMatrix( nn::math::MTX34 * pDst, const StereoCameraCalibrationData & cal, const f32 translationByPixel, const bool isIncludeParallax ); // パラメータ一括設定ユーティリティ関数 nn::Result SetPackageParameterWithoutContext(const PackageParameterCameraSelect& param); nn::Result SetPackageParameterWithContext(const PackageParameterContext& param); nn::Result SetPackageParameterWithContext(const PackageParameterContextDetail& param); nn::Result GetSuitableY2rStandardCoefficient(nn::y2r::CTR::StandardCoefficient* no); nn::Result PlayShutterSound( ShutterSoundType type ); nn::Result LeaveApplication(); nn::Result ArriveApplication(); } namespace { const char PORT_NAME_USER[] = "cam:u"; } /*! @brief CAMERA ライブラリの初期化を行い、カメラを使用可能な状態にします。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultAlreadyInitialized 既に初期化済みです。 @retval ResultUsingOtherProcess 他のプロセスが使用中のため使用できません。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ nn::Result Initialize(); inline nn::Result Initialize() { return detail::InitializeBase(&detail::Camera::s_Session, PORT_NAME_USER); } /*! @brief CAMERA ライブラリを終了します。 @return なし。 */ void Finalize(); inline void Finalize() { detail::FinalizeBase(&detail::Camera::s_Session); } /*! @brief キャプチャを開始します。 @param[in] port 動作させるポートを指定します。 @return なし。 */ inline void StartCapture( Port port ) { detail::StartCapture(port); } /*! @brief キャプチャを停止します。 @param[in] port 停止するポートを指定します。 @return なし。 */ inline void StopCapture( Port port ) { detail::StopCapture(port); } /*! @brief カメラが画像データを取り込み中かどうかを取得します。 @param[in] port 確認するポートを指定します。 @return 取り込み中であれば true, そうでなければ false が返ります。 */ inline bool IsBusy( Port port ) { return detail::IsBusy(port); } /*! @brief バッファ、エラーフラグをクリアします。 @param[in] port クリアするポートを指定します。 @return なし。 */ inline void ClearBuffer( Port port ) { detail::ClearBuffer(port); } /*! @brief カメラのVSYNC割り込みの発生を検知するためのイベントを取得します。 @param[out] pEvent VSYNC割り込み発生時に起こされるイベントです。 @param[in] port 割り込みを検知するポートを指定します。 @return なし。 */ inline void GetVsyncInterruptEvent( nn::os::Event* pEvent, Port port ) { detail::GetVsyncInterruptEvent(pEvent, port); } /*! @brief カメラのバッファエラー割り込みと再起動処理の発生を検知するためのイベントを取得します。 再起動処理の発生通知は、PORT_CAM1, PORT_CAM2 両方に対して発生します。 @param[out] pEvent バッファエラーもしくは再起動処理の発生時に起こされるイベントです。 @param[in] port 割り込みを検知するポートを指定します。 @return なし。 */ inline void GetBufferErrorInterruptEvent( nn::os::Event* pEvent, Port port ) { detail::GetBufferErrorInterruptEvent(pEvent, port); } /*! @brief 画像データを読み込む設定をします。 1フレームの受信しか行いませんので、カメラフレーム毎に設定する必要があります。 @param[out] pEvent 転送完了時に起こされるイベントです。 @param[out] pDst 画像データが転送されます。 @param[in] port 画像データを読み込むポートを指定します。 @param[in] imageSize 転送する合計サイズ(フレームサイズ)を指定します。transferUnit の整数倍の必要があります。 @param[in] transferUnit 1回の転送サイズ(横サイズ×ライン数)を指定します。 @return なし。 */ inline void SetReceiving( nn::os::Event* pEvent, void* pDst, Port port, size_t imageSize, s16 transferUnit ) { detail::SetReceiving(pEvent, reinterpret_cast(pDst), port, imageSize, transferUnit); } /*! @brief 画像データの転送が終了したかチェックします。 @param[in] port 転送完了をチェックするポートを指定します。 @return 転送が終了していれば true, 終了していなければ false が返ります。 */ inline bool IsFinishedReceiving( Port port ) { return detail::IsFinishedReceiving(port); } /*! @brief バッファに保存するライン数を設定します。 保存するデータ量がバッファの容量(10 KB)を超えないように注意してください。 @param[in] port ライン数を設定するポートを指定します。 @param[in] lines ライン数を指定します。
以下のすべての条件を満たす必要があります。
(1) 転送データ量 (width * lines * 2) が 256 Byte の倍数である
(2) height が lines の倍数である
(3) 転送データ量 (width * lines * 2) が 10 KByte (10240 Byte) 以下である @param[in] width 転送する画像の横幅を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @param[in] height 転送する画像の高さを指定します。トリミングをする場合にはトリミング後の画像の高さを指定してください。 @return なし。 */ inline void SetTransferLines( Port port, s16 lines, s16 width, s16 height ) { detail::SetTransferLines(port, lines, width, height); } /*! @brief バッファに保存できる最大のライン数を取得します。 バッファには最大 10 KByte までデータを保存することができますが、バッファエラーを回避するため 最大値の半分である 5 KByte を基準に、ライン数を返します。 以下のすべての条件を満たすライン数 lines が存在しない場合、内部で停止します。
(1) 転送データ量 (width * lines * 2) が 256 Byte の倍数である
(2) height が lines の倍数である
(3) 転送データ量 (width * lines * 2) が 5 KByte (5120 Byte) 以下である @param[in] width 横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @param[in] height 高さ(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の高さを指定してください。 @return バッファに保存できる最大のライン数を返します。 */ inline s16 GetMaxLines( s16 width, s16 height ) { return detail::GetMaxLines( width, height ); } /*! @brief バッファに保存するバイト数を設定します。 保存するデータ量がバッファの容量(10 KB)を超えないように注意してください。 @param[in] port バイト数を設定するポートを指定します。 @param[in] bytes バイト数を指定します。
以下のすべての条件を満たす必要があります。
(1) bytes が 256 Byte の倍数である
(2) 画像1フレームのデータ量 (width * height * 2) が bytes の倍数である @param[in] width 転送する画像の横幅を指定します。トリミングを有効にしている場合にはトリミング後の画像の横幅を指定してください。 @param[in] height 転送する画像の高さを指定します。トリミングを有効にしている場合にはトリミング後の画像の高さを指定してください。 @return なし。 */ inline void SetTransferBytes( Port port, size_t bytes, s16 width, s16 height ) { detail::SetTransferBytes(port, bytes, width, height); } /*! @brief バッファに保存するバイト数の現在の設定を取得します。 @param[in] port 設定を取得するポートを指定します。 @return 転送バイト数の現在の設定を返します。 */ inline size_t GetTransferBytes( Port port ) { return detail::GetTransferBytes(port); } /*! @brief バッファに保存できる最大のバイト数を取得します。 バッファには最大 10 KByte までデータを保存することができますが、バッファエラーを回避するため 最大値の半分である 5 KByte を基準に、バイト数を返します。
なお、以下の条件を満たさない場合、内部で停止します。
・画像1フレームのデータ量 (width * height * 2) が 256 Byte の倍数である @param[in] width 横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @param[in] height 高さ(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @return バッファに保存できる最大のバイト数を返します。 */ inline size_t GetMaxBytes( s16 width, s16 height ) { return detail::GetMaxBytes( width, height ); } /*! @brief 1ラインのバイト数を取得します。 @param[in] width 横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @return 1ラインのバイト数を返します。 */ inline size_t GetLineBytes( s16 width ) { return ((width) << 1); // 1画素あたり2バイト必要 } /*! @brief 1フレームのバイト数を取得します。 @param[in] width 横幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @param[in] height 縦幅(ピクセル)を指定します。トリミングをする場合にはトリミング後の画像の横幅を指定してください。 @return 1フレームのバイト数を返します。 */ inline size_t GetFrameBytes( s16 width, s16 height ) { return (GetLineBytes(width) * (height)); } /*! @brief トリミングの有効、無効を切り替えます。 @param[in] port 設定を変更するポートを指定します。 @param[in] enable トリミングを有効にするならば true, そうでないなら false を指定します。 @return なし。 */ inline void SetTrimming( Port port, bool enable ) { detail::SetTrimming(port, enable); } /*! @brief トリミングが有効になっているかチェックします。 @param[in] port 設定を確認するポートを指定します。 @return トリミングが有効ならば true, 無効ならば false を返します。 */ inline bool IsTrimming( Port port ) { return detail::IsTrimming(port); } /*! @brief トリミングを行う位置を設定します。 設定できる値には以下の制限があります。
・トリミング範囲は (xStart,yStart) から (xEnd-1, yEnd-1) までとなる。
・xEnd - xStart, 及び yEnd - yStart の値が偶数になる必要がある。
・xStart および yStart も偶数である必要がある。 @param[in] port 設定を変更するポートを指定します。 @param[in] xStart トリミング開始位置(x座標) @param[in] yStart トリミング開始位置(y座標) @param[in] xEnd トリミング終了位置(x座標) @param[in] yEnd トリミング終了位置(y座標) @return なし。 */ inline void SetTrimmingParams( Port port, s16 xStart, s16 yStart, s16 xEnd, s16 yEnd ) { detail::SetTrimmingParams(port, xStart, yStart, xEnd, yEnd); } /*! @brief トリミングを行う位置を取得します。 @param[out] pXStart トリミング開始位置(x座標) @param[out] pYStart トリミング開始位置(y座標) @param[out] pXEnd トリミング終了位置(x座標) @param[out] pYEnd トリミング終了位置(y座標) @param[in] port 設定を取得するポートを指定します。 @return なし。 */ inline void GetTrimmingParams( s16* pXStart, s16* pYStart, s16* pXEnd, s16* pYEnd, Port port ) { detail::GetTrimmingParams(pXStart, pYStart, pXEnd, pYEnd, port); } /*! @brief トリミングを行う位置をカメラ画像の中心を基準に設定します。 設定できる値には SetTrimmingParams 関数と同じ制限があります。 @param[in] port 設定を変更するポートを指定します。 @param[in] trimWidth トリミングする横幅 @param[in] trimHeight トリミングする縦幅 @param[in] camWidth カメラ解像度の横幅 @param[in] camHeight カメラ解像度の縦幅 @return なし。 */ inline void SetTrimmingParamsCenter( Port port, s16 trimWidth, s16 trimHeight, s16 camWidth, s16 camHeight ) { detail::SetTrimmingParamsCenter(port, trimWidth, trimHeight, camWidth, camHeight); } /*! @brief カメラを起動します。 (注意)
カメラを起動した直後の4フレームは取得した画像が極端に暗い場合があります。 また、カメラが起動した後に自動露出が安定するまでのフレームは上記の4フレームと合わせて、 屋内で14フレーム、屋外で30フレーム程度となります。 @param[in] select 起動するカメラを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result Activate( CameraSelect select ) { return detail::Activate(select); } /*! @brief カメラ設定のコンテキストを切り替えます。 @param[in] select コンテキストを切り替えるカメラを指定します。 @param[in] next 切り替え先のコンテキストを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SwitchContext( CameraSelect select, Context next ) { return detail::SwitchContext(select, next); } /*! @brief 露光を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] exposure 露出量を指定します。指定可能な値の範囲は [-5, +5] です。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetExposure( CameraSelect select, s8 exposure ) { return detail::SetExposure(select, exposure); } /*! @brief ホワイトバランスを設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] wb ホワイトバランスを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetWhiteBalance( CameraSelect select, WhiteBalance wb ) { return detail::SetWhiteBalance(select, wb); } /*! @brief 鮮明度を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] sharpness 鮮明度を指定します。指定可能な値の範囲は [-4, +5] です。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetSharpness( CameraSelect select, s8 sharpness ) { return detail::SetSharpness(select, sharpness); } /*! @brief 自動露出機能の有効・無効を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] on 有効にするならば true, そうでないなら false を指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetAutoExposure( CameraSelect select, bool on ) { return detail::SetAutoExposure(select, on); } /*! @brief 自動露出機能が有効になっているかチェックします。 @param[out] pOn 有効になっていれば true, そうでなければ false が返されます。 @param[in] select 設定を確認するカメラを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result IsAutoExposure( bool* pOn, CameraSelect select ) { return detail::IsAutoExposure(pOn, select); } /*! @brief ホワイトバランスの自動調整機能の有効・無効を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] on 有効にするならば true, そうでないなら false を指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetAutoWhiteBalance( CameraSelect select, bool on ) { return detail::SetAutoWhiteBalance(select, on); } /*! @brief ホワイトバランスの自動調整機能が有効になっているかチェックします。 @param[out] pOn 有効になっていれば true, そうでなければ false が返されます。 @param[in] select 設定を確認するカメラを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result IsAutoWhiteBalance( bool* pOn, CameraSelect select ) { return detail::IsAutoWhiteBalance(pOn, select); } /*! @brief 画像への反転処理を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] flip 反転処理を指定します。 @param[in] context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result FlipImage( CameraSelect select, Flip flip, Context context = CONTEXT_BOTH ) { return detail::FlipImage(select, flip, context); } /*! @brief 解像度をピクセル単位で設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] width 画像の横幅を指定します。 @param[in] height 画像の横幅を指定します。 @param[in] cropX0 640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の左上端点の横方向座標を指定します。 画像の出力サイズにかかわらず [0, 639] の範囲で指定してください。 クロップ領域の幅が出力画像の幅以上となるように指定してください。 省略すると 0 が設定されます。 @param[in] cropY0 640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の左上端点の縦方向座標を指定します。 画像の出力サイズにかかわらず [0, 479] の範囲で指定してください。 クロップ領域の高さが出力画像の高さ以上となるように指定してください。 省略すると 0 が設定されます。 @param[in] cropX1 640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の右下端点の横方向座標を指定します。 画像の出力サイズにかかわらず [0, 639] の範囲で指定してください。 クロップ領域の幅が出力画像の幅以上となるように指定してください。 省略すると 639 が設定されます。 @param[in] cropY1 640×480の元画像の一部をカメラモジュール内部でクロップする場合のクロップ領域の右下端点の縦方向座標を指定します。 画像の出力サイズにかかわらず [0, 479] の範囲で指定してください。 クロップ領域の高さが出力画像の高さ以上となるように指定してください。 省略すると 479 が設定されます。 @param[in] context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ 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 ) { return detail::SetDetailSize(select, width, height, cropX0, cropY0, cropX1, cropY1, context); } /*! @brief 解像度を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] size 解像度を指定します。 @param[in] context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetSize( CameraSelect select, Size size, Context context = CONTEXT_BOTH ) { return detail::SetSize(select, size, context); } /*! @brief フレームレートを設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] rate フレームレートを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetFrameRate( CameraSelect select, FrameRate rate ) { return detail::SetFrameRate(select, rate); } /*! @brief 撮影モードを設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] mode 撮影モードを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetPhotoMode( CameraSelect select, PhotoMode mode ) { return detail::SetPhotoMode(select, mode); } /*! @brief 画像へのエフェクトを設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] effect エフェクトを指定します。 @param[in] context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetEffect( CameraSelect select, Effect effect, Context context = CONTEXT_BOTH ) { return detail::SetEffect(select, effect, context); } /*! @brief 画像のコントラスト(ガンマカーブ)を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] contrast コントラスト(ガンマカーブ)を指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetContrast( CameraSelect select, Contrast contrast ) { return detail::SetContrast(select, contrast); } /*! @brief レンズ補正の程度を設定します。 ここでのレンズ補正とは、光量の差によって画像の中心と周辺の明るさに差が出てしまう現象(周辺光量低下)の対策として、 画像の周辺の明るさを補正し、中心の明るさに近づける処理のことを指します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] correction レンズ補正の程度を指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetLensCorrection( CameraSelect select, LensCorrection correction ) { return detail::SetLensCorrection(select, correction); } /*! @brief 画像の出力形式を設定します。 :private @param[in] select 設定を変更するカメラを指定します。 @param[in] format 出力形式を指定します。画像形式によって画質が異なりますのでご注意ください。 @param[in] context 設定を変更するコンテキストを指定します。省略するとコンテキストAとBの両方に設定が反映されます。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetOutputFormat( CameraSelect select, OutputFormat format, Context context = CONTEXT_BOTH ) { return detail::SetOutputFormat(select, format, context); } /*! @brief 自動露出の計算の基準となる領域(反応枠)を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] startX 領域の左上端点の横方向座標を指定します。画像の左上端点の横方向座標を0として[0, 600]の間で40ピクセル単位で指定できます。 @param[in] startY 領域の左上端点の縦方向座標を指定します。画像の左上端点の縦方向座標を0として[0, 450]の間で30ピクセル単位で指定できます。 @param[in] width 領域の横幅を指定します。[40, 640]の間で40ピクセル単位で指定できます。また、startXとの和が640以下である必要があります。 @param[in] height 領域の高さを指定します。[30, 480]の間で30ピクセル単位で指定できます。また、startYとの和が480以下である必要があります。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetAutoExposureWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height ) { return detail::SetAutoExposureWindow( select, startX, startY, width, height ); } /*! @brief オートホワイトバランスの計算の基準となる領域(反応枠)を設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] startX 領域の左上端点の横方向座標を指定します。画像の左上端点の横方向座標を0として[0, 600]の間で40ピクセル単位で指定できます。 @param[in] startY 領域の左上端点の縦方向座標を指定します。画像の左上端点の縦方向座標を0として[0, 450]の間で30ピクセル単位で指定できます。 @param[in] width 領域の横幅を指定します。[40, 640]の間で40ピクセル単位で指定できます。また、startXとの和が640以下である必要があります。 @param[in] height 領域の高さを指定します。[30, 480]の間で30ピクセル単位で指定できます。また、startYとの和が480以下である必要があります。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetAutoWhiteBalanceWindow( CameraSelect select, s16 startX, s16 startY, s16 width, s16 height ) { return detail::SetAutoWhiteBalanceWindow( select, startX, startY, width, height ); } /*! @brief ノイズフィルタを設定します。 @param[in] select 設定を変更するカメラを指定します。 @param[in] on ノイズフィルタを有効にする場合には true を指定し、無効にする場合には false を指定してください。デフォルトではノイズフィルタは有効です。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetNoiseFilter( CameraSelect select, bool on ) { return detail::SetNoiseFilter( select, on ); } /*! @brief カメラVSYNC信号のタイミングを同期させます。ただし、タイミングのズレが完全に0になるわけではありません。 (注意)
指定した2つのカメラ画像の明るさが異なる場合、 関数実行直後の3フレームは取得した画像が極端に明るい場合があります。 また、この場合、自動露出が安定するまでに最大で12フレームかかることがあります。 @param[in] select1 同期の対象となるカメラを指定します。 @param[in] select2 同期の対象となるカメラを指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SynchronizeVsyncTiming( CameraSelect select1, CameraSelect select2 ) { return detail::SynchronizeVsyncTiming( select1, select2 ); } /*! @brief カメラVsync信号が入力されたタイミングの履歴を取得します。 内部的には、カメラ割り込みのハンドラ内で Tick 値を取得しています。 @param[out] pTime タイミングの格納先を指定します。 @param[in] port タイミングを取得したいカメラが接続されているポートを指定します。 @param[in] past タイミングの履歴の数を指定します。 1 から 5 の間の整数を指定することができます。省略した場合、1 となります。 pTime には直前のタイミングを先頭として過去にさかのぼって値が格納されます。 そのため、pTime には past の分だけ領域が確保されている必要があります。 ただし、カメラが起動してから入力された Vsync 信号の数(便宜上 frame とよびます)が past よりも小さい場合、 pTime[frame] から pTime[past-1] までには不定値が格納されます。 @return なし。 */ inline void GetLatestVsyncTiming( nn::fnd::TimeSpan *pTime, Port port, size_t past = 1) { detail::GetLatestVsyncTiming( pTime, port, past ); } /*! @brief ステレオカメラの位置キャリブレーションデータを取得します。 @param[out] pDst キャリブレーションデータの格納先を指定します。 @return なし。 */ inline void GetStereoCameraCalibrationData( StereoCameraCalibrationData * pDst ) { detail::GetStereoCameraCalibrationData( pDst ); } /*! @brief ステレオカメラのキャリブレーションデータ測定時の測定チャート上での視差を計算します。 @param[in] cal キャリブレーションデータを指定します。 @return 測定チャート上での視差を返します。 返り値は右カメラ画像を基準とした場合の左カメラ画像の移動量として表現されます。 単位はピクセルです。 */ inline f32 GetParallaxOnChart( const StereoCameraCalibrationData & cal ) { return detail::GetParallaxOnChart( cal ); } /*! @brief 3D空間上で左カメラ画像を右カメラ画像に合わせるための補正行列を計算します。 @param[out] pDst 補正行列の格納先を指定します。 @param[in] cal キャリブレーションデータを指定します。 @param[in] translationByPixel 3D空間上でのカメラ画像を 1 ピクセル分だけ並進移動させるために必要な移動量を指定します。 @param[in] isIncludeParallax 水平方向の移動量に測定チャート上での視差を含めるかどうかを指定します。 @return なし。 */ inline void GetStereoCameraCalibrationMatrix( nn::math::MTX34 * pDst, const StereoCameraCalibrationData & cal, const f32 translationByPixel, const bool isIncludeParallax = true ) { detail::GetStereoCameraCalibrationMatrix( pDst, cal, translationByPixel, isIncludeParallax ); } /*! @brief コンテキスト指定のないカメラの設定を一括して設定します。 @param[in] param 設定するパラメータです。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetPackageParameterWithoutContext(const PackageParameterCameraSelect& param) { return detail::SetPackageParameterWithoutContext( param ); } /*! :overload nodetail @brief コンテキスト指定のあるカメラの設定を一括して設定します。 解像度を列挙体で設定する際に使用します。 @param[in] param 設定するパラメータです。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetPackageParameterWithContext(const PackageParameterContext& param) { return detail::SetPackageParameterWithContext( param ); } /*! :overload nodetail @brief コンテキスト指定のあるカメラの設定を一括して設定します。 解像度をピクセル単位で設定する際に使用します。 @param[in] param 設定するパラメータです。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result SetPackageParameterWithContext(const PackageParameterContextDetail& param) { return detail::SetPackageParameterWithContext( param ); } /*! @brief カメラの出力データに適した Y2R の変換係数を取得します。 @param[out] no カメラから取得した YUV データを RGB に変換する際に適した標準的な変換係数のタイプです。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping 蓋閉じ中であるため本関数は使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result GetSuitableY2rStandardCoefficient(nn::y2r::CTR::StandardCoefficient* no) { return detail::GetSuitableY2rStandardCoefficient( no ); } /*! @brief シャッター音の再生とカメラLEDの一時消灯を行います。 @param[in] type 再生するシャッター音の種類を指定します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultSuccess 処理に成功しました。 @retval ResultIsSleeping スリープ中であるため使用できません。 @retval ResultFatalError カメラが物理的に故障している可能性があります。 */ inline nn::Result PlayShutterSound( ShutterSoundType type ) { return detail::PlayShutterSound( type ); } // 他のアプレットに遷移することをカメラプロセスに通知する関数(内部用) inline nn::Result LeaveApplication() { return detail::LeaveApplication(); } inline nn::Result ArriveApplication() { return detail::ArriveApplication(); } } } } #endif // ifndef NN_CAMERA_CTR_CAMERA_API_H_