/*---------------------------------------------------------------------------* Project: Horizon File: y2r_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: 22311 $ *---------------------------------------------------------------------------*/ #ifndef NN_Y2R_CTR_Y2R_API_H_ #define NN_Y2R_CTR_Y2R_API_H_ /*! @file @brief Y2R ( YUV to RGB ) に関する API の宣言 */ #include #include #include namespace nn { namespace y2r { namespace CTR { namespace detail { bool InitializeBase(Handle* pSession, const char* name); bool PingProcess(); void FinalizeBase(Handle* pSession); void SetInputFormat( InputFormat format ); InputFormat GetInputFormat( void ); void SetOutputFormat( OutputFormat format ); OutputFormat GetOutputFormat( void ); void SetRotation( Rotation rotation ); Rotation GetRotation( void ); void SetBlockAlignment( BlockAlignment align ); BlockAlignment GetBlockAlignment( void ); void SetSpacialDithering( bool enable ); bool GetSpacialDithering( void ); void SetTemporalDithering( bool enable ); bool GetTemporalDithering( void ); void SetTransferEndInterrupt( bool enable ); bool GetTransferEndInterrupt( void ); void GetTransferEndEvent( nn::os::Event* pEvent ); void SetSendingY( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); void SetSendingU( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); void SetSendingV( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); void SetSendingYuv( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); bool IsFinishedSendingYuv( void ); bool IsFinishedSendingY( void ); bool IsFinishedSendingU( void ); bool IsFinishedSendingV( void ); void SetReceiving( u32 pDst, size_t imageSize, s16 transferUnit, s16 transferStride ); bool IsFinishedReceiving( void ); void SetInputLineWidth( s16 width ); s16 GetInputLineWidth( void ); void SetInputLines( s16 lines ); s16 GetInputLines( void ); size_t GetOutputFormatBytes( OutputFormat format ); size_t GetOutputBlockSize( s16 lineWidth, OutputFormat format ); size_t GetOutputImageSize( s16 lineWidth, s16 height, OutputFormat format ); void SetCoefficientParams( CoefficientParams src ); void GetCoefficientParams( CoefficientParams* pDst ); void SetStandardCoefficient( StandardCoefficient no ); void GetStandardCoefficientParams( CoefficientParams* pDst, StandardCoefficient no ); void SetAlpha( s16 alpha ); s16 GetAlpha( void ); void SetDitheringWeightParams( const DitheringWeightParams & w ); void GetDitheringWeightParams( DitheringWeightParams* pW ); nn::Result StartConversion( void ); void StopConversion( void ); bool IsBusyConversion( void ); // パラメータ一括設定ユーティリティ関数 void SetPackageParameter(const PackageParameter& param); } namespace { const char PORT_NAME_USER[] = "y2r:u"; const u16 OUTPUT_BUF_SIZE = 24*1024; // 出力バッファサイズ const u8 OUTPUT_LINES_NUM = 8; // 出力バッファにためておける最大ライン数 } /*! @brief Y2R ライブラリの初期化を行います。 @return 成功ならば true, 他のプロセスが使用中のため、失敗した場合は false が返ります。 アプリが呼び出す際に false が返ることはありません。 */ bool Initialize(); inline bool Initialize() { return detail::InitializeBase(&detail::Y2r::s_Session, PORT_NAME_USER); } /*! @brief Y2R ライブラリを終了します。 @return なし。 */ void Finalize(); inline void Finalize() { detail::FinalizeBase(&detail::Y2r::s_Session); } /*! @brief 入力形式を設定します。 @param[in] format 入力形式を指定します。 @return なし。 */ inline void SetInputFormat( InputFormat format ) { detail::SetInputFormat(format); } /*! @brief 入力形式を取得します。 @return 設定されている入力形式が返ります。 */ inline InputFormat GetInputFormat( void ) { return detail::GetInputFormat(); } /*! @brief 出力形式を設定します。 @param[in] format 出力形式を指定します。 @return なし。 */ inline void SetOutputFormat( OutputFormat format ) { detail::SetOutputFormat(format); } /*! @brief 出力形式を取得します。 @return 設定されている出力形式が返ります。 */ inline OutputFormat GetOutputFormat( void ) { return detail::GetOutputFormat(); } /*! @brief 出力バッファの回転角度を設定します。 @param[in] rotation 角度を指定します。 @return なし。 */ inline void SetRotation( Rotation rotation ) { detail::SetRotation(rotation); } /*! @brief 出力バッファの回転角度を取得します。 @return 設定されている角度が返ります。 */ inline Rotation GetRotation( void ) { return detail::GetRotation(); } /*! @brief 出力バッファのデータの並び方を設定します。 @param[in] align データの並び方を指定します。 @return なし。 */ inline void SetBlockAlignment( BlockAlignment align ) { detail::SetBlockAlignment(align); } /*! @brief 出力バッファのデータの並び方を取得します。 @return 設定されているデータの並び方が返ります。 */ inline BlockAlignment GetBlockAlignment( void ) { return detail::GetBlockAlignment(); } /*! @brief 出力画像への空間的ディザリングを有効にするか設定します。 @param[in] enable 有効にするならば true, そうでないなら false を指定します。 @return なし。 */ inline void SetSpacialDithering( bool enable ) { detail::SetSpacialDithering(enable); } /*! @brief 出力画像への空間的ディザリングが有効になっているかチェックします。 @return 有効になっていれば true, そうでなければ false を返します。 */ inline bool GetSpacialDithering( void ) { return detail::GetSpacialDithering(); } /*! @brief 出力画像への時間的ディザリングを有効にするか設定します。 初期値は false です。 @param[in] enable 有効にするならば true, そうでないなら false を指定します。 @return なし。 */ inline void SetTemporalDithering( bool enable ) { detail::SetTemporalDithering(enable); } /*! @brief 出力画像への時間的ディザリングが有効になっているかチェックします。 初期値は false です。 @return 有効になっていれば true, そうでなければ false を返します。 */ inline bool GetTemporalDithering( void ) { return detail::GetTemporalDithering(); } /*! @brief データ転送終了割り込みを許可するか設定します。 初期値は true です。 @param[in] enable 許可するならば true, そうでないなら false を指定します。 @return なし。 */ inline void SetTransferEndInterrupt( bool enable ) { detail::SetTransferEndInterrupt(enable); } /*! @brief データ転送終了割り込みを許可しているかチェックします。 @return 許可されていれば true, そうでなければ false を返します。 */ inline bool GetTransferEndInterrupt( void ) { return detail::GetTransferEndInterrupt(); } /*! @brief データ転送終了割り込みの発生を検知するためのイベントを取得します。 @param[out] pEvent データ転送終了時に起こされるイベントです。 @return なし。 */ inline void GetTransferEndEvent( nn::os::Event* pEvent ) { detail::GetTransferEndEvent(pEvent); } /*! @brief Yデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 @param[in] pSrc 転送する画像データを指定します。 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 @return なし。 */ inline void SetSendingY( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) { detail::SetSendingY(reinterpret_cast(pSrc), imageSize, transferUnit, transferStride); } /*! @brief Uデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 @param[in] pSrc 転送する画像データを指定します。 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 @return なし。 */ inline void SetSendingU( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) { detail::SetSendingU(reinterpret_cast(pSrc), imageSize, transferUnit, transferStride); } /*! @brief Vデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 @param[in] pSrc 転送する画像データを指定します。 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 @return なし。 */ inline void SetSendingV( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) { detail::SetSendingV(reinterpret_cast(pSrc), imageSize, transferUnit, transferStride); } /*! @brief YUVデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 @param[in] pSrc 転送する画像データを指定します。 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 @return なし。 */ inline void SetSendingYuv( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) { detail::SetSendingYuv(reinterpret_cast(pSrc), imageSize, transferUnit, transferStride); } /*! @brief YUVデータの書き込みが終了したかチェックします。 @return 転送が完了していれば true, 終了していなければ false が返ります。 */ inline bool IsFinishedSendingYuv( void ) { return detail::IsFinishedSendingYuv(); } /*! @brief Yデータの書き込みが終了したかチェックします。 @return 転送が完了していれば true, 終了していなければ false が返ります。 */ inline bool IsFinishedSendingY( void ) { return detail::IsFinishedSendingY(); } /*! @brief Uデータの書き込みが終了したかチェックします。 @return 転送が完了していれば true, 終了していなければ false が返ります。 */ inline bool IsFinishedSendingU( void ) { return detail::IsFinishedSendingU(); } /*! @brief Vデータの書き込みが終了したかチェックします。 @return 転送が完了していれば true, 終了していなければ false が返ります。 */ inline bool IsFinishedSendingV( void ) { return detail::IsFinishedSendingV(); } /*! @brief RGBデータを読み込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 @param[in] pDst 画像データが転送されます。 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 @param[in] transferUnit 1回の転送サイズを指定します。パフォーマンスを上げるために、8 ライン分のサイズを指定することを推奨します。 @param[in] transferStride 1回の転送毎に転送先アドレスに transferUnit とは別に加算されるオフセット値を指定します。 1ライン毎にオフセットを加えたい場合は、transferUnit に 1 ライン分のサイズを指定する必要があります。 @return なし。 */ inline void SetReceiving( void* pDst, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) { detail::SetReceiving(reinterpret_cast(pDst), imageSize, transferUnit, transferStride); } /*! @brief 読み込みが終了したかチェックします。 @return 転送が終了していれば true, 終了していなければ false が返ります。 */ inline bool IsFinishedReceiving( void ) { return detail::IsFinishedReceiving(); } /*! @brief 入力データの 1 ラインの幅を設定します。 1024 以下の 8 の倍数にする必要があります。 @param[in] width ドット数を指定します。 @return なし。 */ inline void SetInputLineWidth( s16 width ) { detail::SetInputLineWidth(width); } /*! @brief 入力データの 1 ラインの幅を取得します。 @return 設定されているドット数が返ります。 */ inline s16 GetInputLineWidth( void ) { return detail::GetInputLineWidth(); } /*! @brief 入力データの縦のライン数を設定します。 @param[in] lines ライン数を指定します。 @return なし。 */ inline void SetInputLines( s16 lines ) { detail::SetInputLines(lines); } /*! @brief 入力データの縦のライン数を取得します。 @return 設定されているライン数が返ります。 */ inline s16 GetInputLines( void ) { return detail::GetInputLines(); } /*! @brief 指定した出力形式の 1 画素あたりのバイト数を計算します。 @param[in] format 出力形式を指定します。 @return バイト数を返します。 */ inline size_t GetOutputFormatBytes( OutputFormat format ) { return detail::GetOutputFormatBytes(format); } /*! @brief 出力ブロックサイズを計算します。 @param[in] lineWidth 1 ラインの幅を指定します。 @param[in] format 出力形式を指定します。 @return ブロックサイズのバイト数が返ります。 */ inline size_t GetOutputBlockSize( s16 lineWidth, OutputFormat format ) { return detail::GetOutputBlockSize(lineWidth, format); } /*! @brief 出力画像のサイズを計算します。 @param[in] lineWidth 1 ラインの幅を指定します。 @param[in] height 縦のライン数を指定します。 @param[in] format 出力形式を指定します。 @return 出力画像のサイズが返ります。 */ inline size_t GetOutputImageSize( s16 lineWidth, s16 height, OutputFormat format ) { return detail::GetOutputImageSize(lineWidth, height, format); } /*! @brief 変換係数を設定します。 :private @param[in] src 変換係数を指定します。 @return なし。 */ inline void SetCoefficientParams( CoefficientParams src ) { detail::SetCoefficientParams(src); } /*! @brief 変換係数を取得します。 :private @param[out] pDst 設定されている変換係数が返ります。 @return なし。 */ inline void GetCoefficientParams( CoefficientParams* pDst ) { detail::GetCoefficientParams(pDst); } /*! @brief 標準的な変換係数を設定します。 @param[in] no 標準的な変換係数のタイプを指定します。 @return なし。 */ inline void SetStandardCoefficient( StandardCoefficient no ) { detail::SetStandardCoefficient(no); } /*! @brief 標準的な変換係数を取得します。 :private @param[out] pDst 標準的な変換係数が返ります。 @param[in] no 標準的な変換係数のタイプを指定します。 @return なし。 */ inline void GetStandardCoefficientParams( CoefficientParams* pDst, StandardCoefficient no ) { detail::GetStandardCoefficientParams(pDst, no); } /*! @brief 出力フォーマットが RGB32bit 及び RGB555 の場合のアルファ値を設定します。 @param[in] alpha アルファ値を指定します。 @return なし。 */ inline void SetAlpha( s16 alpha ) { detail::SetAlpha(alpha); } /*! @brief 出力フォーマットが RGB32bit 及び RGB555 の場合のアルファ値を取得します。 @return 設定されているアルファ値が返ります。 */ inline s16 GetAlpha( void ) { return detail::GetAlpha(); } /*! @brief ディザリングパターンを設定します。 @param[in] w ディザリングの重みを指定します。 @return なし。 */ inline void SetDitheringWeightParams( const DitheringWeightParams & w ) { detail::SetDitheringWeightParams(w); } /*! @brief ディザリングパターンを取得します。 @param[out] pW 設定されているディザリングの重みが返ります。 @return なし。 */ inline void GetDitheringWeightParams( DitheringWeightParams* pW ) { detail::GetDitheringWeightParams(pW); } /*! @brief 変換を開始します。 @return 処理の結果が返ってきます。
LEVEL_SUCCESS:SUMMARY_SUCCESS:MODULE_COMMON:DESCRIPTION_SUCCESS ・・・ 成功しました。
LEVEL_STATUS:SUMMARY_STATUS_CHANGED:MODULE_NN_CAMERA:DESCRIPTION_Y2R_IS_SLEEPING ・・・スリープ中であるため使用できません。
*/ inline nn::Result StartConversion( void ) { return detail::StartConversion(); } /*! @brief 変換を強制終了します。 @return なし。 */ inline void StopConversion( void ) { detail::StopConversion(); } /*! @brief 変換中であるかチェックします。 @return 変換中であれば true, そうでなければ false を返します。 */ inline bool IsBusyConversion( void ) { return detail::IsBusyConversion(); } /*! @brief Y2R の設定を一括して設定します。 @param[in] param 設定するパラメータです。 @return なし。 */ inline void SetPackageParameter(const PackageParameter& param) { return detail::SetPackageParameter( param ); } } } } #endif // ifndef NN_Y2R_CTR_Y2R_API_H_