• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright@ Samsung Electronics Co. LTD
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15 */
16 
17 #ifndef _S5P_FIMC_H_
18 #define _S5P_FIMC_H_
19 
20 #include <linux/videodev2.h>
21 
22 /*
23  * G E N E R A L S
24  *
25 */
26 #define MIN(x, y)		((x < y) ? x : y)
27 
28 /*
29  * P I X E L   F O R M A T   G U I D E
30  *
31  * The 'x' means 'DO NOT CARE'
32  * The '*' means 'FIMC SPECIFIC'
33  * For some fimc formats, we couldn't find equivalent format in the V4L2 FOURCC.
34  *
35  * FIMC TYPE	PLANES	ORDER		V4L2_PIX_FMT
36  * ---------------------------------------------------------
37  * RGB565	x	x		V4L2_PIX_FMT_RGB565
38  * RGB888	x	x		V4L2_PIX_FMT_RGB24
39  * YUV420	2	LSB_CBCR	V4L2_PIX_FMT_NV12
40  * YUV420	2	LSB_CRCB	V4L2_PIX_FMT_NV21
41  * YUV420	2	MSB_CBCR	V4L2_PIX_FMT_NV21X*
42  * YUV420	2	MSB_CRCB	V4L2_PIX_FMT_NV12X*
43  * YUV420	3	x		V4L2_PIX_FMT_YUV420
44  * YUV422	1	YCBYCR		V4L2_PIX_FMT_YUYV
45  * YUV422	1	YCRYCB		V4L2_PIX_FMT_YVYU
46  * YUV422	1	CBYCRY		V4L2_PIX_FMT_UYVY
47  * YUV422	1	CRYCBY		V4L2_PIX_FMT_VYUY*
48  * YUV422	2	LSB_CBCR	V4L2_PIX_FMT_NV16*
49  * YUV422	2	LSB_CRCB	V4L2_PIX_FMT_NV61*
50  * YUV422	2	MSB_CBCR	V4L2_PIX_FMT_NV16X*
51  * YUV422	2	MSB_CRCB	V4L2_PIX_FMT_NV61X*
52  * YUV422	3	x		V4L2_PIX_FMT_YUV422P
53  *
54 */
55 
56 /*
57  * V 4 L 2   F I M C   E X T E N S I O N S
58  *
59 */
60 #define V4L2_PIX_FMT_YVYU		v4l2_fourcc('Y', 'V', 'Y', 'U')
61 
62 /* FOURCC for FIMC specific */
63 #define V4L2_PIX_FMT_NV12X		v4l2_fourcc('N', '1', '2', 'X')
64 #define V4L2_PIX_FMT_NV21X		v4l2_fourcc('N', '2', '1', 'X')
65 #define V4L2_PIX_FMT_VYUY		v4l2_fourcc('V', 'Y', 'U', 'Y')
66 #define V4L2_PIX_FMT_NV16		v4l2_fourcc('N', 'V', '1', '6')
67 #define V4L2_PIX_FMT_NV61		v4l2_fourcc('N', 'V', '6', '1')
68 #define V4L2_PIX_FMT_NV16X		v4l2_fourcc('N', '1', '6', 'X')
69 #define V4L2_PIX_FMT_NV61X		v4l2_fourcc('N', '6', '1', 'X')
70 
71 #define V4L2_PIX_FMT_NV12T    	v4l2_fourcc('T', 'V', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
72 
73 /* CID extensions */
74 #define V4L2_CID_ROTATION		(V4L2_CID_PRIVATE_BASE + 0)
75 #define V4L2_CID_RESERVED_MEM_BASE_ADDR	(V4L2_CID_PRIVATE_BASE + 20)
76 #define V4L2_CID_FIMC_VERSION		(V4L2_CID_PRIVATE_BASE + 21)
77 /*
78  * U S E R   D E F I N E D   T Y P E S
79  *
80 */
81 
82 typedef unsigned int dma_addr_t;
83 
84 struct fimc_buf {
85 	dma_addr_t	base[3];
86  	size_t		length[3];
87 };
88 
89 struct fimc_buffer {
90 	void	*virt_addr;
91 	void	*phys_addr;
92 	size_t	length;
93 };
94 
95 struct yuv_fmt_list {
96 	const char 		*name;
97 	const char 		*desc;
98 	unsigned int 	fmt;
99 	int				bpp;
100 	int				planes;
101 };
102 
103 struct img_offset {
104     int y_h;
105     int y_v;
106     int cb_h;
107     int cb_v;
108     int cr_h;
109     int cr_v;
110 };
111 
112 //------------ STRUCT ---------------------------------------------------------//
113 
114 typedef	struct
115 {
116 	unsigned int full_width;			// Source Image Full Width (Virtual screen size)
117 	unsigned int full_height;			// Source Image Full Height (Virtual screen size)
118 	unsigned int start_x;				// Source Image Start width offset
119 	unsigned int start_y;				// Source Image Start height offset
120 	unsigned int width;					// Source Image Width
121 	unsigned int height;				// Source Image Height
122 	unsigned int buf_addr_phy_rgb_y;	// Base Address of the Source Image (RGB or Y): Physical Address
123 	unsigned int buf_addr_phy_cb;		// Base Address of the Source Image (CB Component) : Physical Address
124 	unsigned int buf_addr_phy_cr;		// Base Address of the Source Image (CR Component) : Physical Address
125 	unsigned int color_space;			// Color Space of the Source Image
126 } s5p_fimc_img_info;
127 
128 typedef struct
129 {
130 	s5p_fimc_img_info	src;
131 	s5p_fimc_img_info	dst;
132 } s5p_fimc_params_t;
133 
134 typedef struct _s5p_fimc_t {
135     int                dev_fd;
136     struct fimc_buffer  out_buf;
137 
138     s5p_fimc_params_t   params;
139 
140     int                 use_ext_out_mem;
141     unsigned int        hw_ver;
142 }s5p_fimc_t;
143 
144 //------------------------  functions for v4l2 ------------------------------//
145 int fimc_v4l2_set_src(int fd, unsigned int hw_ver, s5p_fimc_img_info *src);
146 int fimc_v4l2_set_dst(int fd, s5p_fimc_img_info *dst, int rotation, unsigned int addr);
147 int fimc_v4l2_stream_on(int fd, enum v4l2_buf_type type);
148 int fimc_v4l2_queue(int fd, struct fimc_buf *fimc_buf);
149 int fimc_v4l2_dequeue(int fd);
150 int fimc_v4l2_stream_off(int fd);
151 int fimc_v4l2_clr_buf(int fd);
152 int fimc_handle_oneshot(int fd, struct fimc_buf *fimc_buf);
153 #endif
154