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