1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     y2r_Types.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: 21047 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_Y2R_CTR_Y2R_Y2RTYPES_H_
17 #define NN_Y2R_CTR_Y2R_Y2RTYPES_H_
18 
19 #include <nn/Result.h>
20 
21 namespace nn {
22 namespace y2r {
23 namespace CTR {
24 
25     /*!
26       @brief    入力モードを示す列挙体です。
27     */
28     enum InputFormat
29     {
30         INPUT_YUV422_INDIV_8  = 0, //!< YUV4:2:2 個別入力モード  8bitフォーマット
31         INPUT_YUV420_INDIV_8  = 1, //!< YUV4:2:0 個別入力モード  8bitフォーマット
32         INPUT_YUV422_INDIV_16 = 2, //!< YUV4:2:2 個別入力モード 16bit padding フォーマット
33         INPUT_YUV420_INDIV_16 = 3, //!< YUV4:2:0 個別入力モード 16bit padding フォーマット
34         INPUT_YUV422_BATCH    = 4  //!< YUV4:2:2 一括入力モード
35 
36     };
37 
38     /*!
39       @brief    出力ピクセルフォーマットを示す列挙体です。
40     */
41     enum OutputFormat
42     {
43         OUTPUT_RGB_32     = 0, //!< RGB 32bit (RGB=888, Alpha=8)
44         OUTPUT_RGB_24     = 1, //!< RGB 24bit (RGB=888)
45         OUTPUT_RGB_16_555 = 2, //!< RGB 16bit (RGB=555, Alpha=1)
46         OUTPUT_RGB_16_565 = 3  //!< RGB 16bit (RGB=565)
47     };
48 
49     /*!
50       @brief    出力バッファローテーションを示す列挙体です。
51     */
52     enum Rotation
53     {
54         ROTATION_NONE          = 0, //!< 回転なし
55         ROTATION_CLOCKWISE_90  = 1, //!< 時計回りに90度
56         ROTATION_CLOCKWISE_180 = 2, //!< 180度
57         ROTATION_CLOCKWISE_270 = 3  //!< 時計回りに270度(反時計回りに90度)
58     };
59 
60     /*!
61       @brief    出力バッファ配列を示す列挙体です。
62     */
63     enum BlockAlignment
64     {
65         BLOCK_LINE   = 0, //!< 水平ラインフォーマット
66         BLOCK_8_BY_8 = 1  //!< 8x8ブロックフォーマット
67     };
68 
69     /*!
70       @brief    YUVからRGBへの変換係数を示す構造体です。
71 
72                     :private
73 
74                 計算式は以下のとおり
75                 R = Y_A * Y           + R_V * V + R_Offset
76                 G = Y_A * Y - G_U * U - G_V * V + G_Offset
77                 B = Y_A * Y + B_U * U           + B_Offset
78     */
79     struct CoefficientParams
80     {
81         u16  Y_A;
82         u16  R_V;
83         u16  G_V;
84         u16  G_U;
85         u16  B_U;
86         u16  R_Offset;
87         u16  G_Offset;
88         u16  B_Offset;
89     };
90 
91     /*!
92       @brief    標準的な変換係数を示す列挙体です。
93     */
94     enum StandardCoefficient
95     {
96         COEFFICIENT_ITU_R_BT_601 = 0,       //!< ITU-R BT.601 の変換係数。入力値の範囲は 0<=Y,U,V<=255。
97         COEFFICIENT_ITU_R_BT_709,           //!< ITU-R BT.709 の変換係数。入力値の範囲は 0<=Y,U,V<=255。
98         COEFFICIENT_ITU_R_BT_601_SCALING,   //!< ITU-R BT.601 の変換係数。入力値の範囲は 16<=Y<=235, 16<=U,V<=240。
99         COEFFICIENT_ITU_R_BT_709_SCALING,   //!< ITU-R BT.709 の変換係数。入力値の範囲は 16<=Y<=235, 16<=U,V<=240。
100 
101         COEFFICIENT_MAX
102     };
103 
104     /*!
105       @brief    ディザリングパターンを示す構造体です。
106 
107                 時間的ディザリングが disable のとき、w0_* の設定値のみが使用されます。
108                 空間的ディザリングが disable のとき、w*_xEven_yEven の設定値のみが使用されます。
109                 各メンバ変数に指定する値は 0 から 3 の範囲でなければいけません。
110     */
111     struct DitheringWeightParams
112     {
113         u16   w0_xEven_yEven; //!< 時間0, x座標が偶数, y座標が偶数 の画素に対する重み
114         u16   w0_xOdd_yEven;  //!< 時間0, x座標が奇数, y座標が偶数 の画素に対する重み
115         u16   w0_xEven_yOdd;  //!< 時間0, x座標が偶数, y座標が奇数 の画素に対する重み
116         u16   w0_xOdd_yOdd;   //!< 時間0, x座標が奇数, y座標が奇数 の画素に対する重み
117 
118         u16   w1_xEven_yEven; //!< 時間1, x座標が偶数, y座標が偶数 の画素に対する重み
119         u16   w1_xOdd_yEven;  //!< 時間1, x座標が奇数, y座標が偶数 の画素に対する重み
120         u16   w1_xEven_yOdd;  //!< 時間1, x座標が偶数, y座標が奇数 の画素に対する重み
121         u16   w1_xOdd_yOdd;   //!< 時間1, x座標が奇数, y座標が奇数 の画素に対する重み
122 
123         u16   w2_xEven_yEven; //!< 時間2, x座標が偶数, y座標が偶数 の画素に対する重み
124         u16   w2_xOdd_yEven;  //!< 時間2, x座標が奇数, y座標が偶数 の画素に対する重み
125         u16   w2_xEven_yOdd;  //!< 時間2, x座標が偶数, y座標が奇数 の画素に対する重み
126         u16   w2_xOdd_yOdd;   //!< 時間2, x座標が奇数, y座標が奇数 の画素に対する重み
127 
128         u16   w3_xEven_yEven; //!< 時間3, x座標が偶数, y座標が偶数 の画素に対する重み
129         u16   w3_xOdd_yEven;  //!< 時間3, x座標が奇数, y座標が偶数 の画素に対する重み
130         u16   w3_xEven_yOdd;  //!< 時間3, x座標が偶数, y座標が奇数 の画素に対する重み
131         u16   w3_xOdd_yOdd;   //!< 時間3, x座標が奇数, y座標が奇数 の画素に対する重み
132     };
133 
134     /*!
135       @brief    パラメータの一括設定用の構造体です。
136     */
137     struct PackageParameter
138     {
139         InputFormat             inputFormat;            //!< SetInputFormat で指定する値
140         OutputFormat            outputFormat;           //!< SetOutputFormat で指定する値
141         Rotation                rotation;               //!< SetRotation で指定する値
142         BlockAlignment          blockAlignment;         //!< SetBlockAlignment で指定する値
143         s16                     inputLineWidth;         //!< SetInputLineWidth で指定する値
144         s16                     inputLines;             //!< SetInputLines で指定する値
145         StandardCoefficient     standardCoefficientNo;  //!< SetStandardCoefficientParams で指定する値
146         NN_PADDING1;
147         s16                     alpha;                  //!< SetAlpha で指定する値
148     };
149 
150 } // namespace CTR
151 } // namespace y2r
152 } // namespace nn
153 
154 #endif //NN_Y2R_CTR_Y2R_Y2RTYPES_H_
155