Home | History | Annotate | Download | only in include
      1 /* Copyright(c) 2011 Samsung Electronics Co, Ltd.
      2  *
      3  * This program is free software; you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License version 2 as
      5  * published by the Free Software Foundation.
      6  *
      7  * Alternatively, Licensed under the Apache License, Version 2.0 (the "License");
      8  * you may not use this file except in compliance with the License.
      9  * You may obtain a copy of the License at
     10  *
     11  *      http://www.apache.org/licenses/LICENSE-2.0
     12  *
     13  * Unless required by applicable law or agreed to in writing, software
     14  * distributed under the License is distributed on an "AS IS" BASIS,
     15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16  * See the License for the specific language governing permissions and
     17  * limitations under the License.
     18 */
     19 
     20 #ifndef _S5P_FIMC_H_
     21 #define _S5P_FIMC_H_
     22 
     23 #include "videodev2.h"
     24 #include "videodev2_exynos_media.h"
     25 
     26 /*
     27  * G E N E R A L S
     28  *
     29 */
     30 
     31 /*
     32  * P I X E L   F O R M A T   G U I D E
     33  *
     34  * The 'x' means 'DO NOT CARE'
     35  * The '*' means 'FIMC SPECIFIC'
     36  * For some fimc formats, we couldn't find equivalent format in the V4L2 FOURCC.
     37  *
     38  * FIMC TYPE    PLANES  ORDER       V4L2_PIX_FMT
     39  * ---------------------------------------------------------
     40  * RGB565   x   x       V4L2_PIX_FMT_RGB565
     41  * RGB888   x   x       V4L2_PIX_FMT_RGB24
     42  * YUV420   2   LSB_CBCR    V4L2_PIX_FMT_NV12
     43  * YUV420   2   LSB_CRCB    V4L2_PIX_FMT_NV21
     44  * YUV420   2   MSB_CBCR    V4L2_PIX_FMT_NV21X*
     45  * YUV420   2   MSB_CRCB    V4L2_PIX_FMT_NV12X*
     46  * YUV420   3   x       V4L2_PIX_FMT_YUV420
     47  * YUV422   1   YCBYCR      V4L2_PIX_FMT_YUYV
     48  * YUV422   1   YCRYCB      V4L2_PIX_FMT_YVYU
     49  * YUV422   1   CBYCRY      V4L2_PIX_FMT_UYVY
     50  * YUV422   1   CRYCBY      V4L2_PIX_FMT_VYUY*
     51  * YUV422   2   LSB_CBCR    V4L2_PIX_FMT_NV16*
     52  * YUV422   2   LSB_CRCB    V4L2_PIX_FMT_NV61*
     53  * YUV422   2   MSB_CBCR    V4L2_PIX_FMT_NV16X*
     54  * YUV422   2   MSB_CRCB    V4L2_PIX_FMT_NV61X*
     55  * YUV422   3   x       V4L2_PIX_FMT_YUV422P
     56  *
     57 */
     58 
     59 /*
     60  * V 4 L 2   F I M C   E X T E N S I O N S
     61  *
     62 */
     63 #define V4L2_PIX_FMT_YVYU       v4l2_fourcc('Y', 'V', 'Y', 'U')
     64 
     65 /* FOURCC for FIMC specific */
     66 #define V4L2_PIX_FMT_NV12X      v4l2_fourcc('N', '1', '2', 'X')
     67 #define V4L2_PIX_FMT_NV21X      v4l2_fourcc('N', '2', '1', 'X')
     68 #define V4L2_PIX_FMT_VYUY       v4l2_fourcc('V', 'Y', 'U', 'Y')
     69 #define V4L2_PIX_FMT_NV16       v4l2_fourcc('N', 'V', '1', '6')
     70 #define V4L2_PIX_FMT_NV61       v4l2_fourcc('N', 'V', '6', '1')
     71 #define V4L2_PIX_FMT_NV16X      v4l2_fourcc('N', '1', '6', 'X')
     72 #define V4L2_PIX_FMT_NV61X      v4l2_fourcc('N', '6', '1', 'X')
     73 
     74 /* CID extensions */
     75 #define V4L2_CID_ROTATION       (V4L2_CID_PRIVATE_BASE + 0)
     76 #define V4L2_CID_OVLY_MODE              (V4L2_CID_PRIVATE_BASE + 9)
     77 #define V4L2_CID_GET_PHY_SRC_YADDR  (V4L2_CID_PRIVATE_BASE + 12)
     78 #define V4L2_CID_GET_PHY_SRC_CADDR  (V4L2_CID_PRIVATE_BASE + 13)
     79 #define V4L2_CID_RESERVED_MEM_BASE_ADDR (V4L2_CID_PRIVATE_BASE + 20)
     80 #define V4L2_CID_FIMC_VERSION       (V4L2_CID_PRIVATE_BASE + 21)
     81 
     82 /*
     83  * U S E R   D E F I N E D   T Y P E S
     84  *
     85 */
     86 #define FIMC1_RESERVED_SIZE 32768
     87 
     88 enum fimc_overlay_mode {
     89     FIMC_OVLY_NOT_FIXED       = 0x0,    /* Overlay mode isn't fixed. */
     90     FIMC_OVLY_FIFO            = 0x1,    /* Non-destructive Overlay with FIFO */
     91     FIMC_OVLY_DMA_AUTO        = 0x2,    /* Non-destructive Overlay with DMA */
     92     FIMC_OVLY_DMA_MANUAL      = 0x3,    /* Non-destructive Overlay with DMA */
     93     FIMC_OVLY_NONE_SINGLE_BUF = 0x4,    /* Destructive Overlay with DMA single destination buffer */
     94     FIMC_OVLY_NONE_MULTI_BUF  = 0x5,    /* Destructive Overlay with DMA multiple dstination buffer */
     95 };
     96 
     97 typedef unsigned int dma_addr_t;
     98 
     99 struct fimc_buf {
    100     dma_addr_t  base[3];
    101     size_t      size[3];
    102     int         planes;
    103 };
    104 
    105 struct fimc_buffer {
    106     void    *virt_addr;
    107     void    *phys_addr;
    108     size_t  length;
    109 };
    110 
    111 struct yuv_fmt_list {
    112     const char      *name;
    113     const char      *desc;
    114     unsigned int    fmt;
    115     int             bpp;
    116     int             planes;
    117 };
    118 
    119 struct img_offset {
    120     int y_h;
    121     int y_v;
    122     int cb_h;
    123     int cb_v;
    124     int cr_h;
    125     int cr_v;
    126 };
    127 
    128 //------------ STRUCT ---------------------------------------------------------//
    129 
    130 typedef struct
    131 {
    132     unsigned int full_width;            // Source Image Full Width (Virtual screen size)
    133     unsigned int full_height;           // Source Image Full Height (Virtual screen size)
    134     unsigned int start_x;               // Source Image Start width offset
    135     unsigned int start_y;               // Source Image Start height offset
    136     unsigned int width;                 // Source Image Width
    137     unsigned int height;                // Source Image Height
    138     unsigned int buf_addr_phy_rgb_y;    // Base Address of the Source Image (RGB or Y): Physical Address
    139     unsigned int buf_addr_phy_cb;       // Base Address of the Source Image (CB Component) : Physical Address
    140     unsigned int buf_addr_phy_cr;       // Base Address of the Source Image (CR Component) : Physical Address
    141     unsigned int color_space;           // Color Space of the Source Image
    142     unsigned int planes;                // number of planes for the Image
    143 } s5p_fimc_img_info;
    144 
    145 typedef struct
    146 {
    147     s5p_fimc_img_info   src;
    148     s5p_fimc_img_info   dst;
    149 } s5p_fimc_params_t;
    150 
    151 typedef struct _s5p_fimc_t {
    152     int                 dev_fd;
    153     struct fimc_buffer  out_buf;
    154 
    155     s5p_fimc_params_t   params;
    156 
    157     int                 use_ext_out_mem;
    158 } s5p_fimc_t;
    159 
    160 #endif
    161