1 #include <linux/videodev2.h>
3 #include <ui/PixelFormat.h>
5 #include <exynos_format.h>
7 #include "hwjpeg-internal.h"
8 #include "hwjpeg-libcsc.h"
10 int V4L2FMT2HALFMT(int fmt
)
13 case V4L2_PIX_FMT_RGB32
:
14 return HAL_PIXEL_FORMAT_RGBA_8888
;
15 case V4L2_PIX_FMT_RGB24
:
16 return HAL_PIXEL_FORMAT_RGB_888
;
17 case V4L2_PIX_FMT_RGB565
:
18 return HAL_PIXEL_FORMAT_RGB_565
;
19 case V4L2_PIX_FMT_BGR32
:
20 return HAL_PIXEL_FORMAT_BGRA_8888
;
21 case V4L2_PIX_FMT_YVU420M
:
22 return HAL_PIXEL_FORMAT_EXYNOS_YV12_M
;
23 case V4L2_PIX_FMT_YUV420M
:
24 return HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_P_M
;
25 case V4L2_PIX_FMT_YVU420
:
26 return HAL_PIXEL_FORMAT_YV12
;
27 case V4L2_PIX_FMT_YUV420
:
28 return HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_P
;
29 case V4L2_PIX_FMT_NV16
:
30 return HAL_PIXEL_FORMAT_YCbCr_422_SP
;
31 case V4L2_PIX_FMT_NV12
:
32 return HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP
;
33 case V4L2_PIX_FMT_NV12M
:
34 return HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M
;
35 case V4L2_PIX_FMT_YUYV
:
36 return HAL_PIXEL_FORMAT_YCbCr_422_I
;
37 case V4L2_PIX_FMT_UYVY
:
38 return HAL_PIXEL_FORMAT_EXYNOS_CbYCrY_422_I
;
39 case V4L2_PIX_FMT_NV61
:
40 return HAL_PIXEL_FORMAT_EXYNOS_YCrCb_422_SP
;
41 case V4L2_PIX_FMT_NV21M
:
42 return HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M
;
43 case V4L2_PIX_FMT_NV21
:
44 return HAL_PIXEL_FORMAT_YCrCb_420_SP
;
45 case V4L2_PIX_FMT_NV12MT_16X16
:
46 return HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_TILED
;
47 case V4L2_PIX_FMT_YVYU
:
48 return HAL_PIXEL_FORMAT_EXYNOS_YCrCb_422_I
;
49 case V4L2_PIX_FMT_VYUY
:
50 return HAL_PIXEL_FORMAT_EXYNOS_CrYCbY_422_I
;
52 ALOGE("Unkown HAL format %d", fmt
);
58 #define CSC_ERR(ret) (ret != CSC_ErrorNone)
60 void CLibCSC::destroy()
63 CSC_ERRORCODE ret
= csc_deinit(m_hdlLibCSC
);
65 ALOGE("Failed to deinit LibCSC: %d", ret
);
70 bool CLibCSC::init(int devid
)
73 m_hdlLibCSC
= csc_init(CSC_METHOD_HW
);
75 ALOGE("Failed to create CSC handle");
81 ret
= csc_set_method(m_hdlLibCSC
, CSC_METHOD_HW
);
83 ALOGE("Failed to set CSC method to H/W");
87 ret
= csc_set_hw_property(m_hdlLibCSC
, CSC_HW_PROPERTY_FIXED_NODE
, CSC_HW_SC0
+ devid
);
89 ALOGE("Failed to set CSC H/W selection to Scaler%d", devid
);
96 bool CLibCSC::set_src_format(
99 unsigned int crop_left
,
100 unsigned int crop_top
,
101 unsigned int crop_width
,
102 unsigned int crop_height
,
103 unsigned int color_format
)
106 ret
= csc_set_src_format(
107 m_hdlLibCSC
, width
, height
,
108 crop_left
, crop_top
, crop_width
, crop_height
, color_format
,
111 ALOGE("Failed to set source format: %d", ret
);
118 bool CLibCSC::set_dst_format(
121 unsigned int crop_left
,
122 unsigned int crop_top
,
123 unsigned int crop_width
,
124 unsigned int crop_height
,
125 unsigned int color_format
)
128 ret
= csc_set_dst_format(
129 m_hdlLibCSC
, width
, height
,
130 crop_left
, crop_top
, crop_width
, crop_height
, color_format
,
133 ALOGE("Failed to set source format: %d", ret
);
140 bool CLibCSC::set_src_buffer(void *addrs
[CSC_MAX_PLANES
], int mem_type
)
143 ret
= csc_set_src_buffer(m_hdlLibCSC
, addrs
, mem_type
);
145 ALOGE("Failed to set source buffer: %d", ret
);
152 bool CLibCSC::set_dst_buffer(void *addrs
[CSC_MAX_PLANES
], int mem_type
)
155 ret
= csc_set_dst_buffer(m_hdlLibCSC
, addrs
, mem_type
);
157 ALOGE("Failed to set source buffer: %d", ret
);
164 bool CLibCSC::convert()
167 ret
= csc_convert(m_hdlLibCSC
);
169 ALOGE("Failed to convert(): %d", ret
);