1 /* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation. nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 */ 29 30 #ifndef _C2DEXT_H_ 31 #define _C2DEXT_H_ 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 #include "c2d2.h" 38 39 typedef enum { /*!< lens correction type */ 40 C2D_LENSCORRECT_AFFINE = 0, /*!< affine, default (3x2 matrix) */ 41 C2D_LENSCORRECT_PERSPECTIVE = (1 << 0), /*!< perspective bit (3x3) matrix */ 42 C2D_LENSCORRECT_BILINEAR = (1 << 1), /*!< bilinear bit */ 43 C2D_LENSCORRECT_ORIGIN_IN_MIDDLE= (1 << 2), /*!< rotation origin for matrix is in the middle */ 44 C2D_LENSCORRECT_SOURCE_RECT = (1 << 3), /*!< enables source_rect field. When set, client has to provide C2D_LENSCORRECT_OBJECT.source_rect 45 if not set source surface dimensions are used.*/ 46 C2D_LENSCORRECT_TARGET_RECT = (1 << 4), /*!< enables target_rect field. When set, client has to provide C2D_LENSCORRECT_OBJECT.target_rect 47 if not set target surface dimensions are used. */ 48 } C2D_LENSCORRECT_TYPE; 49 50 typedef struct C2D_LENSCORRECT_OBJ_STR { 51 uint32 srcId; /*!< source surface */ 52 C2D_RECT blitSize; /*!< C2D_RECT for blit size */ 53 C2D_RECT gridSize; /*!< C2D_RECT for grid size */ 54 int32 offsetX; /*!< source x offset */ 55 int32 offsetY; /*!< source y offset */ 56 uint32 transformType; /*!< (C2D_LENSCORRECT_AFFINE or C2D_LENSCORRECT_PERSPECTIVE) + C2D_LENSCORRECT_BILINEAR */ 57 float *transformMatrices; /*!< transformMatrix array, 3x2 or 3x3 depending transformType */ 58 C2D_RECT source_rect; /*!< region of the source surface, 16.16 fp */ 59 C2D_RECT target_rect; /*!< position and scaling in target, 16.16 fp */ 60 }C2D_LENSCORRECT_OBJECT; 61 62 /* ------------------------------------------------------------------- *//*! 63 * \external 64 * \brief Lens correction, affine or perspective 65 * 66 * \param uint32 targetSurface 67 * \param C2D_LENSCORRECT_OBJECT sourceObject 68 * \return C2D_STATUS_OK on success 69 *//* ------------------------------------------------------------------- */ 70 C2D_API C2D_STATUS c2dLensCorrection( 71 uint32 targetSurface, 72 C2D_LENSCORRECT_OBJECT *sourceObject); 73 74 /* ------------------------------------------------------------------- *//*! 75 * \external 76 * \brief Locks surface and sets surfaces host pointer 77 * 78 * \param uint32 surface 79 * \param void** pointer to void pointer where host address is returned 80 * \return C2D_STATUS_OK on success 81 *//* ------------------------------------------------------------------- */ 82 C2D_API C2D_STATUS c2dLockSurface( 83 uint32 a_surface, 84 void **y_pHostAddress, 85 void **u_pHostAddress, 86 void **v_pHostAddress); 87 88 /* ------------------------------------------------------------------- *//*! 89 * \external 90 * \brief Unlocks surface 91 * 92 * \param uint32 surface 93 * \return C2D_STATUS_OK on success 94 *//* ------------------------------------------------------------------- */ 95 C2D_API C2D_STATUS c2dUnlockSurface( 96 uint32 a_surface); 97 98 /* ------------------------------------------------------------------- *//*! 99 * \external 100 * \brief Fills surface information parameters 101 * 102 * \param uint32 surface 103 * \param uint32 *width 104 * \param uint32 *height 105 * \param uint32 *format 106 * \return C2D_STATUS_OK on success 107 *//* ------------------------------------------------------------------- */ 108 C2D_API C2D_STATUS c2dGetSurfaceInfo( 109 uint32 a_surface, 110 uint32 *width, 111 uint32 *height, 112 uint32 *format ); 113 114 /* ------------------------------------------------------------------- *//*! 115 * \external 116 * \brief Fills device information parameters 117 * 118 * \param uint32 *count 119 * \return C2D_STATUS_OK on success 120 *//* ------------------------------------------------------------------- */ 121 C2D_API C2D_STATUS c2dGetDeviceInfo( 122 uint32 *count ); 123 124 125 //============================================================================= 126 // C2D extension for adding shader support 127 //============================================================================= 128 typedef enum { /*!< C2D sampler type enum */ 129 C2D_SAMPLER_FRAG_SRC = (1 << 0), /*!< Frag sampler for source surface*/ 130 C2D_SAMPLER_FRAG_DST = (1 << 1), /*!< Frag sampler for target surface*/ 131 C2D_SAMPLER_FRAG_MASK = (1 << 2) /*!< Frag sampler for mask surface */ 132 }C2D_SAMPLER_TYPE; 133 134 135 struct c2d_sampler { /*!< C2D sampler structure */ 136 char* sampler_name; /*!< sampler name */ 137 uint32 sampler_name_len; /*!< sampler name length */ 138 C2D_SAMPLER_TYPE sampler_type; /*!< sampler type */ 139 }; 140 141 142 struct c2d_uniform { /*!< C2D uniform structure */ 143 char * u_name; /*!< uniform name */ 144 int u_name_len; /*!< uniform name length */ 145 void* u_data; /*!< uniform data buffer */ 146 uint32 u_data_len; /*!< uniform data buffer length */ 147 uint32 u_item_size; /*!< per item size in buffer */ 148 uint32 u_item_count; /*!< total item count in buffer */ 149 }; 150 151 152 struct c2d_program { /*!< C2D shader structure */ 153 unsigned char* program_binary; /*!< shader binary (VS + FS) */ 154 uint32 program_binary_len; /*!< shader binary length */ 155 struct c2d_uniform* uniform_list; /*!< uniform list in the shader */ 156 uint32 uniform_count; /*!< uniform count in the shader*/ 157 struct c2d_sampler* sampler_list; /*!< sampler list in the shader */ 158 uint32 sampler_count; /*!< sampler count in the shader*/ 159 }; 160 161 162 /* ------------------------------------------------------------------- *//*! 163 * \external 164 * \brief adding a user defined program in C2D that can be used later 165 * 166 * \param struct c2d_program * the program that user wants to Add 167 * \return uint32 this is the id that will be used later 168 * to refer the program 169 * 170 *//* ------------------------------------------------------------------- */ 171 C2D_API uint32 c2dAddProgram(struct c2d_program* a_program); 172 173 174 /* ------------------------------------------------------------------- *//*! 175 * \external 176 * \brief Select a shader to be used 177 * 178 * \param pid this is the program id user want to remove 179 * \return C2D_STATUS C2D_STATUS_OK on success 180 *//* ------------------------------------------------------------------- */ 181 C2D_API C2D_STATUS c2dRemoveProgram(uint32 pid); 182 183 184 /* ------------------------------------------------------------------- *//*! 185 * \external 186 * \brief Select a program to be used by C2D. 187 * 188 * \param pid this is the program id user want to use 189 * \return C2D_STATUS C2D_STATUS__OK on success 190 *//* ------------------------------------------------------------------- */ 191 C2D_API C2D_STATUS c2dActivateProgram(uint32 pid); 192 193 194 /* ------------------------------------------------------------------- *//*! 195 * \external 196 * \brief Deselect a program to be used by C2D. 197 * 198 * \param pid this is the program id user want to deactivate 199 * \return C2D_STATUS C2D_STATUS__OK on success 200 *//* ------------------------------------------------------------------- */ 201 C2D_API C2D_STATUS c2dDeactivateProgram(uint32 pid); 202 203 204 #ifdef __cplusplus 205 } 206 #endif 207 208 #endif /* _C2DEXT_H_ */ 209