1 #include "rk_vi_user_api2_stream_cfg.h"
2
3 //#include "../../RkStreamManager.h"
4 #include "Stream.h"
5 #include "RawStreamCapUnit.h"
6 #include "RawStreamProcUnit.h"
7 #include "MediaInfo.h"
8 #include "rk_aiq_types.h"
9 #include "uAPI2/rk_aiq_user_api2_sysctl.h"
10 #include "xcam_mutex.h"
11
12 using namespace XCam;
13 using namespace RkRawStream;
14
15 enum mipi_stream_idx {
16 MIPI_STREAM_IDX_0 = 1,
17 MIPI_STREAM_IDX_1 = 2,
18 MIPI_STREAM_IDX_2 = 4,
19 MIPI_STREAM_IDX_ALL = 7,
20 };
21
22 struct rkraw_vi_ctx_s {
23 Mutex _api_mutex;
24 class MediaInfo *_mMediaInfo;
25 rk_sensor_full_info_t *s_full_info;
26 class RawStreamCapUnit *_mRawCapUnit;
27 class RawStreamProcUnit *_mRawProcUnit;
28 };
29
rkrawstream_uapi_init_offline(const char * isp_vir,const char * real_sns)30 rkraw_vi_ctx_t *rkrawstream_uapi_init_offline(const char *isp_vir, const char *real_sns)
31 {
32 xcam_get_log_level();
33 rkraw_vi_ctx_t *ctx = new rkraw_vi_ctx_t();
34 ctx->_mMediaInfo = new MediaInfo();
35 ctx->_mMediaInfo->initCamHwInfos();
36 ctx->_mMediaInfo->offline(isp_vir, real_sns);
37 ctx->_mRawCapUnit = NULL;
38 ctx->_mRawProcUnit = NULL;
39 return ctx;
40 }
41
rkrawstream_uapi_init()42 rkraw_vi_ctx_t *rkrawstream_uapi_init()
43 {
44 xcam_get_log_level();
45 rkraw_vi_ctx_t *ctx = new rkraw_vi_ctx_t();
46 ctx->_mMediaInfo = new MediaInfo();
47 ctx->_mMediaInfo->initCamHwInfos();
48 ctx->_mRawCapUnit = NULL;
49 ctx->_mRawProcUnit = NULL;
50 return ctx;
51 }
52
rkrawstream_uapi_deinit(rkraw_vi_ctx_t * ctx)53 void rkrawstream_uapi_deinit(rkraw_vi_ctx_t *ctx)
54 {
55 {
56 SmartLock locker (ctx->_api_mutex);
57 if(ctx->_mRawCapUnit)
58 ctx->_mRawCapUnit->stop();
59 if(ctx->_mRawProcUnit)
60 ctx->_mRawProcUnit->stop();
61 delete ctx->_mRawCapUnit;
62 delete ctx->_mRawProcUnit;
63 delete ctx->_mMediaInfo;
64 }
65 delete ctx;
66 }
67
rkrawstream_uapi_parase_rkraw2(uint8_t * rawdata,rkrawstream_rkraw2_t * rkraw2)68 int rkrawstream_uapi_parase_rkraw2(uint8_t *rawdata, rkrawstream_rkraw2_t *rkraw2)
69 {
70 return _parse_rk_rawdata(rawdata, rkraw2);
71 }
72
73 // void rkraw_vi_uapi_get_mediainfo(rkraw_vi_ctx_t *ctx, rkraw_vi_sensor_info_t *info)
74 // {
75 // ctx->_mMediaInfo->getCamHwEntNames(info->ent_names);
76 // }
77
78 // int
79 // rkraw_vi_uapi_getStaticMetas(rkraw_vi_ctx_t* ctx, const char* sns_ent_name, rk_aiq_static_info_t* static_info)
80 // {
81 // if (!sns_ent_name || !static_info)
82 // return XCAM_RETURN_ERROR_FAILED;
83
84 // memcpy(static_info, ctx->_mMediaInfo->getStaticCamHwInfo(sns_ent_name), sizeof(rk_aiq_static_info_t));
85 // return 0;
86 // }
87
rkrawstream_vicap_init(rkraw_vi_ctx_t * ctx,rkraw_vi_init_params_t * p)88 int rkrawstream_vicap_init(rkraw_vi_ctx_t* ctx, rkraw_vi_init_params_t *p)
89 {
90 SmartLock locker (ctx->_api_mutex);
91 int ret = 0;
92 if(p->sns_ent_name){
93 LOGI_RKSTREAM("%s:use %s", __func__, p->sns_ent_name);
94 ctx->s_full_info = ctx->_mMediaInfo->getSensorFullInfo(p->sns_ent_name, 0);
95 if(ctx->s_full_info == NULL){
96 LOGE_RKSTREAM("can't find sensor %s", p->sns_ent_name);
97 return XCAM_RETURN_ERROR_SENSOR;
98 }
99 ctx->_mRawCapUnit = new RawStreamCapUnit(ctx->s_full_info);
100 }else{
101 LOGI_RKSTREAM("%s:use %s", __func__, p->dev0_name);
102 ctx->_mRawCapUnit = new RawStreamCapUnit(p->dev0_name, p->dev1_name, p->dev2_name);
103 }
104 return ret;
105 }
106
rkrawstream_vicap_prepare(rkraw_vi_ctx_t * ctx,rkraw_vi_prepare_params_t * p)107 int rkrawstream_vicap_prepare(rkraw_vi_ctx_t* ctx, rkraw_vi_prepare_params_t *p)
108 {
109 SmartLock locker (ctx->_api_mutex);
110 int ret = 0;
111 ctx->_mRawCapUnit->set_sensor_format(p->width, p->height, 0);
112 ctx->_mRawCapUnit->set_tx_format(p->width, p->height, p->pix_fmt, p->mem_mode);
113 if(p->hdr_mode == RK_AIQ_WORKING_MODE_NORMAL){
114 ctx->_mRawCapUnit->prepare(MIPI_STREAM_IDX_0, p->buf_memory_type, p->buf_cnt);
115 ctx->_mRawCapUnit->set_working_mode(RK_AIQ_WORKING_MODE_NORMAL);
116 ctx->_mRawCapUnit->set_sensor_mode(RK_AIQ_WORKING_MODE_NORMAL);
117 }else if(p->hdr_mode == RK_AIQ_WORKING_MODE_ISP_HDR2){
118
119 ctx->_mRawCapUnit->prepare(MIPI_STREAM_IDX_0 | MIPI_STREAM_IDX_1, p->buf_memory_type, p->buf_cnt);
120 ctx->_mRawCapUnit->set_working_mode(RK_AIQ_ISP_HDR_MODE_2_LINE_HDR);
121 ctx->_mRawCapUnit->set_sensor_mode(RK_AIQ_ISP_HDR_MODE_2_LINE_HDR);
122 }
123 return ret;
124 }
125
rkrawstream_vicap_start(rkraw_vi_ctx_t * ctx,rkraw_vi_on_frame_capture_callback cb)126 int rkrawstream_vicap_start(rkraw_vi_ctx_t* ctx, rkraw_vi_on_frame_capture_callback cb)
127 {
128 SmartLock locker (ctx->_api_mutex);
129 int ret = 0;
130 ctx->_mRawCapUnit->user_on_frame_capture_cb = cb;
131 ctx->_mRawCapUnit->start();
132 return ret;
133 }
134
rkrawstream_vicap_stop(rkraw_vi_ctx_t * ctx)135 int rkrawstream_vicap_stop(rkraw_vi_ctx_t* ctx)
136 {
137 SmartLock locker (ctx->_api_mutex);
138 int ret = 0;
139 ctx->_mRawCapUnit->stop();
140 return ret;
141 }
142
rkrawstream_vicap_streamoff(rkraw_vi_ctx_t * ctx)143 int rkrawstream_vicap_streamoff(rkraw_vi_ctx_t* ctx)
144 {
145 SmartLock locker (ctx->_api_mutex);
146 ctx->_mRawCapUnit->stop_device();
147 return 0;
148 }
149
rkrawstream_vicap_release_buffer(rkraw_vi_ctx_t * ctx)150 int rkrawstream_vicap_release_buffer(rkraw_vi_ctx_t* ctx)
151 {
152 SmartLock locker (ctx->_api_mutex);
153 ctx->_mRawCapUnit->release_buffer();
154 return 0;
155 }
156
rkrawstream_vicap_buf_take(rkraw_vi_ctx_t * ctx)157 void rkrawstream_vicap_buf_take(rkraw_vi_ctx_t* ctx)
158 {
159 ctx->_mRawCapUnit->user_takes_buf = true;
160 }
161
rkrawstream_vicap_buf_return(rkraw_vi_ctx_t * ctx,int dev_index)162 void rkrawstream_vicap_buf_return(rkraw_vi_ctx_t* ctx, int dev_index)
163 {
164 ctx->_mRawCapUnit->release_user_taked_buf(dev_index);
165 }
166
rkrawstream_vicap_setdmabuf(rkraw_vi_ctx_t * ctx,int dev_index,int buf_index,int fd)167 void rkrawstream_vicap_setdmabuf(rkraw_vi_ctx_t* ctx, int dev_index, int buf_index, int fd)
168 {
169 ctx->_mRawCapUnit->set_dma_buf(dev_index, buf_index, fd);
170 }
171
rkrawstream_readback_init(rkraw_vi_ctx_t * ctx,rkraw_vi_init_params_t * p)172 int rkrawstream_readback_init(rkraw_vi_ctx_t* ctx, rkraw_vi_init_params_t *p)
173 {
174 SmartLock locker (ctx->_api_mutex);
175 int ret = 0;
176 if(p->sns_ent_name){
177 ctx->s_full_info = ctx->_mMediaInfo->getSensorFullInfo(p->sns_ent_name, 0);
178 if(ctx->s_full_info == NULL){
179 LOGE_RKSTREAM("can't find sensor %s", p->sns_ent_name);
180 return XCAM_RETURN_ERROR_SENSOR;
181 }
182 ctx->_mRawProcUnit = new RawStreamProcUnit(ctx->s_full_info, p->use_offline);
183 }
184
185 return ret;
186 }
187
rkrawstream_readback_prepare(rkraw_vi_ctx_t * ctx,rkraw_vi_prepare_params_t * p)188 int rkrawstream_readback_prepare(rkraw_vi_ctx_t* ctx, rkraw_vi_prepare_params_t *p)
189 {
190 SmartLock locker (ctx->_api_mutex);
191 int ret = 0;
192 ctx->_mRawProcUnit->set_rx_format(p->width, p->height, p->pix_fmt, p->mem_mode);
193 if(p->hdr_mode == RK_AIQ_WORKING_MODE_NORMAL){
194 ctx->_mRawProcUnit->prepare(MIPI_STREAM_IDX_0, p->buf_memory_type, p->buf_cnt);
195 ctx->_mRawProcUnit->set_working_mode(RK_AIQ_WORKING_MODE_NORMAL);
196 }else if(p->hdr_mode == RK_AIQ_WORKING_MODE_ISP_HDR2){
197 ctx->_mRawProcUnit->prepare(MIPI_STREAM_IDX_0 | MIPI_STREAM_IDX_1, p->buf_memory_type, p->buf_cnt);
198 ctx->_mRawProcUnit->set_working_mode(RK_AIQ_ISP_HDR_MODE_2_LINE_HDR);
199 }
200 return ret;
201 }
202
rkrawstream_readback_start(rkraw_vi_ctx_t * ctx,rkraw_vi_on_isp_process_done_callback cb)203 int rkrawstream_readback_start(rkraw_vi_ctx_t* ctx, rkraw_vi_on_isp_process_done_callback cb)
204 {
205 SmartLock locker (ctx->_api_mutex);
206 int ret = 0;
207 ctx->_mRawProcUnit->user_isp_process_done_cb = cb;
208 ctx->_mRawProcUnit->start();
209 return ret;
210 }
211
rkrawstream_readback_stop(rkraw_vi_ctx_t * ctx)212 int rkrawstream_readback_stop(rkraw_vi_ctx_t* ctx)
213 {
214 SmartLock locker (ctx->_api_mutex);
215 int ret = 0;
216 ctx->_mRawProcUnit->stop();
217 return ret;
218 }
219
rkrawstream_readback_set_buffer(rkraw_vi_ctx_t * ctx,uint8_t * rkraw_data)220 int rkrawstream_readback_set_buffer(rkraw_vi_ctx_t* ctx, uint8_t *rkraw_data)
221 {
222 int ret = 0;
223 ctx->_mRawProcUnit->send_sync_buf2(rkraw_data);
224 return ret;
225 }
226
rkrawstream_readback_set_rkraw2(rkraw_vi_ctx_t * ctx,rkrawstream_rkraw2_t * rkraw2)227 int rkrawstream_readback_set_rkraw2(rkraw_vi_ctx_t* ctx, rkrawstream_rkraw2_t *rkraw2)
228 {
229 int ret = 0;
230 ctx->_mRawProcUnit->_send_sync_buf(rkraw2);
231 return ret;
232 }
233
rkrawstream_setup_pipline_fmt(rkraw_vi_ctx_t * ctx,int width,int height)234 int rkrawstream_setup_pipline_fmt(rkraw_vi_ctx_t* ctx, int width, int height)
235 {
236 int ret = 0;
237 ctx->_mRawProcUnit->setup_pipeline_fmt(width, height);
238 return ret;
239 }
240
241