1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: y2r_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: 33680 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_Y2R_CTR_Y2R_API_H_ 17 #define NN_Y2R_CTR_Y2R_API_H_ 18 19 /*! @file 20 @brief Y2R ( YUV to RGB ) に関する API の宣言 21 */ 22 23 #include <nn/os.h> 24 #include <nn/y2r/CTR/y2r_Types.h> 25 26 #include <nn/y2r/CTR/y2r_Y2r.h> 27 28 namespace nn { 29 namespace y2r { 30 namespace CTR { 31 32 namespace detail 33 { 34 bool InitializeBase(Handle* pSession, const char* name); 35 bool PingProcess(u8* connectedNumber); 36 void FinalizeBase(Handle* pSession); 37 void SetInputFormat( InputFormat format ); 38 InputFormat GetInputFormat( void ); 39 void SetOutputFormat( OutputFormat format ); 40 OutputFormat GetOutputFormat( void ); 41 void SetRotation( Rotation rotation ); 42 Rotation GetRotation( void ); 43 void SetBlockAlignment( BlockAlignment align ); 44 BlockAlignment GetBlockAlignment( void ); 45 void SetSpacialDithering( bool enable ); 46 bool GetSpacialDithering( void ); 47 void SetTemporalDithering( bool enable ); 48 bool GetTemporalDithering( void ); 49 void SetTransferEndInterrupt( bool enable ); 50 bool GetTransferEndInterrupt( void ); 51 void GetTransferEndEvent( nn::os::Event* pEvent ); 52 void SetSendingY( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); 53 void SetSendingU( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); 54 void SetSendingV( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); 55 void SetSendingYuv( u32 pSrc, size_t imageSize, s16 transferUnit, s16 transferStride ); 56 bool IsFinishedSendingYuv( void ); 57 bool IsFinishedSendingY( void ); 58 bool IsFinishedSendingU( void ); 59 bool IsFinishedSendingV( void ); 60 void SetReceiving( u32 pDst, size_t imageSize, s16 transferUnit, s16 transferStride ); 61 bool IsFinishedReceiving( void ); 62 void SetInputLineWidth( s16 width ); 63 s16 GetInputLineWidth( void ); 64 void SetInputLines( s16 lines ); 65 s16 GetInputLines( void ); 66 size_t GetOutputFormatBytes( OutputFormat format ); 67 size_t GetOutputBlockSize( s16 lineWidth, OutputFormat format ); 68 size_t GetOutputImageSize( s16 lineWidth, s16 height, OutputFormat format ); 69 void SetCoefficientParams( CoefficientParams src ); 70 void GetCoefficientParams( CoefficientParams* pDst ); 71 void SetStandardCoefficient( StandardCoefficient no ); 72 void GetStandardCoefficientParams( CoefficientParams* pDst, StandardCoefficient no ); 73 void SetAlpha( s16 alpha ); 74 s16 GetAlpha( void ); 75 void SetDitheringWeightParams( const DitheringWeightParams & w ); 76 void GetDitheringWeightParams( DitheringWeightParams* pW ); 77 nn::Result StartConversion( void ); 78 void StopConversion( void ); 79 bool IsBusyConversion( void ); 80 81 // パラメータ一括設定ユーティリティ関数 82 void SetPackageParameter(const PackageParameter& param); 83 } 84 85 namespace 86 { 87 const char PORT_NAME_USER[] = "y2r:u"; 88 const u16 OUTPUT_BUF_SIZE = 24*1024; // 出力バッファサイズ 89 const u8 OUTPUT_LINES_NUM = 8; // 出力バッファにためておける最大ライン数 90 } 91 92 /*! 93 @brief Y2R ライブラリの初期化を行います。 94 95 @return 成功ならば true, 他のプロセスが使用中のため、失敗した場合は false が返ります。 96 */ 97 bool Initialize(); 98 Initialize()99 inline bool Initialize() { return detail::InitializeBase(&detail::Y2r::s_Session, PORT_NAME_USER); } 100 101 /*! 102 @brief Y2R ライブラリを終了します。 103 104 @return なし。 105 */ 106 void Finalize(); 107 Finalize()108 inline void Finalize() { detail::FinalizeBase(&detail::Y2r::s_Session); } 109 110 /*! 111 @brief 入力形式を設定します。 112 113 @param[in] format 入力形式を指定します。 114 @return なし。 115 */ SetInputFormat(InputFormat format)116 inline void SetInputFormat( InputFormat format ) 117 { 118 detail::SetInputFormat(format); 119 } 120 /*! 121 @brief 入力形式を取得します。 122 123 @return 設定されている入力形式が返ります。 124 */ GetInputFormat(void)125 inline InputFormat GetInputFormat( void ) 126 { 127 return detail::GetInputFormat(); 128 } 129 /*! 130 @brief 出力形式を設定します。 131 132 @param[in] format 出力形式を指定します。 133 @return なし。 134 */ SetOutputFormat(OutputFormat format)135 inline void SetOutputFormat( OutputFormat format ) 136 { 137 detail::SetOutputFormat(format); 138 } 139 /*! 140 @brief 出力形式を取得します。 141 142 @return 設定されている出力形式が返ります。 143 */ GetOutputFormat(void)144 inline OutputFormat GetOutputFormat( void ) 145 { 146 return detail::GetOutputFormat(); 147 } 148 /*! 149 @brief 出力バッファの回転角度を設定します。 150 151 @param[in] rotation 角度を指定します。 152 @return なし。 153 */ SetRotation(Rotation rotation)154 inline void SetRotation( Rotation rotation ) 155 { 156 detail::SetRotation(rotation); 157 } 158 /*! 159 @brief 出力バッファの回転角度を取得します。 160 161 @return 設定されている角度が返ります。 162 */ GetRotation(void)163 inline Rotation GetRotation( void ) 164 { 165 return detail::GetRotation(); 166 } 167 /*! 168 @brief 出力バッファのデータの並び方を設定します。 169 170 @param[in] align データの並び方を指定します。 171 @return なし。 172 */ SetBlockAlignment(BlockAlignment align)173 inline void SetBlockAlignment( BlockAlignment align ) 174 { 175 detail::SetBlockAlignment(align); 176 } 177 /*! 178 @brief 出力バッファのデータの並び方を取得します。 179 180 @return 設定されているデータの並び方が返ります。 181 */ GetBlockAlignment(void)182 inline BlockAlignment GetBlockAlignment( void ) 183 { 184 return detail::GetBlockAlignment(); 185 } 186 /*! 187 @brief 出力画像への空間的ディザリングを有効にするか設定します。 188 189 @param[in] enable 有効にするならば true, そうでないなら false を指定します。 190 @return なし。 191 */ SetSpacialDithering(bool enable)192 inline void SetSpacialDithering( bool enable ) 193 { 194 detail::SetSpacialDithering(enable); 195 } 196 /*! 197 @brief 出力画像への空間的ディザリングが有効になっているかチェックします。 198 199 @return 有効になっていれば true, そうでなければ false を返します。 200 */ GetSpacialDithering(void)201 inline bool GetSpacialDithering( void ) 202 { 203 return detail::GetSpacialDithering(); 204 } 205 /*! 206 @brief 出力画像への時間的ディザリングを有効にするか設定します。 207 初期値は false です。 208 209 @param[in] enable 有効にするならば true, そうでないなら false を指定します。 210 @return なし。 211 */ SetTemporalDithering(bool enable)212 inline void SetTemporalDithering( bool enable ) 213 { 214 detail::SetTemporalDithering(enable); 215 } 216 /*! 217 @brief 出力画像への時間的ディザリングが有効になっているかチェックします。 218 初期値は false です。 219 220 @return 有効になっていれば true, そうでなければ false を返します。 221 */ GetTemporalDithering(void)222 inline bool GetTemporalDithering( void ) 223 { 224 return detail::GetTemporalDithering(); 225 } 226 /*! 227 @brief データ転送終了割り込みを許可するか設定します。 228 初期値は true です。 229 230 @param[in] enable 許可するならば true, そうでないなら false を指定します。 231 @return なし。 232 */ SetTransferEndInterrupt(bool enable)233 inline void SetTransferEndInterrupt( bool enable ) 234 { 235 detail::SetTransferEndInterrupt(enable); 236 } 237 /*! 238 @brief データ転送終了割り込みを許可しているかチェックします。 239 240 @return 許可されていれば true, そうでなければ false を返します。 241 */ GetTransferEndInterrupt(void)242 inline bool GetTransferEndInterrupt( void ) 243 { 244 return detail::GetTransferEndInterrupt(); 245 } 246 /*! 247 @brief データ転送終了割り込みの発生を検知するためのイベントを取得します。 248 249 @param[out] pEvent データ転送終了時に起こされるイベントです。 250 @return なし。 251 */ GetTransferEndEvent(nn::os::Event * pEvent)252 inline void GetTransferEndEvent( nn::os::Event* pEvent ) 253 { 254 detail::GetTransferEndEvent(pEvent); 255 } 256 /*! 257 @brief Yデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 258 259 @param[in] pSrc 転送する画像データを指定します。 260 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 261 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 262 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 263 264 @return なし。 265 */ 266 inline void SetSendingY( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) 267 { 268 detail::SetSendingY(reinterpret_cast<u32>(pSrc), imageSize, transferUnit, transferStride); 269 } 270 /*! 271 @brief Uデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 272 273 @param[in] pSrc 転送する画像データを指定します。 274 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 275 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 276 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 277 @return なし。 278 */ 279 inline void SetSendingU( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) 280 { 281 detail::SetSendingU(reinterpret_cast<u32>(pSrc), imageSize, transferUnit, transferStride); 282 } 283 /*! 284 @brief Vデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 285 286 @param[in] pSrc 転送する画像データを指定します。 287 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 288 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 289 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 290 @return なし。 291 */ 292 inline void SetSendingV( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) 293 { 294 detail::SetSendingV(reinterpret_cast<u32>(pSrc), imageSize, transferUnit, transferStride); 295 } 296 /*! 297 @brief YUVデータを書き込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 298 299 @param[in] pSrc 転送する画像データを指定します。 300 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 301 @param[in] transferUnit 1回の転送サイズ(1ライン)を指定します。 302 @param[in] transferStride 1回の転送毎に転送元アドレスに transferUnit とは別に加算されるオフセット値を指定します。 303 @return なし。 304 */ 305 inline void SetSendingYuv( const void* pSrc, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) 306 { 307 detail::SetSendingYuv(reinterpret_cast<u32>(pSrc), imageSize, transferUnit, transferStride); 308 } 309 /*! 310 @brief YUVデータの書き込みが終了したかチェックします。 311 312 @return 転送が完了していれば true, 終了していなければ false が返ります。 313 */ IsFinishedSendingYuv(void)314 inline bool IsFinishedSendingYuv( void ) 315 { 316 return detail::IsFinishedSendingYuv(); 317 } 318 /*! 319 @brief Yデータの書き込みが終了したかチェックします。 320 321 @return 転送が完了していれば true, 終了していなければ false が返ります。 322 */ IsFinishedSendingY(void)323 inline bool IsFinishedSendingY( void ) 324 { 325 return detail::IsFinishedSendingY(); 326 } 327 /*! 328 @brief Uデータの書き込みが終了したかチェックします。 329 330 @return 転送が完了していれば true, 終了していなければ false が返ります。 331 */ IsFinishedSendingU(void)332 inline bool IsFinishedSendingU( void ) 333 { 334 return detail::IsFinishedSendingU(); 335 } 336 /*! 337 @brief Vデータの書き込みが終了したかチェックします。 338 339 @return 転送が完了していれば true, 終了していなければ false が返ります。 340 */ IsFinishedSendingV(void)341 inline bool IsFinishedSendingV( void ) 342 { 343 return detail::IsFinishedSendingV(); 344 } 345 /*! 346 @brief RGBデータを読み込む設定をします。実際の転送処理は StartConversion を呼び出した後に行われます。 347 348 @param[in] pDst 画像データが転送されます。 349 @param[in] imageSize 転送する合計サイズを指定します。transferUnit の整数倍の必要があります。 350 @param[in] transferUnit 1回の転送サイズを指定します。パフォーマンスを上げるために、8 ライン分のサイズを指定することを推奨します。 351 @param[in] transferStride 1回の転送毎に転送先アドレスに transferUnit とは別に加算されるオフセット値を指定します。 352 1ライン毎にオフセットを加えたい場合は、transferUnit に 1 ライン分のサイズを指定する必要があります。 353 @return なし。 354 */ 355 inline void SetReceiving( void* pDst, size_t imageSize, s16 transferUnit, s16 transferStride = 0 ) 356 { 357 detail::SetReceiving(reinterpret_cast<u32>(pDst), imageSize, transferUnit, transferStride); 358 } 359 /*! 360 @brief 読み込みが終了したかチェックします。 361 362 @return 転送が終了していれば true, 終了していなければ false が返ります。 363 */ IsFinishedReceiving(void)364 inline bool IsFinishedReceiving( void ) 365 { 366 return detail::IsFinishedReceiving(); 367 } 368 /*! 369 @brief 入力データの 1 ラインの幅を設定します。 370 371 1024 以下の 8 の倍数にする必要があります。 372 373 @param[in] width ドット数を指定します。 374 @return なし。 375 */ SetInputLineWidth(s16 width)376 inline void SetInputLineWidth( s16 width ) 377 { 378 detail::SetInputLineWidth(width); 379 } 380 /*! 381 @brief 入力データの 1 ラインの幅を取得します。 382 383 @return 設定されているドット数が返ります。 384 */ GetInputLineWidth(void)385 inline s16 GetInputLineWidth( void ) 386 { 387 return detail::GetInputLineWidth(); 388 } 389 /*! 390 @brief 入力データの縦のライン数を設定します。 391 392 @param[in] lines ライン数を指定します。 393 @return なし。 394 */ SetInputLines(s16 lines)395 inline void SetInputLines( s16 lines ) 396 { 397 detail::SetInputLines(lines); 398 } 399 /*! 400 @brief 入力データの縦のライン数を取得します。 401 402 @return 設定されているライン数が返ります。 403 */ GetInputLines(void)404 inline s16 GetInputLines( void ) 405 { 406 return detail::GetInputLines(); 407 } 408 /*! 409 @brief 指定した出力形式の 1 画素あたりのバイト数を計算します。 410 411 @param[in] format 出力形式を指定します。 412 @return バイト数を返します。 413 */ GetOutputFormatBytes(OutputFormat format)414 inline size_t GetOutputFormatBytes( OutputFormat format ) 415 { 416 return detail::GetOutputFormatBytes(format); 417 } 418 /*! 419 @brief 出力ブロックサイズを計算します。 420 421 @param[in] lineWidth 1 ラインの幅を指定します。 422 @param[in] format 出力形式を指定します。 423 @return ブロックサイズのバイト数が返ります。 424 */ GetOutputBlockSize(s16 lineWidth,OutputFormat format)425 inline size_t GetOutputBlockSize( s16 lineWidth, OutputFormat format ) 426 { 427 return detail::GetOutputBlockSize(lineWidth, format); 428 } 429 /*! 430 @brief 出力画像のサイズを計算します。 431 432 @param[in] lineWidth 1 ラインの幅を指定します。 433 @param[in] height 縦のライン数を指定します。 434 @param[in] format 出力形式を指定します。 435 @return 出力画像のサイズが返ります。 436 */ GetOutputImageSize(s16 lineWidth,s16 height,OutputFormat format)437 inline size_t GetOutputImageSize( s16 lineWidth, s16 height, OutputFormat format ) 438 { 439 return detail::GetOutputImageSize(lineWidth, height, format); 440 } 441 /*! 442 @brief 変換係数を設定します。 443 444 :private 445 446 @param[in] src 変換係数を指定します。 447 @return なし。 448 */ SetCoefficientParams(CoefficientParams src)449 inline void SetCoefficientParams( CoefficientParams src ) 450 { 451 detail::SetCoefficientParams(src); 452 } 453 /*! 454 @brief 変換係数を取得します。 455 456 :private 457 458 @param[out] pDst 設定されている変換係数が返ります。 459 @return なし。 460 */ GetCoefficientParams(CoefficientParams * pDst)461 inline void GetCoefficientParams( CoefficientParams* pDst ) 462 { 463 detail::GetCoefficientParams(pDst); 464 } 465 /*! 466 @brief 標準的な変換係数を設定します。 467 468 @param[in] no 標準的な変換係数のタイプを指定します。 469 @return なし。 470 */ SetStandardCoefficient(StandardCoefficient no)471 inline void SetStandardCoefficient( StandardCoefficient no ) 472 { 473 detail::SetStandardCoefficient(no); 474 } 475 /*! 476 @brief 標準的な変換係数を取得します。 477 478 :private 479 480 @param[out] pDst 標準的な変換係数が返ります。 481 @param[in] no 標準的な変換係数のタイプを指定します。 482 @return なし。 483 */ GetStandardCoefficientParams(CoefficientParams * pDst,StandardCoefficient no)484 inline void GetStandardCoefficientParams( CoefficientParams* pDst, StandardCoefficient no ) 485 { 486 detail::GetStandardCoefficientParams(pDst, no); 487 } 488 /*! 489 @brief 出力フォーマットが RGB32bit 及び RGB555 の場合のアルファ値を設定します。 490 491 @param[in] alpha アルファ値を指定します。 492 @return なし。 493 */ SetAlpha(s16 alpha)494 inline void SetAlpha( s16 alpha ) 495 { 496 detail::SetAlpha(alpha); 497 } 498 /*! 499 @brief 出力フォーマットが RGB32bit 及び RGB555 の場合のアルファ値を取得します。 500 501 @return 設定されているアルファ値が返ります。 502 */ GetAlpha(void)503 inline s16 GetAlpha( void ) 504 { 505 return detail::GetAlpha(); 506 } 507 /*! 508 @brief ディザリングパターンを設定します。 509 510 @param[in] w ディザリングの重みを指定します。 511 @return なし。 512 */ SetDitheringWeightParams(const DitheringWeightParams & w)513 inline void SetDitheringWeightParams( const DitheringWeightParams & w ) 514 { 515 detail::SetDitheringWeightParams(w); 516 } 517 /*! 518 @brief ディザリングパターンを取得します。 519 520 @param[out] pW 設定されているディザリングの重みが返ります。 521 @return なし。 522 */ GetDitheringWeightParams(DitheringWeightParams * pW)523 inline void GetDitheringWeightParams( DitheringWeightParams* pW ) 524 { 525 detail::GetDitheringWeightParams(pW); 526 } 527 /*! 528 @brief 変換を開始します。 529 530 @return 関数の実行結果を返します。以下に挙げる Result を返します。 531 @retval ResultSuccess 処理に成功しました。 532 @retval ResultIsSleeping スリープ中であるため使用できません。 533 */ StartConversion(void)534 inline nn::Result StartConversion( void ) 535 { 536 return detail::StartConversion(); 537 } 538 /*! 539 @brief 変換を強制終了します。 540 541 @return なし。 542 */ StopConversion(void)543 inline void StopConversion( void ) 544 { 545 detail::StopConversion(); 546 } 547 /*! 548 @brief 変換中であるかチェックします。 549 550 @return 変換中であれば true, そうでなければ false を返します。 551 */ IsBusyConversion(void)552 inline bool IsBusyConversion( void ) 553 { 554 return detail::IsBusyConversion(); 555 } 556 557 /*! 558 @brief Y2R の設定を一括して設定します。 559 560 @param[in] param 設定するパラメータです。 561 @return なし。 562 */ SetPackageParameter(const PackageParameter & param)563 inline void SetPackageParameter(const PackageParameter& param) 564 { 565 return detail::SetPackageParameter( param ); 566 } 567 } 568 } 569 } 570 571 #endif // ifndef NN_Y2R_CTR_Y2R_API_H_ 572