179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* Copyright(c) 2011 Samsung Electronics Co, Ltd. 279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * This program is free software; you can redistribute it and/or modify 479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * it under the terms of the GNU General Public License version 2 as 579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * published by the Free Software Foundation. 679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * Alternatively, Licensed under the Apache License, Version 2.0 (the "License"); 879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * you may not use this file except in compliance with the License. 979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * You may obtain a copy of the License at 1079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 1179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 1279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 1379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * Unless required by applicable law or agreed to in writing, software 1479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 1579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * See the License for the specific language governing permissions and 1779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * limitations under the License. 1879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/ 1979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 2079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#ifndef _S5P_FIMC_H_ 2179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define _S5P_FIMC_H_ 2279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 2379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#include "videodev2.h" 24234f72f741d0c0cafd10effafbae4c48275d4f90Jiho Chang#include "videodev2_exynos_media.h" 2579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 2679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* 2779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * G E N E R A L S 2879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 2979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/ 3079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 3179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* 3279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * P I X E L F O R M A T G U I D E 3379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 3479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * The 'x' means 'DO NOT CARE' 3579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * The '*' means 'FIMC SPECIFIC' 3679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * For some fimc formats, we couldn't find equivalent format in the V4L2 FOURCC. 3779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 3879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * FIMC TYPE PLANES ORDER V4L2_PIX_FMT 3979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * --------------------------------------------------------- 4079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * RGB565 x x V4L2_PIX_FMT_RGB565 4179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * RGB888 x x V4L2_PIX_FMT_RGB24 4279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420 2 LSB_CBCR V4L2_PIX_FMT_NV12 4379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420 2 LSB_CRCB V4L2_PIX_FMT_NV21 4479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420 2 MSB_CBCR V4L2_PIX_FMT_NV21X* 4579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420 2 MSB_CRCB V4L2_PIX_FMT_NV12X* 4679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420 3 x V4L2_PIX_FMT_YUV420 4779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 1 YCBYCR V4L2_PIX_FMT_YUYV 4879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 1 YCRYCB V4L2_PIX_FMT_YVYU 4979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 1 CBYCRY V4L2_PIX_FMT_UYVY 5079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 1 CRYCBY V4L2_PIX_FMT_VYUY* 5179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 2 LSB_CBCR V4L2_PIX_FMT_NV16* 5279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 2 LSB_CRCB V4L2_PIX_FMT_NV61* 5379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 2 MSB_CBCR V4L2_PIX_FMT_NV16X* 5479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 2 MSB_CRCB V4L2_PIX_FMT_NV61X* 5579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422 3 x V4L2_PIX_FMT_YUV422P 5679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 5779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/ 5879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 5979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* 6079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * V 4 L 2 F I M C E X T E N S I O N S 6179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 6279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/ 6379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') 6479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 6579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* FOURCC for FIMC specific */ 6679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV12X v4l2_fourcc('N', '1', '2', 'X') 6779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV21X v4l2_fourcc('N', '2', '1', 'X') 6879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') 6979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') 7079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') 7179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV16X v4l2_fourcc('N', '1', '6', 'X') 7279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV61X v4l2_fourcc('N', '6', '1', 'X') 7379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 7479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* CID extensions */ 7579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_ROTATION (V4L2_CID_PRIVATE_BASE + 0) 7679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_OVLY_MODE (V4L2_CID_PRIVATE_BASE + 9) 7779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_GET_PHY_SRC_YADDR (V4L2_CID_PRIVATE_BASE + 12) 7879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_GET_PHY_SRC_CADDR (V4L2_CID_PRIVATE_BASE + 13) 7979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_RESERVED_MEM_BASE_ADDR (V4L2_CID_PRIVATE_BASE + 20) 8079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_FIMC_VERSION (V4L2_CID_PRIVATE_BASE + 21) 8179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 8279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* 8379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * U S E R D E F I N E D T Y P E S 8479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * 8579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/ 8679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define FIMC1_RESERVED_SIZE 32768 8779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 8879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinenum fimc_overlay_mode { 8979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin FIMC_OVLY_NOT_FIXED = 0x0, /* Overlay mode isn't fixed. */ 9079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin FIMC_OVLY_FIFO = 0x1, /* Non-destructive Overlay with FIFO */ 9179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin FIMC_OVLY_DMA_AUTO = 0x2, /* Non-destructive Overlay with DMA */ 9279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin FIMC_OVLY_DMA_MANUAL = 0x3, /* Non-destructive Overlay with DMA */ 9379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin FIMC_OVLY_NONE_SINGLE_BUF = 0x4, /* Destructive Overlay with DMA single destination buffer */ 9479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin FIMC_OVLY_NONE_MULTI_BUF = 0x5, /* Destructive Overlay with DMA multiple dstination buffer */ 9579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin}; 9679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 9779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef unsigned int dma_addr_t; 9879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 9979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct fimc_buf { 10079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin dma_addr_t base[3]; 10179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin size_t size[3]; 10279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int planes; 10379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin}; 10479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 10579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct fimc_buffer { 10679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin void *virt_addr; 10779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin void *phys_addr; 10879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin size_t length; 10979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin}; 11079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 11179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct yuv_fmt_list { 11279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin const char *name; 11379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin const char *desc; 11479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int fmt; 11579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int bpp; 11679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int planes; 11779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin}; 11879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 11979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct img_offset { 12079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int y_h; 12179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int y_v; 12279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int cb_h; 12379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int cb_v; 12479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int cr_h; 12579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int cr_v; 12679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin}; 12779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 12879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin//------------ STRUCT ---------------------------------------------------------// 12979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 13079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef struct 13179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin{ 13279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int full_width; // Source Image Full Width (Virtual screen size) 13379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int full_height; // Source Image Full Height (Virtual screen size) 13479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int start_x; // Source Image Start width offset 13579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int start_y; // Source Image Start height offset 13679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int width; // Source Image Width 13779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int height; // Source Image Height 13879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int buf_addr_phy_rgb_y; // Base Address of the Source Image (RGB or Y): Physical Address 13979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int buf_addr_phy_cb; // Base Address of the Source Image (CB Component) : Physical Address 14079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int buf_addr_phy_cr; // Base Address of the Source Image (CR Component) : Physical Address 14179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int color_space; // Color Space of the Source Image 14279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin unsigned int planes; // number of planes for the Image 14379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin} s5p_fimc_img_info; 14479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 14579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef struct 14679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin{ 14779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin s5p_fimc_img_info src; 14879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin s5p_fimc_img_info dst; 14979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin} s5p_fimc_params_t; 15079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 15179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef struct _s5p_fimc_t { 15279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int dev_fd; 15379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin struct fimc_buffer out_buf; 15479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 15579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin s5p_fimc_params_t params; 15679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 15779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin int use_ext_out_mem; 15879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin} s5p_fimc_t; 15979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin 16079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#endif 161