/* * iav_common.h * * History: * 2013/09/04 - [Cao Rongrong] Created file * * Copyright (c) 2016 Ambarella, Inc. * * This file and its contents ("Software") are protected by intellectual * property rights including, without limitation, U.S. and/or foreign * copyrights. This Software is also the confidential and proprietary * information of Ambarella, Inc. and its licensors. You may not use, reproduce, * disclose, distribute, modify, or otherwise prepare derivative works of this * Software or any portion thereof except pursuant to a signed license agreement * or nondisclosure agreement with Ambarella, Inc. or its authorized affiliates. * In the absence of such an agreement, you agree to promptly notify and return * this Software to Ambarella, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, * MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL AMBARELLA, INC. OR ITS AFFILIATES BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; COMPUTER FAILURE OR MALFUNCTION; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ #ifndef __IAV_COMMON_H__ #define __IAV_COMMON_H__ /*! @file iav_common.h * @brief This file defines common enumerations used in all IAV driver and header files */ #ifdef __cplusplus extern "C" { #endif /*! @addtogroup iav-common-helper * @{ */ /** @enum amba_chip_arch * @brief AMBA CHIP ARCH definition */ enum amba_chip_arch { AMBA_CHIP_ARCH_UNKNOWN = 0xFFFF, /*!< 0xFFFF */ AMBA_CHIP_ARCH_S5 = 11000, /*!< 11000 */ AMBA_CHIP_ARCH_S2L = 12000, /*!< 12000 */ AMBA_CHIP_ARCH_S3L = 13000, /*!< 13000 */ AMBA_CHIP_ARCH_S5L = 16000, /*!< 16000 */ AMBA_CHIP_ARCH_S6LM = 17000, /*!< 17000 */ AMBA_CHIP_ARCH_CV1 = 20000, /*!< 20000 */ AMBA_CHIP_ARCH_CV2 = 21000, /*!< 21000 */ AMBA_CHIP_ARCH_CV22 = 22000, /*!< 22000 */ AMBA_CHIP_ARCH_CV25 = 25000, /*!< 25000 */ }; /*! @enum amba_video_format * @brief AMBA Video Format Enumerations */ enum amba_video_format { AMBA_VIDEO_FORMAT_AUTO = 0, /*!< 0 */ AMBA_VIDEO_FORMAT_INTERLACE = 1, /*!< 1 */ AMBA_VIDEO_FORMAT_PROGRESSIVE = 2, /*!< 2 */ }; /*! @enum amba_video_type * @brief AMBA Video Type Enumerations */ enum amba_video_type { AMBA_VIDEO_TYPE_AUTO = 0, /*!< 0 */ AMBA_VIDEO_TYPE_YUV_601 = 1, /*!< 1 */ AMBA_VIDEO_TYPE_YUV_656 = 2, /*!< 2 */ AMBA_VIDEO_TYPE_RGB_601 = 3, /*!< 3 */ AMBA_VIDEO_TYPE_RGB_656 = 4, /*!< 4 */ AMBA_VIDEO_TYPE_RGB_RAW = 5, /*!< 5 */ AMBA_VIDEO_TYPE_YUV_BT1120 = 6, /*!< 6 */ AMBA_VIDEO_TYPE_RGB_BT1120 = 7, /*!< 7 */ }; /*! @macros AMBA_VIDEO_FPS(fps) * @brief Formula of video fps.Input fps would be in enum amba_video_fps */ #define AMBA_VIDEO_FPS(fps) (512000000 / fps) /*! @enum amba_video_fps * @brief AMBA Video FPS Enumerations */ enum amba_video_fps { AMBA_VIDEO_FPS_AUTO = 0, /*!< 0 */ AMBA_VIDEO_FPS_1 = 512000000, /*!< 512000000 */ AMBA_VIDEO_FPS_2 = 256000000, /*!< 256000000 */ AMBA_VIDEO_FPS_3 = 170666667, /*!< 170666667 */ AMBA_VIDEO_FPS_4 = 128000000, /*!< 128000000 */ AMBA_VIDEO_FPS_5 = 102400000, /*!< 102400000 */ AMBA_VIDEO_FPS_6 = 85333333, /*!< 85333333 */ AMBA_VIDEO_FPS_10 = 51200000, /*!< 51200000 */ AMBA_VIDEO_FPS_12 = 42666667, /*!< 42666667 */ AMBA_VIDEO_FPS_13 = 39384615, /*!< 39384615 */ AMBA_VIDEO_FPS_14 = 36571428, /*!< 36571428 */ AMBA_VIDEO_FPS_15 = 34133333, /*!< 34133333 */ AMBA_VIDEO_FPS_20 = 25600000, /*!< 25600000 */ AMBA_VIDEO_FPS_24 = 21333333, /*!< 21333333 */ AMBA_VIDEO_FPS_25 = 20480000, /*!< 20480000 */ AMBA_VIDEO_FPS_30 = 17066667, /*!< 17066667 */ AMBA_VIDEO_FPS_50 = 10240000, /*!< 10240000 */ AMBA_VIDEO_FPS_60 = 8533333, /*!< 8533333 */ AMBA_VIDEO_FPS_120 = 4266667, /*!< 4266667 */ AMBA_VIDEO_FPS_29_97 = 17083750, /*!< 17083750 */ AMBA_VIDEO_FPS_59_94 = 8541875, /*!< 8541875 */ AMBA_VIDEO_FPS_23_976 = 21354688, /*!< 21354688 */ AMBA_VIDEO_FPS_12_5 = 40960000, /*!< 40960000 */ AMBA_VIDEO_FPS_6_25 = 81920000, /*!< 81920000 */ AMBA_VIDEO_FPS_3_125 = 163840000, /*!< 163840000 */ AMBA_VIDEO_FPS_7_5 = 68266667, /*!< 68266667 */ AMBA_VIDEO_FPS_3_75 = 136533333, /*!< 136533333 */ }; /*! @enum amba_video_mode * @brief AMBA Video Mode Enumerations */ enum amba_video_mode { AMBA_VIDEO_MODE_AUTO = 0, /*!< 0, default mode*/ AMBA_VIDEO_MODE_240_400, AMBA_VIDEO_MODE_320_240, AMBA_VIDEO_MODE_320_288, AMBA_VIDEO_MODE_320_480, AMBA_VIDEO_MODE_360_240, AMBA_VIDEO_MODE_360_288, AMBA_VIDEO_MODE_480_240, AMBA_VIDEO_MODE_480_640, AMBA_VIDEO_MODE_480_800, AMBA_VIDEO_MODE_640_480, AMBA_VIDEO_MODE_640_512, AMBA_VIDEO_MODE_720_240, AMBA_VIDEO_MODE_720_480, AMBA_VIDEO_MODE_720_576, AMBA_VIDEO_MODE_800_480, AMBA_VIDEO_MODE_848_480, AMBA_VIDEO_MODE_800_600, AMBA_VIDEO_MODE_960_240, AMBA_VIDEO_MODE_960_540, AMBA_VIDEO_MODE_1024_600, AMBA_VIDEO_MODE_1024_768, AMBA_VIDEO_MODE_1152_576, AMBA_VIDEO_MODE_1152_648, AMBA_VIDEO_MODE_1280_320, AMBA_VIDEO_MODE_1280_720, AMBA_VIDEO_MODE_1280_800, AMBA_VIDEO_MODE_1280_960, AMBA_VIDEO_MODE_1280_1024, AMBA_VIDEO_MODE_1296_1032, AMBA_VIDEO_MODE_1400_1050, AMBA_VIDEO_MODE_1440_900, AMBA_VIDEO_MODE_1600_1200, AMBA_VIDEO_MODE_1600_1600, AMBA_VIDEO_MODE_1632_1632, AMBA_VIDEO_MODE_1640_1232, AMBA_VIDEO_MODE_1680_1050, AMBA_VIDEO_MODE_1728_486, AMBA_VIDEO_MODE_1920_1080, AMBA_VIDEO_MODE_1920_1200, AMBA_VIDEO_MODE_1920_1440, AMBA_VIDEO_MODE_1920_1920, AMBA_VIDEO_MODE_2048_1080, AMBA_VIDEO_MODE_2048_1152, AMBA_VIDEO_MODE_2048_1536, AMBA_VIDEO_MODE_2048_2048, AMBA_VIDEO_MODE_2208_1242, AMBA_VIDEO_MODE_2304_1296, AMBA_VIDEO_MODE_2304_1536, AMBA_VIDEO_MODE_2304_1728, AMBA_VIDEO_MODE_2432_2048, AMBA_VIDEO_MODE_2520_1424, AMBA_VIDEO_MODE_2560_1440, AMBA_VIDEO_MODE_2560_2048, AMBA_VIDEO_MODE_2592_1944, AMBA_VIDEO_MODE_2688_1512, AMBA_VIDEO_MODE_2688_1520, AMBA_VIDEO_MODE_2688_1944, AMBA_VIDEO_MODE_3072_1728, AMBA_VIDEO_MODE_3072_2048, AMBA_VIDEO_MODE_3280_1852, AMBA_VIDEO_MODE_3280_2464, AMBA_VIDEO_MODE_3840_2160, AMBA_VIDEO_MODE_4000_3000, AMBA_VIDEO_MODE_4016_3016, AMBA_VIDEO_MODE_4096_2160, AMBA_VIDEO_MODE_5472_3648, AMBA_VIDEO_MODE_7680_4320, AMBA_VIDEO_MODE_1920_2160, AMBA_VIDEO_MODE_3008_3000, AMBA_VIDEO_MODE_1792_1792, AMBA_VIDEO_MODE_2000_1118, AMBA_VIDEO_MODE_1312_996, AMBA_VIDEO_MODE_1920_480, AMBA_VIDEO_MODE_1920_640, AMBA_VIDEO_MODE_1920_720, AMBA_VIDEO_MODE_3264_2448, AMBA_VIDEO_MODE_1856_1856, AMBA_VIDEO_MODE_3008_3008, AMBA_VIDEO_MODE_1536_1536, AMBA_VIDEO_MODE_2176_2160, AMBA_VIDEO_MODE_2880_1856, AMBA_VIDEO_MODE_2448_2064, AMBA_VIDEO_MODE_1952_1112, AMBA_VIDEO_MODE_1200_1920, AMBA_VIDEO_MODE_1824_944, AMBA_VIDEO_MODE_1280_1080, AMBA_VIDEO_MODE_6016_4008, AMBA_VIDEO_MODE_4768_3184, AMBA_VIDEO_MODE_1280_1000, AMBA_VIDEO_MODE_2592_1440, AMBA_VIDEO_MODE_2880_1080, AMBA_VIDEO_MODE_NUM, /* alias name */ AMBA_VIDEO_MODE_HVGA = AMBA_VIDEO_MODE_320_480, /*!< AMBA_VIDEO_MODE_320_480 */ AMBA_VIDEO_MODE_VGA = AMBA_VIDEO_MODE_640_480, /*!< AMBA_VIDEO_MODE_640_480 */ AMBA_VIDEO_MODE_WVGA = AMBA_VIDEO_MODE_800_480, /*!< AMBA_VIDEO_MODE_800_480 */ AMBA_VIDEO_MODE_SVGA = AMBA_VIDEO_MODE_800_600, /*!< AMBA_VIDEO_MODE_800_600 */ AMBA_VIDEO_MODE_WSVGA = AMBA_VIDEO_MODE_1024_600, /*!< AMBA_VIDEO_MODE_1024_600 */ AMBA_VIDEO_MODE_XGA = AMBA_VIDEO_MODE_1024_768, /*!< AMBA_VIDEO_MODE_1024_768 */ AMBA_VIDEO_MODE_WXGA = AMBA_VIDEO_MODE_1280_800, /*!< AMBA_VIDEO_MODE_1280_800 */ AMBA_VIDEO_MODE_SXGA = AMBA_VIDEO_MODE_1280_1024, /*!< AMBA_VIDEO_MODE_1280_1024 */ AMBA_VIDEO_MODE_SXGAP = AMBA_VIDEO_MODE_1400_1050, /*!< AMBA_VIDEO_MODE_1400_1050 */ AMBA_VIDEO_MODE_WSXGA = AMBA_VIDEO_MODE_1440_900, /*!< AMBA_VIDEO_MODE_1440_900 */ AMBA_VIDEO_MODE_UXGA = AMBA_VIDEO_MODE_1600_1200, /*!< AMBA_VIDEO_MODE_1600_1200 */ AMBA_VIDEO_MODE_WSXGAP = AMBA_VIDEO_MODE_1680_1050, /*!< AMBA_VIDEO_MODE_1680_1050 */ AMBA_VIDEO_MODE_WUXGA = AMBA_VIDEO_MODE_1920_1200, /*!< AMBA_VIDEO_MODE_1920_1200 */ AMBA_VIDEO_MODE_QXGA = AMBA_VIDEO_MODE_2048_1536, /*!< AMBA_VIDEO_MODE_2048_1536 */ AMBA_VIDEO_MODE_QSXGA = AMBA_VIDEO_MODE_2592_1944, /*!< AMBA_VIDEO_MODE_2592_1944 */ AMBA_VIDEO_MODE_1080P = AMBA_VIDEO_MODE_1920_1080, /*!< AMBA_VIDEO_MODE_1920_1080 */ AMBA_VIDEO_MODE_1080I = AMBA_VIDEO_MODE_1920_1080, /*!< AMBA_VIDEO_MODE_1920_1080 */ AMBA_VIDEO_MODE_720P = AMBA_VIDEO_MODE_1280_720, /*!< AMBA_VIDEO_MODE_1280_720 */ AMBA_VIDEO_MODE_576P = AMBA_VIDEO_MODE_720_576, /*!< AMBA_VIDEO_MODE_720_576 */ AMBA_VIDEO_MODE_480P = AMBA_VIDEO_MODE_720_480, /*!< AMBA_VIDEO_MODE_720_480 */ AMBA_VIDEO_MODE_576I = AMBA_VIDEO_MODE_720_576, /*!< AMBA_VIDEO_MODE_720_576 */ AMBA_VIDEO_MODE_480I = AMBA_VIDEO_MODE_720_480, /*!< AMBA_VIDEO_MODE_720_480 */ AMBA_VIDEO_MODE_D1_PAL = AMBA_VIDEO_MODE_720_576, /*!< AMBA_VIDEO_MODE_720_576 */ AMBA_VIDEO_MODE_D1_NTSC = AMBA_VIDEO_MODE_720_480, /*!< AMBA_VIDEO_MODE_720_480 */ /* misc */ AMBA_VIDEO_MODE_OFF = 0xF000, /*!< 0xF000 */ AMBA_VIDEO_MODE_NOT_SUPPORT = -1, /*!< -1 */ AMBA_VIDEO_MODE_CURRENT = -2, /*!< -2 */ AMBA_VIDEO_MODE_INVALID = AMBA_VIDEO_MODE_NUM + 1, /*!< AMBA_VIDEO_MODE_NUM + 1 */ }; /*! @enum amba_video_bits * @brief AMBA Video Bits Enumerations */ enum amba_video_bits { AMBA_VIDEO_BITS_AUTO = 0, /*!< 0 */ AMBA_VIDEO_BITS_8 = 8, /*!< 8 */ AMBA_VIDEO_BITS_10 = 10, /*!< 10 */ AMBA_VIDEO_BITS_12 = 12, /*!< 12 */ AMBA_VIDEO_BITS_14 = 14, /*!< 14 */ AMBA_VIDEO_BITS_16 = 16, /*!< 16 */ }; /*! @enum amba_video_ratio * @brief AMBA Video Ration Enumerations */ enum amba_video_ratio { AMBA_VIDEO_RATIO_AUTO = 0x0, /*!< 0x0 */ AMBA_VIDEO_RATIO_4_3 = 0x1, /*!< 0x1 */ AMBA_VIDEO_RATIO_16_9 = 0x2, /*!< 0x2 */ AMBA_VIDEO_RATIO_1_1 = 0x4, /*!< 0x4 */ }; /*! @enum amba_video_system * @brief AMBA Video Ration Enumerations */ enum amba_video_system { AMBA_VIDEO_SYSTEM_AUTO = 0x0, /*!< 0x0 */ AMBA_VIDEO_SYSTEM_NTSC = 0x1, /*!< 0x1 */ AMBA_VIDEO_SYSTEM_PAL = 0x2, /*!< 0x2 */ AMBA_VIDEO_SYSTEM_SECAM = 0x4, /*!< 0x4 */ AMBA_VIDEO_SYSTEM_ALL = 0xf, /*!< 0xf */ }; enum amba_video_hdr_mode { AMBA_VIDEO_LINEAR_MODE = 0, /*!< 0 */ AMBA_VIDEO_2X_HDR_MODE, AMBA_VIDEO_3X_HDR_MODE, AMBA_VIDEO_4X_HDR_MODE, AMBA_VIDEO_INT_HDR_MODE = 15, /*!< 15 */ AMBA_VIDEO_MODE_TOTAL_NUM, AMBA_VIDEO_HDR_MODE_INVALID = 0xFF, /*!< 0xFF */ AMBA_VIDEO_MODE_FIRST = 0,/*!< 0 */ AMBA_VIDEO_MODE_LAST = AMBA_VIDEO_MODE_TOTAL_NUM, /*!< AMBA_VIDEO_MODE_TOTAL_NUM */ }; /*! @} */ /* iav-common-helper */ /*! @addtogroup iav-common-struct * @{ */ /*! @struct amba_video_info * @brief Amba video info */ struct amba_video_info { u32 mode; /*!< Video mode, @sa amba_video_mode */ u32 width; /*!< Window width */ u32 height; /*!< Window height */ u32 max_fps; /*!< Video max fps */ u32 fps; /*!< Video fps */ u8 format; /*!< Video format */ u8 type; /*!< Video type */ u8 bits; /*!< Video encode bit width */ u8 ratio; /*!< Width-height ratio */ u8 system; /*!< Video system type */ u8 flip; /*!< Video flip */ u8 rotate; /*!< Video rotate */ u8 hdr_mode; /*!< Video rotate */ u32 rev; /*!< Struct definition revision */ }; /*! @} */ /* iav-common-struct */ /*! * @addtogroup iav-common-helper * @{ */ /*! @macros DIV_ROUND(x,d) * @brief div_round in 32-bit. */ #ifndef DIV_ROUND #define DIV_ROUND(x, d) (((x) + ((d) - 1)) / (d)) #endif /*! @macros DIV_CLOSEST(x,d) * @brief div_closest in 32-bit. */ #ifndef DIV_CLOSEST #define DIV_CLOSEST(x, d) (((x) + ((d) / 2)) / (d)) #endif /*! * @macros DIV64_ROUND(x,d) * @brief div_round in 64-bit. */ #ifndef DIV64_ROUND #define DIV64_ROUND(x, d) ({u64 _tmp = (x)+((d) - 1); do_div(_tmp, d); _tmp;}) #endif /*! * @macros DIV64_CLOSEST(x,d) * @brief div_closet in 64-bit. */ #ifndef DIV64_CLOSEST #define DIV64_CLOSEST(x, d) ({u64 _tmp = (x)+((d)/2); do_div(_tmp, d); _tmp;}) #endif /*! * @macros ROUND_UP(x,d) * @brief round up func. */ #ifndef ROUND_UP #define ROUND_UP(x, n) ( ((x)+(n)-1u) & ~((n)-1u) ) #endif /*! * @macros ROUND_DOWN(x,d) * @brief round down func. */ #ifndef ROUND_DOWN #define ROUND_DOWN(x, n) ((x) & ~((n) - 1)) #endif /*! * @macros MIN(a, b) * @brief return minimum value of a and b. */ #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif /*! * @macros MAX(a, b) * @brief return maximum value of a and b. */ #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif /*! * @macros ABS(x) * @brief return absolute value of x. */ #ifndef ABS #define ABS(x) ({ \ int __x = (x); \ (__x < 0) ? -__x : __x; \ }) #endif /*! * @macros ARRAY_SIZE(array) * @brief return array_size of input array. */ #ifndef ARRAY_SIZE #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) #endif /*! * @macros BIT(n) * @brief bit n. */ #ifndef BIT #define BIT(n) (1 << (n)) #endif /*! * @macros TEST_BIT(x, n) * @brief test if the (n) th bit of (x) is 1. */ #ifndef TEST_BIT #define TEST_BIT(x, n) ((x) & (1 << (n))) #endif /*! * @macros SET_BIT(x, n) * @brief set the (n)th bit of (x) to 1. */ #ifndef SET_BIT #define SET_BIT(x, n) do {x = (x | (1 << (n)));} while(0); #endif /*! * @macros CLEAR_BIT(x, n) * @brief set the (n)th bit of (x) to 0. */ #ifndef CLEAR_BIT #define CLEAR_BIT(x, n) do {x = (x & (~(1 << (n))));} while(0); #endif /*! @} */ /* End of iav-common-helper */ #ifdef __cplusplus } #endif #endif