You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
478 lines
13 KiB
478 lines
13 KiB
/* |
|
* iav_vout_common.h |
|
* |
|
* History: |
|
* 2008/04/02 - [Oliver Li] created file |
|
* 2011/06/10 - [Jian Tang] modified 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_VOUT_COMMON_H__ |
|
#define __IAV_VOUT_COMMON_H__ |
|
|
|
/*! @file iav_vout_common.h |
|
* @brief This file defines video output configuration ioctl |
|
*/ |
|
|
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/*! @addtogroup iav-ioctl-vout-helper |
|
* @{ |
|
*/ |
|
#define VOUT_LCD 0 |
|
#define VOUT_TV 1 |
|
#define VOUT_NUM 2 |
|
|
|
#define VOUT_TYPE_LCD 0 |
|
#define VOUT_TYPE_HDMI 1 |
|
#define VOUT_TYPE_CVBS 2 |
|
#define VOUT_TYPE_MIPI_DSI 3 |
|
#define VOUT_TYPE_MIPI_CSI 4 |
|
#define VOUT_TYPE_FPD_LINK 5 |
|
#define VOUT_TYPE_SLVS 6 |
|
|
|
/* VOUT flip type, it's related to DSP command, so don't change the order */ |
|
enum { |
|
VOUT_FLIP_NO = 0, /*!< 0, No flip */ |
|
VOUT_FLIP_HV, /*!< 1, Horizontal and Vertical */ |
|
VOUT_FLIP_H, /*!< 2, Horizontal */ |
|
VOUT_FLIP_V, /*!< 3, Vertical */ |
|
}; |
|
|
|
/* HDMI color space, it's related to AVI InfoFrame, so don't change the order */ |
|
enum { |
|
VOUT_HDMI_CS_RGB = 0, /*!< 0 */ |
|
VOUT_HDMI_CS_YCBCR_422, /*!< 1 */ |
|
VOUT_HDMI_CS_YCBCR_444, /*!< 2 */ |
|
}; |
|
|
|
enum { |
|
VOUT_HDMI_AUTOSCAN = 0, /*!< 0 */ |
|
VOUT_HDMI_OVERSCAN, /*!< 1 */ |
|
VOUT_HDMI_UNDERSCAN, /*!< 2 */ |
|
}; |
|
/*! @} */ /* End of iav-ioctl-vout-helper */ |
|
|
|
|
|
/*! @addtogroup iav-ioctl-vout-struct |
|
* @{ |
|
*/ |
|
struct voutdev_format { |
|
unsigned int id; /*!< VOUT ID */ |
|
unsigned int type; /*!< sink type: CVBS, HDMI or LCD */ |
|
unsigned int mode; /*!< VOUT mode (resolution index) */ |
|
unsigned int interlaced;/*!< VOUT interlaced or progressive */ |
|
unsigned int fps; /*!< VOUT FPS */ |
|
unsigned int vout_append_enable : 1; /*!< VOUT append enable flag */ |
|
unsigned int reserved : 31; |
|
}; |
|
|
|
struct vout_params { |
|
unsigned int id; /*!< VOUT ID */ |
|
struct iav_rect vout_win; /*!< VOUT window size */ |
|
struct iav_rect video_win; /*!< VOUT video size */ |
|
struct iav_rect osd_win; /*!< VOUT OSD size */ |
|
struct iav_rect osd_rescaler_win; /*!< VOUT OSD rescale output size */ |
|
unsigned int fps; /*!< VOUT frame rate */ |
|
|
|
unsigned int video_rotate : 1; /*!< VOUT Video rotate */ |
|
unsigned int video_flip : 2; /*!< VOUT Video flip */ |
|
unsigned int osd_flip : 2; /*!< VOUT OSD flip */ |
|
unsigned int osd_rescaler_en : 1; /*!< VOUT OSD rescaler enable flag */ |
|
unsigned int video_enable : 1; /*!< VOUT Video enable flag */ |
|
unsigned int osd_enable : 1; /*!< VOUT OSD enable flag */ |
|
unsigned int own_mixer : 1; /*!< VOUT Own mixer flag */ |
|
unsigned int reserved : 23; |
|
}; |
|
|
|
struct vout_onoff { |
|
unsigned int id; /*!< VOUT ID */ |
|
unsigned int on; /*!< 0: off, 1: on */ |
|
}; |
|
/*! @} */ /* End of iav-ioctl-vout-struct */ |
|
/* ==========================================================================*/ |
|
|
|
/*! @addtogroup iav-ioctl-vout-helper |
|
* @{ |
|
*/ |
|
|
|
#define AMBA_VOUT_NAME_LENGTH (32) |
|
|
|
#define AMBA_VOUT_SOURCE_TYPE_DVE (1 << 0) |
|
#define AMBA_VOUT_SOURCE_TYPE_DIGITAL (1 << 1) |
|
#define AMBA_VOUT_SOURCE_TYPE_HDMI (1 << 2) |
|
#define AMBA_VOUT_SOURCE_TYPE_MIPI (1 << 3) |
|
|
|
#define AMBA_VOUT_SOURCE_STARTING_ID (0) |
|
#define AMBA_VOUT_SINK_STARTING_ID (0) |
|
|
|
enum amba_vout_display_device_type { |
|
AMBA_VOUT_DISPLAY_DEVICE_LCD = 0, |
|
AMBA_VOUT_DISPLAY_DEVICE_HDMI, |
|
}; |
|
|
|
enum amba_vout_output_port_id { |
|
AMBA_VOUT_OUTPUT_DVE = AMBA_VOUT_SOURCE_TYPE_DVE, |
|
AMBA_VOUT_OUTPUT_DIGITAL = AMBA_VOUT_SOURCE_TYPE_DIGITAL, |
|
AMBA_VOUT_OUTPUT_HDMI = AMBA_VOUT_SOURCE_TYPE_HDMI, |
|
AMBA_VOUT_OUTPUT_MIPI = AMBA_VOUT_SOURCE_TYPE_MIPI, |
|
}; |
|
|
|
enum amba_vout_sink_type { |
|
AMBA_VOUT_SINK_TYPE_AUTO = 0, |
|
AMBA_VOUT_SINK_TYPE_CVBS = ((0 << 16) | AMBA_VOUT_SOURCE_TYPE_DVE), |
|
AMBA_VOUT_SINK_TYPE_SVIDEO = ((1 << 16) | AMBA_VOUT_SOURCE_TYPE_DVE), |
|
AMBA_VOUT_SINK_TYPE_YPBPR = ((2 << 16) | AMBA_VOUT_SOURCE_TYPE_DVE), |
|
AMBA_VOUT_SINK_TYPE_HDMI = ((0 << 16) | AMBA_VOUT_SOURCE_TYPE_HDMI), |
|
AMBA_VOUT_SINK_TYPE_DIGITAL = ((0 << 16) | AMBA_VOUT_SOURCE_TYPE_DIGITAL), |
|
AMBA_VOUT_SINK_TYPE_MIPI = ((0 << 16) | AMBA_VOUT_SOURCE_TYPE_MIPI), |
|
}; |
|
|
|
enum amba_vout_display_input { |
|
AMBA_VOUT_INPUT_FROM_MIXER = 0, |
|
AMBA_VOUT_INPUT_FROM_SMEM, |
|
}; |
|
|
|
enum amba_vout_flip_info { |
|
AMBA_VOUT_FLIP_NORMAL = 0, |
|
AMBA_VOUT_FLIP_HV, |
|
AMBA_VOUT_FLIP_HORIZONTAL, |
|
AMBA_VOUT_FLIP_VERTICAL, |
|
}; |
|
|
|
enum amba_vout_rotate_info { |
|
AMBA_VOUT_ROTATE_NORMAL, |
|
AMBA_VOUT_ROTATE_90, |
|
}; |
|
|
|
enum amba_vout_tailored_info { |
|
AMBA_VOUT_OSD_NO_CSC = 0x01, /*!< No Software CSC */ |
|
AMBA_VOUT_OSD_AUTO_COPY = 0x02, /*!< Auto copy to other fb */ |
|
}; |
|
|
|
enum amba_vout_mixer_csc { |
|
AMBA_VOUT_MIXER_DISABLE = 0x00, /*!< No Mixer CSC */ |
|
AMBA_VOUT_MIXER_ENABLE_FOR_VIDEO = 0x01, /*!< Mixer CSC for video */ |
|
AMBA_VOUT_MIXER_ENABLE_FOR_OSD = 0x02, /*!< Mixer CSC for OSD */ |
|
}; |
|
|
|
enum amba_vout_hdmi_color_space { |
|
AMBA_VOUT_HDMI_CS_AUTO = 0, |
|
AMBA_VOUT_HDMI_CS_RGB, |
|
AMBA_VOUT_HDMI_CS_YCBCR_444, |
|
AMBA_VOUT_HDMI_CS_YCBCR_422, |
|
}; |
|
|
|
enum amba_vout_hdmi_overscan { |
|
AMBA_VOUT_HDMI_OVERSCAN_AUTO = 0, |
|
AMBA_VOUT_HDMI_NON_FORCE_OVERSCAN, |
|
AMBA_VOUT_HDMI_FORCE_OVERSCAN, |
|
}; |
|
|
|
enum amba_vout_sink_state { |
|
AMBA_VOUT_SINK_STATE_IDLE = 0, |
|
AMBA_VOUT_SINK_STATE_RUNNING, |
|
AMBA_VOUT_SINK_STATE_SUSPENDED, |
|
}; |
|
|
|
enum amba_vout_lcd_mode_info { |
|
AMBA_VOUT_LCD_MODE_DISABLE = 0, |
|
AMBA_VOUT_LCD_MODE_1COLOR_PER_DOT, |
|
AMBA_VOUT_LCD_MODE_3COLORS_PER_DOT, |
|
AMBA_VOUT_LCD_MODE_RGB565, |
|
AMBA_VOUT_LCD_MODE_3COLORS_DUMMY_PER_DOT, |
|
AMBA_VOUT_LCD_MODE_RGB888, |
|
}; |
|
|
|
enum amba_vout_lcd_seq_info { |
|
AMBA_VOUT_LCD_SEQ_R0_G1_B2 = 0, |
|
AMBA_VOUT_LCD_SEQ_R0_B1_G2, |
|
AMBA_VOUT_LCD_SEQ_G0_R1_B2, |
|
AMBA_VOUT_LCD_SEQ_G0_B1_R2, |
|
AMBA_VOUT_LCD_SEQ_B0_R1_G2, |
|
AMBA_VOUT_LCD_SEQ_B0_G1_R2, |
|
}; |
|
|
|
enum amba_vout_lcd_clk_edge_info { |
|
AMBA_VOUT_LCD_CLK_RISING_EDGE = 0, |
|
AMBA_VOUT_LCD_CLK_FALLING_EDGE, |
|
}; |
|
|
|
enum amba_vout_lcd_hvld_pol_info { |
|
AMBA_VOUT_LCD_HVLD_POL_LOW = 0, |
|
AMBA_VOUT_LCD_HVLD_POL_HIGH, |
|
}; |
|
|
|
enum amba_vout_lcd_model { |
|
AMBA_VOUT_LCD_MODEL_DIGITAL = 0, |
|
AMBA_VOUT_LCD_MODEL_AUO27, |
|
AMBA_VOUT_LCD_MODEL_P28K, |
|
AMBA_VOUT_LCD_MODEL_TPO489, |
|
AMBA_VOUT_LCD_MODEL_TPO648, |
|
AMBA_VOUT_LCD_MODEL_TD043, |
|
AMBA_VOUT_LCD_MODEL_WDF2440, |
|
AMBA_VOUT_LCD_MODEL_1P3831, |
|
AMBA_VOUT_LCD_MODEL_1P3828, |
|
AMBA_VOUT_LCD_MODEL_EJ080NA, |
|
AMBA_VOUT_LCD_MODEL_AT070TNA2, |
|
AMBA_VOUT_LCD_MODEL_E330QHD, |
|
AMBA_VOUT_LCD_MODEL_PPGA3, |
|
}; |
|
|
|
enum amba_vout_sink_plug { |
|
AMBA_VOUT_SINK_PLUGGED = 0, |
|
AMBA_VOUT_SINK_REMOVED, |
|
}; |
|
|
|
enum ddd_structure { |
|
DDD_FRAME_PACKING = 0, |
|
DDD_FIELD_ALTERNATIVE = 1, |
|
DDD_LINE_ALTERNATIVE = 2, |
|
DDD_SIDE_BY_SIDE_FULL = 3, |
|
DDD_L_DEPTH = 4, |
|
DDD_L_DEPTH_GRAPHICS_DEPTH = 5, |
|
DDD_TOP_AND_BOTTOM = 6, |
|
DDD_RESERVED = 7, |
|
|
|
DDD_SIDE_BY_SIDE_HALF = 8, |
|
|
|
DDD_UNSUPPORTED = 16, |
|
}; |
|
/*! @} */ /* End of iav-ioctl-vout-helper */ |
|
|
|
/*! @addtogroup iav-ioctl-vout-struct |
|
* @{ |
|
*/ |
|
struct amba_vout_bg_color_info { |
|
u8 y; |
|
u8 cb; |
|
u8 cr; |
|
}; |
|
|
|
struct amba_vout_video_size { |
|
u32 specified; |
|
u16 vout_width; /*!< Vout width */ |
|
u16 vout_height; /*!< Vout height */ |
|
u16 video_width; /*!< Video width */ |
|
u16 video_height; /*!< Video height */ |
|
}; |
|
|
|
struct amba_vout_video_offset { |
|
u32 specified; |
|
s16 offset_x; |
|
s16 offset_y; |
|
}; |
|
|
|
struct amba_vout_osd_size { |
|
u16 width; |
|
u16 height; |
|
}; |
|
|
|
struct amba_vout_osd_rescale { |
|
u32 enable; |
|
u16 width; |
|
u16 height; |
|
}; |
|
|
|
struct amba_vout_osd_offset { |
|
u32 specified; |
|
s16 offset_x; |
|
s16 offset_y; |
|
}; |
|
|
|
struct amba_vout_lcd_info { |
|
enum amba_vout_lcd_mode_info mode; |
|
enum amba_vout_lcd_seq_info seqt; |
|
enum amba_vout_lcd_seq_info seqb; |
|
enum amba_vout_lcd_clk_edge_info dclk_edge; |
|
enum amba_vout_lcd_hvld_pol_info hvld_pol; |
|
u32 dclk_freq_hz; /*!< PLL_CLK_XXX */ |
|
enum amba_vout_lcd_model model; |
|
}; |
|
/*! @} */ /* End of iav-ioctl-vout-struct */ |
|
|
|
/*! @addtogroup iav-ioctl-vout-helper */ |
|
typedef enum { |
|
COLORIMETRY_NO_DATA = 0, |
|
COLORIMETRY_ITU601 = 1, |
|
COLORIMETRY_ITU709 = 2, |
|
COLORIMETRY_EXTENDED = 3, |
|
} colorimetry_t; |
|
|
|
/*! @addtogroup iav-ioctl-vout-struct |
|
* @{ |
|
*/ |
|
typedef struct { |
|
enum amba_video_mode vmode; |
|
char name[32]; |
|
|
|
u32 pixel_clock; /*!< kHz */ |
|
|
|
u16 hsync_offset; /*!< pixels */ |
|
u16 hsync_width; /*!< pixels */ |
|
u16 h_blanking; /*!< pixels */ |
|
u16 h_active; /*!< pixels */ |
|
|
|
u16 vsync_offset; /*!< lines */ |
|
u16 vsync_width; /*!< lines */ |
|
u16 v_blanking; /*!< lines */ |
|
u16 v_active; /*!< lines */ |
|
|
|
u8 interlace; /*!< 1: Interlace; 0: Progressive */ |
|
u8 hsync_polarity; /*!< 1: Positive; 0: Negative */ |
|
u8 vsync_polarity; /*!< 1: Positive; 0: Negative */ |
|
|
|
u8 pixel_repetition; /*!< repetition times */ |
|
u32 aspect_ratio; /*!< 16:9, 4:3, ... */ |
|
colorimetry_t colorimetry; /*!< ITU601, ITU709 */ |
|
} amba_hdmi_video_timing_t; |
|
|
|
|
|
struct amba_video_sink_mode { |
|
/* Sink */ |
|
int id; /*!< Sink ID */ |
|
u32 mode; /*!< enum amba_video_mode */ |
|
u32 ratio; /*!< AMBA_VIDEO_RATIO */ |
|
u32 bits; /*!< AMBA_VIDEO_BITS */ |
|
u32 type; /*!< AMBA_VIDEO_TYPE */ |
|
u32 format; /*!< AMBA_VIDEO_FORMAT */ |
|
u32 frame_rate; /*!< AMBA_VIDEO_FPS */ |
|
int csc_en; /*!< enable csc or not */ |
|
struct amba_vout_bg_color_info bg_color; |
|
enum amba_vout_display_input display_input; /*!< input from SMEM or Mixer */ |
|
enum amba_vout_sink_type sink_type; |
|
enum amba_vout_mixer_csc mixer_csc; |
|
|
|
/* Video */ |
|
int video_en; /*!< enable video or not */ |
|
struct amba_vout_video_size video_size; /*!< video size */ |
|
struct amba_vout_video_offset video_offset; /*!< video offset */ |
|
enum amba_vout_flip_info video_flip; /*!< flip */ |
|
enum amba_vout_rotate_info video_rotate; /*!< rotate */ |
|
|
|
/* OSD */ |
|
int fb_id; /*!< frame buffer id */ |
|
struct amba_vout_osd_size osd_size; /*!< OSD size */ |
|
struct amba_vout_osd_rescale osd_rescale; /*!< OSD rescale */ |
|
struct amba_vout_osd_offset osd_offset; /*!< OSD offset */ |
|
enum amba_vout_flip_info osd_flip; /*!< flip */ |
|
enum amba_vout_rotate_info osd_rotate; /*!< rotate */ |
|
enum amba_vout_tailored_info osd_tailor; /*!< no csc, auto copy */ |
|
|
|
/* Misc */ |
|
u32 direct_to_dsp; /*!< bypass iav */ |
|
struct amba_vout_lcd_info lcd_cfg; /*!< LCD only */ |
|
enum amba_vout_hdmi_color_space hdmi_color_space;/*!< HDMI only */ |
|
enum ddd_structure hdmi_3d_structure;/*!< HDMI only */ |
|
enum amba_vout_hdmi_overscan hdmi_overscan; /*!< HDMI only */ |
|
const amba_hdmi_video_timing_t *hdmi_displayer_timing; /*!< HDMI only */ |
|
}; |
|
|
|
struct amba_vout_sink_info { |
|
int id; /*!< Sink ID */ |
|
int source_id; |
|
char name[AMBA_VOUT_NAME_LENGTH]; |
|
enum amba_vout_sink_type sink_type; |
|
struct amba_video_sink_mode sink_mode; |
|
enum amba_vout_sink_state state; |
|
enum amba_vout_sink_plug hdmi_plug; |
|
enum amba_video_mode hdmi_modes[32]; |
|
enum amba_video_mode hdmi_native_mode; |
|
u16 hdmi_native_width; |
|
u16 hdmi_native_height; |
|
enum amba_vout_hdmi_overscan hdmi_overscan; |
|
|
|
}; |
|
|
|
typedef struct iav_vout_fb_sel_s { |
|
int vout_id; |
|
int fb_id; |
|
} iav_vout_fb_sel_t; |
|
|
|
typedef struct iav_vout_enable_video_s { |
|
int vout_id; |
|
int video_en; |
|
} iav_vout_enable_video_t; |
|
|
|
typedef struct iav_vout_flip_video_s { |
|
int vout_id; |
|
int flip; |
|
} iav_vout_flip_video_t; |
|
|
|
typedef struct iav_vout_rotate_video_s { |
|
int vout_id; |
|
int rotate; |
|
} iav_vout_rotate_video_t; |
|
|
|
typedef struct iav_vout_enable_csc_s { |
|
int vout_id; |
|
int csc_en; |
|
} iav_vout_enable_csc_t; |
|
|
|
typedef struct iav_vout_change_video_size_s { |
|
int vout_id; |
|
int width; |
|
int height; |
|
} iav_vout_change_video_size_t; |
|
|
|
typedef struct iav_vout_change_video_offset_s { |
|
int vout_id; |
|
int specified; |
|
int offset_x; |
|
int offset_y; |
|
} iav_vout_change_video_offset_t; |
|
|
|
typedef struct iav_vout_flip_osd_s { |
|
int vout_id; |
|
int flip; |
|
} iav_vout_flip_osd_t; |
|
|
|
typedef struct iav_vout_enable_osd_rescaler_s { |
|
int vout_id; |
|
int enable; |
|
int width; |
|
int height; |
|
} iav_vout_enable_osd_rescaler_t; |
|
|
|
typedef struct iav_vout_change_osd_offset_s { |
|
int vout_id; |
|
int specified; |
|
int offset_x; |
|
int offset_y; |
|
} iav_vout_change_osd_offset_t; |
|
/*! @} */ /* End of iav-ioctl-vout-struct */ |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif // __IAV_IOCTL_ARCH_H__ |
|
|
|
|
|
|