summaryrefslogtreecommitdiff
path: root/include/video/sprd_scale.h
blob: 22e7abeba5be4ad5643fdc29cb12d50d45dcff64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
 * Copyright (C) 2012 Spreadtrum Communications Inc.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
 #ifndef _SPRD_SCALE_H_
#define _SPRD_SCALE_H_

typedef enum {
	SCALE_DATA_YUV422 = 0,
	SCALE_DATA_YUV420,
	SCALE_DATA_YUV400,
	SCALE_DATA_YUV420_3FRAME,
	SCALE_DATA_RGB565,
	SCALE_DATA_RGB888,
	SCALE_DATA_MAX		
}SCALE_DATA_FORMAT_E;

typedef enum {
	SCALE_MODE_SCALE = 0,
	SCALE_MODE_REVIEW,
	SCALE_MODE_MAX
}SCALE_MODE_E;
typedef struct size_tag {
	uint32_t	w;
	uint32_t    h;
} SCALE_SIZE_T;

typedef struct rect_tag {
    uint32_t	x;
    uint32_t         y;
    uint32_t         w;
    uint32_t         h;
}SCALE_RECT_T;

typedef struct data_addr_tag {
	uint32_t	yaddr;
	uint32_t    uaddr;
	uint32_t    vaddr;
}SCALE_ADDRESS_T;

typedef enum { 
	SCALE_PATH_INPUT_FORMAT = 0,
	SCALE_PATH_INPUT_SIZE,
	SCALE_PATH_INPUT_RECT,
	SCALE_PATH_INPUT_ADDR,
	SCALE_PATH_OUTPUT_SIZE,
	SCALE_PATH_OUTPUT_FORMAT,
	SCALE_PATH_OUTPUT_ADDR,
	SCALE_PATH_OUTPUT_FRAME_FLAG,
	SCALE_PATH_SWAP_BUFF,
	SCALE_PATH_LINE_BUFF,
	SCALE_PATH_SUB_SAMPLE_EN,
	SCALE_PATH_SUB_SAMPLE_MOD,
	SCALE_PATH_SLICE_SCALE_EN,
	SCALE_PATH_SLICE_SCALE_HEIGHT,
	SCALE_PATH_DITHER_EN,
	SCALE_PATH_IS_IN_SCALE_RANGE,
	SCALE_PATH_IS_SCALE_EN,
	SCALE_PATH_SLICE_OUT_HEIGHT,
	SCALE_PATH_MODE,
	SCALE_PATH_INPUT_ENDIAN,
	SCALE_PATH_OUTPUT_ENDIAN,
	SCALE_PATH_ROT_MODE,
	SCALE_CFG_ID_E_MAX
} SCALE_CFG_ID_E;

typedef enum
{
	SCALE_ROTATION_0 = 0,
	SCALE_ROTATION_90,
	SCALE_ROTATION_180,
	SCALE_ROTATION_270,
	SCALE_ROTATION_MIRROR,
	SCALE_ROTATION_MAX
}SCALE_ROTATION_E;

typedef struct Parth2_config {
	SCALE_CFG_ID_E id;
	void *param;	
}SCALE_CONFIG_T;

typedef struct yuv422_yuv420 {
	uint32_t	width;
	uint32_t 	height;
	uint32_t 	src_addr;
	uint32_t 	dst_addr;
}SCALE_YUV422_YUV420_T;

typedef struct yuv420_endian	
{
	uint32_t	width;
	uint32_t	height;
	uint32_t 	src_addr;
	uint32_t 	dst_addr;
}SCALE_YUV420_ENDIAN_T;

typedef struct _isp_endian_t {
	uint32_t endian_y;
	uint32_t endian_uv;
}ISP_ENDIAN_T;

#define SCALE_IOC_MAGIC 'S'
#define SCALE_IOC_CONFIG _IOW(SCALE_IOC_MAGIC, 0, SCALE_CONFIG_T)
#define SCALE_IOC_DONE    _IOW(SCALE_IOC_MAGIC, 1, uint32_t)
#define SCALE_IOC_YUV422_YUV420 _IOW(SCALE_IOC_MAGIC, 2, SCALE_YUV422_YUV420_T)
#define SCALE_IOC_YUV420_ENDIAN _IOW(SCALE_IOC_MAGIC, 3, SCALE_YUV420_ENDIAN_T)

int _SCALE_DriverIOPathConfig(SCALE_CFG_ID_E id, void* param);
int _SCALE_DriverIODone(void);
int _SCALE_DriverIOInit(void);
int _SCALE_DriverIODeinit (void);
#endif