xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/allwinner/camera/CameraUI/src/main_desktop.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "main_desktop.h"
2 #include "ui_main_desktop.h"
3 #include <QDesktopWidget>
4 #include "frmmessagebox.h"
5 #include "reverseline_setting.h"
6 #include "midwindow.h"
7 #include <dirent.h>
8 #include<iostream>
9 #include <QTime>
10 #include <QDebug>
11 
12 #include "AutoMount.h"//mod lss
13 #include "DvrRecordManager.h"
14 
15 using namespace std;
16 
17 QFileInfo fileInfo_to_show;
18 QFileInfo fileInfo_music_to_play;
19 int g_RecordStatus = 0;
20 dvr_factory **g_ppDvr = NULL;
21 
22 int g_iRecordTime = 1; //set record time
23 bool isTrue = true;
24 //read config.ini get resolution
25 int g_iCameraHeight = 0;
26 int g_iCameraWidth = 0;
27 //update voice value
28 int g_iNowVoiceValue = 50;
29 #if 0
30 extern int startA, startB, widthA, heightA;
31 #endif
32 int g_iRotateAngle = 15;
33 //read config.ini get settings
34 int open_recordVideo_front, open_recordVideo_rear;
35 int open_recordAudio_front, open_recordAudio_rear;
36 int open_reverseLine_front = 1, open_reverseLine_rear;
37 int open_adas_front, open_adas_rear;
38 main_desktop *g_pStaticMaindesktop = NULL;
39 extern ReverseLine_Setting *pStatic_reverseLine;
40 QString linux_usb_path = "/mnt/usb/sda4/"; //usb path init;
41 QString linux_sdcard_path;//sdcard
42 MidWindow *g_MidWindow = NULL;
43 SetFirst *g_pStaticSetfirst = NULL;
44 
45 #ifdef EVE_TEST
46 #include "EveHandle.h"
47 sp < EveHandle > pEveHandleThread;
48 #endif
49 
50 #if defined(os_test)
51 extern int is_dir_exist(const char *dir_path);
52 using namespace android;
usernotifyCallback(int32_t msgType,int32_t ext1,int32_t ext2,void * user)53 void usernotifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void* user)
54 {
55     LOGE("msgType =%d-----data=%p-----%d)", msgType, user);
56     RecordCamera *p_dvr = (RecordCamera*) user;
57 #ifdef CAMERA_TEST
58     if ((msgType & CAMERA_MSG_ERROR) == CAMERA_MSG_ERROR) {
59         LOGE("(msgType =CAMERA_MSG_ERROR)");
60     }
61     if ((msgType & CAMERA_MSG_DVR_NEW_FILE) == CAMERA_MSG_DVR_NEW_FILE) {
62         LOGE("(msgType =CAMERA_MSG_DVR_NEW_FILE camera %d idx =%d)", p_dvr->mCameraId, ext1);
63     }
64 
65     if ((msgType & CAMERA_MSG_DVR_STORE_ERR) == CAMERA_MSG_DVR_STORE_ERR) {
66         LOGE("msgType =CAMERA_MSG_DVR_STORE_ERR)");
67         if(p_dvr){
68             p_dvr->storage_state=0;
69             m_pDvrs[p_dev->mCameraId]->stopRecord();
70         }
71     }
72 #endif
73 }
userdataCallback(int32_t msgType,char * dataPtr,camera_frame_metadata_t * metadata,void * user)74 void userdataCallback(int32_t msgType, char* dataPtr, camera_frame_metadata_t *metadata, void* user)
75 {
76     dvr_factory *p_dvr = (dvr_factory *) user;
77     V4L2BUF_t *pv4l2_buf = (V4L2BUF_t *) dataPtr;
78 
79     if(CAMERA_MSG_PREVIEW_FRAME == msgType){
80         #ifdef EVE_TEST
81         if(0 == p_dvr->mCameraId){   //only use eve in camera0
82             dma_mem_des_t* pEveMem = pEveHandleThread->getEveAllocMem();
83             if(pEveMem->phy){
84                 pEveHandleThread->EveG2dScale((unsigned char *) pv4l2_buf->addrPhyY,pv4l2_buf->width, pv4l2_buf->height,
85                             (unsigned char *) pEveMem->phy, 640, 360);
86 
87                 pEveHandleThread->loadPhyAddr(pEveMem->phy);
88             }
89             pEveHandleThread->DrawDetectRect((char*)pv4l2_buf->addrVirY, (char*)(pv4l2_buf->addrVirY+1280*720), 1280, 720);
90 
91             pthread_mutex_lock(&pEveHandleThread->mEvehandleMutex);
92             pthread_cond_signal(&pEveHandleThread->mEvehandleCond);
93             pthread_mutex_unlock(&pEveHandleThread->mEvehandleMutex);
94         }
95         #endif
96     }
97 }
98 
userdataCallbackTimestamp(nsecs_t timestamp,int32_t msgType,char * dataPtr,void * user)99 void userdataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, char* dataPtr, void* user)
100 {
101     char *ptp = (char *)dataPtr;
102     VencInputBuffer *p = (VencInputBuffer *)(ptp + 4);
103     // memcpy(inputBuffer.pAddrVirY,(unsigned char*)p->pAddrVirY,encode_param.src_width*encode_param.src_height);
104     // memcpy(inputBuffer.pAddrVirC,(unsigned char*)p->pAddrVirY+encode_param.src_width*encode_param.src_height,encode_param.src_width*encode_param.src_height/2);
105 }
106 
usr_datacb(int32_t msgType,char * dataPtr,int dalen,void * user)107 status_t usr_datacb(int32_t msgType, char *dataPtr, int dalen, void *user)
108 {
109     return 0;
110 }
111 
RecordInit(dvr_factory * pdvr)112 int  RecordInit(dvr_factory *pdvr)
113 {
114 	int rt=0;
115 
116 	rt = pdvr->recordInit();
117 	if (0 != rt) {
118 		ALOGE("pdvr->recordInit error\n");
119 		return -1;
120 	}
121 	else {
122 		ALOGD("pdvr->recordInit success,CameraId:%d\n", pdvr->mCameraId);
123 	}
124 
125 	pdvr->startRecord();
126 
127 	return 0;
128 }
129 
130 #endif
131 
132 
main_desktop(QWidget * parent)133 main_desktop::main_desktop(QWidget *parent) :
134     IWidget(parent),
135     ui(new Ui::main_desktop)
136 {
137 	QTime time;
138 	time.start();
139 
140     //if start record when machine is start
141     //read config.ini
142     open_recordVideo_front = config_get_startup(0);
143     open_recordAudio_front = config_get_sound(0);
144     open_adas_front = config_get_adas(0);
145     open_reverseLine_front = 1;
146     g_iCameraWidth = config_get_weith(0);
147     g_iCameraHeight = config_get_heigth(0);
148     g_iRecordTime = config_get_cyctime(0);
149     qDebug() << "---------cameraHeight is:" << g_iCameraHeight << "cameraWidth is:" << g_iCameraWidth;
150     if(open_recordVideo_front == 1) {
151         isRecording = true;
152     } else {
153         isRecording = false;
154     }
155 
156     m_iCurCamera = 0 ;
157     m_bPreview = false;
158     //sdk_log_setlevel(6);
159 
160 	//preview for camera init
161 	int cameraId[MAX_TEST_CAMERA] = {0};
162 	for(int i = 0; i < MAX_TEST_CAMERA; i++)
163 	{
164 		cameraId[i] = i;
165 	}
166 
167 	for(int i=0;i<MAX_TEST_CAMERA;i++){
168 		m_pDvrs[i] = new dvr_factory(cameraId[i]);
169 	}
170 
171     g_ppDvr = m_pDvrs;
172 	for(int i=0;i<MAX_TEST_CAMERA;i++){
173 		int rt = m_pDvrs[i]->start();
174 		if (rt < 0) {
175 			ALOGE("dvrs[%d]->start() error\n",i);
176 		}
177 	}
178 
179     #ifdef EVE_TEST
180     pEveHandleThread = new EveHandle(1280,720);
181     pEveHandleThread->EveInit(640,360);
182     pEveHandleThread->EveG2dInit();
183     pEveHandleThread->EveAllocMem(640*360*3/2);
184     #endif
185 
186 
187 	#ifdef HAVAAUDIO
188 	//start audio capture thread
189 	sp < AudioCapThread >audiocap = new AudioCapThread();
190     #endif
191 	DvrRecordManagerInit();
192 	//only support six cameras to record at the same time
193 	int iRedVideo = 0;
194 	m_iVideoStateCfg[MAX_TEST_CAMERA];
195 	int iRedAudioState[MAX_TEST_CAMERA];
196 	memset(m_iRedCameraState, 0xff, sizeof(m_iRedCameraState));
197 	memset(m_iVideoStateCfg, 0x00, sizeof(m_iVideoStateCfg));
198 	memset(iRedAudioState, 0x00, sizeof(iRedAudioState));
199 	for(int iCnt = 0; iCnt < MAX_RED_VIDEOS; iCnt++)
200 	{
201 		m_iVideoStateCfg[iCnt] = config_get_startup(iCnt);
202 		m_iRedCameraState[iCnt] = (m_iVideoStateCfg[iCnt]==1)?1:0;
203 		iRedAudioState[iCnt] = config_get_sound(iCnt);
204 		printf("===g_iRedAudioState[%d]:%d,g_iRedVideoState[%d]:%d\n",iCnt,iRedAudioState[iCnt],iCnt,m_iVideoStateCfg[iCnt]);
205 	}
206 
207 	for(int i=0;i<MAX_RED_VIDEOS;i++){
208 	#ifdef HAVAAUDIO
209 		int hdl = audiocap->reqAudioSource(m_pDvrs[i]->__dvr_audio_data_cb_timestamp,(void *)m_pDvrs[i]);
210 		m_pDvrs[i]->setAudioOps(audiocap, hdl);
211     #endif
212 		m_pDvrs[i]->SetDataCB(usr_datacb, m_pDvrs[i]);
213 		m_pDvrs[i]->setCallbacks(usernotifyCallback, userdataCallback, userdataCallbackTimestamp, m_pDvrs[i]);
214 
215 		if(m_iVideoStateCfg[i] == 1)
216 		{
217 			int ret = RecordInit(m_pDvrs[i]);
218 			if(ret < 0){
219 				LOGE("error:RecordInit video%d failed",cameraId[i]);
220 			}
221 		}
222 	}
223 
224     AutoMountInit(m_pDvrs[0]);// only can regisister "ONLY ONE"  function
225 
226     int tvmode = config_get_tvout(TEST_CAMERA_ID);
227     printf("--------------tvmode =%d \r\n", tvmode);
228 	HwDisplay* mcd = HwDisplay::getInstance();
229     mcd->hwd_screen1_mode(tvmode);//0 disable ,1 tvout pal ;2 tvout ntsc;3 hdmi 1280x720;4 hdmi 1920x1080
230     printf("------------------------------------camera initial done\n");
231 
232     ui->setupUi(this);
233     g_pStaticMaindesktop = this;
234 
235     connect(g_MidWindow, SIGNAL(sdcard_delete()), this, SLOT(on_sdcard_delete()));
236     connect(g_MidWindow, SIGNAL(sdcard_insert()), this, SLOT(on_sdcard_insert()));
237     FormInCenter();
238     setAttribute(Qt::WA_TranslucentBackground, true);
239     QTimer *timer = new QTimer(this);
240     connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
241     timer->start(1000);
242     QFont ft;
243     ft.setPointSize(12);
244     ft.setBold(true);
245     ft.setFamily("Microft YaHei");
246     ui->time_Label->setFont(ft);
247     QPalette pa;
248     pa.setColor(QPalette::WindowText, Qt::white);
249     ui->time_Label->setPalette(pa);
250 //    ui->cameraView->setHidden(true);
251     m_bCameraState = true;
252 
253     setButtonVisible();
254     setMouseTracking(true);
255     mouseMoveTime = new QTimer();
256     connect(mouseMoveTime, SIGNAL(timeout()), this, SLOT(on_mouse_no_active_10_second()));
257     mouseMoveTime->start(8000);
258 
259 //    setProperty("noinput",true);
260 #if !defined(os_test)
261     open_reverseLine_front = 1;
262 #endif
263     reverseLinewidget = new reverseLineWidget();
264     if(open_reverseLine_front) {
265         qDebug() << "reversline--------------" << ui->widget->size();
266         reverseLinewidget->resize(990, 430);
267         reverseLinewidget->setParent(ui->widget);
268     }
269 
270     printf("main_desktop----------%p----\r\n", this);
271     printf("-------------------------------------construction function done\n");
272     g_MidWindow = new MidWindow();
273     m_pSettingDesktop = new SetFirst(this);
274     m_pSettingDesktop->FormInCenter();
275 }
276 
paintEvent(QPaintEvent * event)277 void main_desktop::paintEvent(QPaintEvent *event)
278 {
279     QPainter painter(this);
280     painter.fillRect(this->rect(), QColor(0, 0, 10, 90));
281 }
282 
startAllCameraWithPreview(int camera_no)283 int main_desktop::startAllCameraWithPreview(int camera_no /* nouse now*/)
284 {
285     struct view_info vv = {0, 0, 1024, 600};
286     //m_pDvrs[camera_no]->startPriview(vv);
287     m_iCurCamera = camera_no;
288 	qDebug() << "startAllCameraWithPreview camera"<<camera_no<<" start";
289 	m_pCamSelDlg = new CameraSelDlg(this);
290 	m_pRedselDlg = new RecordSelDlg(this);
291     return 0;
292 }
293 
CameraSwitch(int iCameraId)294 void main_desktop::CameraSwitch(int iCameraId)
295 {
296     if((m_iCurCamera != iCameraId) && (iCameraId != -1))
297 	{
298 		qDebug("===Video%d swtich to new Video%d", m_iCurCamera, iCameraId);
299 		m_pDvrs[m_iCurCamera]->stopPriview();
300 		struct view_info vv = {0, 0, 1024, 600};
301 		m_pDvrs[iCameraId]->startPriview(vv);
302 		m_iCurCamera = iCameraId;
303 	}
304 }
305 
RecordCamSel(int * piCameraState)306 void main_desktop::RecordCamSel(int *piCameraState)
307 {
308 	for(int iCnt = 0; iCnt < MAX_TEST_CAMERA; iCnt++)
309 	{
310 		//printf("===m_iRedCameraState:%d piCameraState:%d\n", m_iRedCameraState[iCnt],piCameraState[iCnt]);
311 		if((m_iRedCameraState[iCnt] != 0xff) && (piCameraState[iCnt] != 0xff)
312 			&& (m_iRedCameraState[iCnt] != piCameraState[iCnt]))
313 		{
314 			//	¼��״̬�л�
315 			if(piCameraState[iCnt] == 1)
316 			{
317 				if(m_iVideoStateCfg[iCnt] == 0)  //��״̬Ϊ����δ����¼��
318 				{
319 					int ret = RecordInit(m_pDvrs[iCnt]);
320 					if(ret < 0){
321 						LOGE("error:RecordInit video%d failed",iCnt);
322 					}
323 				}
324 				else
325 				{
326 					printf("===Camera%d startRecord\n", iCnt);
327 					m_pDvrs[iCnt]->startRecord();
328 				}
329 			}
330 			else if(piCameraState[iCnt] == 0)
331 			{
332 				printf("===Camera%d StopRecord\n", iCnt);
333 				m_pDvrs[iCnt]->stopRecord();
334 			}
335 			m_iRedCameraState[iCnt] = piCameraState[iCnt];
336 		}
337 	}
338 }
339 
~main_desktop()340 main_desktop::~main_desktop()
341 {
342 	F_LOG;
343     #ifdef EVE_TEST
344     if(pEveHandleThread != NULL){
345         pEveHandleThread->EveUnInit();
346         pEveHandleThread->EveG2dUnInit();
347         pEveHandleThread->EveFreeMem();
348         pEveHandleThread = NULL;
349     }
350     #endif
351 
352     delete ui;
353     delete m_pSettingDesktop;
354     delete reverseLinewidget;
355 	for(int iCnt = 0; iCnt < MAX_TEST_CAMERA; iCnt++)
356 	{
357 		m_pDvrs[iCnt]->uninitializeDev();
358 		delete m_pDvrs[iCnt];
359     }
360 }
361 
id()362 QString main_desktop::id()
363 {
364   return "cameraui";
365 }
on_sdcard_delete()366 void main_desktop::on_sdcard_delete()
367 {
368     qDebug() << "sdcard is out";
369 }
370 
on_sdcard_insert()371 void main_desktop::on_sdcard_insert()
372 {
373     qDebug() << "sdcard is insert";
374 }
375 
timerUpdate(void)376 void main_desktop::timerUpdate(void)
377 {
378     QDateTime current_time = QDateTime::currentDateTime();
379     QString time = current_time.toString("hh:mm:ss ddd");
380     ui->time_Label->setText(time);
381 }
382 
on_mouse_no_active_10_second()383 void main_desktop::on_mouse_no_active_10_second()
384 {
385     setButtonDisvisible();
386     ui->widget->move(QPoint(10, 71));
387 }
388 
on_mouse_active()389 void main_desktop::on_mouse_active()
390 {
391     mouseMoveTime->stop();
392     mouseMoveTime->start();
393 
394     setButtonVisible();
395 }
396 
mouseDoubleClickEvent(QMouseEvent *)397 void main_desktop::mouseDoubleClickEvent(QMouseEvent *)
398 {
399     on_mouse_active();
400 }
mouseMoveEvent(QMouseEvent *)401 void main_desktop::mouseMoveEvent(QMouseEvent *)
402 {
403     on_mouse_active();
404 }
mousePressEvent(QMouseEvent *)405 void main_desktop::mousePressEvent(QMouseEvent *)
406 {
407     on_mouse_active();
408 }
mouseReleaseEvent(QMouseEvent *)409 void main_desktop::mouseReleaseEvent(QMouseEvent *)
410 {
411     on_mouse_active();
412 }
on_main_desktop_disvisible()413 void main_desktop::on_main_desktop_disvisible()
414 {
415     qDebug() << "main_desktop will hidden";
416     m_pDvrs[m_iCurCamera]->stopPriview();
417 }
on_main_desktop_visible()418 void main_desktop::on_main_desktop_visible()
419 {
420     qDebug() << "camera preview restart";
421     struct view_info vv = {0, 0, 1024, 600};
422     m_pDvrs[m_iCurCamera]->startPriview(vv);
423 }
424 
on_cameraButton_clicked()425 void main_desktop::on_cameraButton_clicked()
426 {
427 	static int iCnt = 0;
428 	iCnt++;
429 	if(m_bCameraState)
430 	{
431 		qDebug()<<"Now take picture for camera"<<m_iCurCamera<<" "<< iCnt <<" times"<<endl;
432 		Mutex::Autolock locker(&mObjectLock);
433 		status_t rt = m_pDvrs[m_iCurCamera]->takePicture();
434         if(0 != rt) {
435             frmMessageBox *msg = new frmMessageBox;
436 			QString QStr = "Take Picture Fail for Video" + QString::number(m_iCurCamera, 10);
437             msg->SetMessage(QString(tr(QStr.toStdString().data())), 2);
438             QTimer::singleShot(2000, msg, SLOT(close()));
439             msg->exec();
440         } else {
441             frmMessageBox *msg = new frmMessageBox;
442 			QString QStr = "Take Picture success for Video" + QString::number(m_iCurCamera, 10);
443             msg->SetMessage(QString(tr(QStr.toStdString().data())), 0);
444             QTimer::singleShot(2000, msg, SLOT(close()));
445             msg->exec();
446         }
447 	}
448 }
449 
on_recordButton_clicked()450 void main_desktop::on_recordButton_clicked()
451 {
452     m_pRedselDlg->show();
453 	m_pRedselDlg->UpdateCurCamera(m_iCurCamera);
454     this->setHidden(true);
455 }
456 
FormInCenter()457 void main_desktop::FormInCenter()
458 {
459     QDesktopWidget w;
460     int deskWidth = w.width();
461     int deskHeight = w.height();
462     this->resize(deskWidth, deskHeight);
463 }
setButtonVisible()464 void main_desktop::setButtonVisible()
465 {
466     ui->widget_2->setVisible(true);
467 }
setButtonDisvisible()468 void main_desktop::setButtonDisvisible()
469 {
470     ui->widget_2->setVisible(false);
471 }
472 
on_camera_change_Button_clicked()473 void main_desktop::on_camera_change_Button_clicked()
474 {
475     m_pCamSelDlg->show();
476     this->setHidden(true);
477 }
478 
on_setFirstButton_clicked()479 void main_desktop::on_setFirstButton_clicked()
480 {
481     m_pSettingDesktop->show();
482 	m_pSettingDesktop->UpdateCurCameraState(m_iCurCamera);
483     this->setHidden(true);
484 }
485 
on_movieButton_clicked()486 void main_desktop::on_movieButton_clicked()
487 {
488     qDebug() << "open movie";
489     this->setHidden(true);
490 }
on_reverseLine_repaint()491 void main_desktop::on_reverseLine_repaint()
492 {
493     reverseLinewidget->update();
494 }
495 
496 
on_pushButtonHome_clicked()497 void main_desktop::on_pushButtonHome_clicked()
498 {
499     qDebug() << "open Launcher";
500 	system("echo 0,0 > /sys/class/disp/disp/attr/fb2ui");
501 	system("echo Launcher, > /sys/inputFocus/write");
502 }
503 
on_pushButton_clicked()504 void main_desktop::on_pushButton_clicked()
505 {
506     QString PreviewInfo;
507     if(m_bPreview)
508     {
509         PreviewInfo = "打开预览";
510         m_pDvrs[m_iCurCamera]->stopPriview();
511         m_bPreview = false;
512 
513     }
514     else
515     {
516         PreviewInfo = "关闭预览";
517         struct view_info vv = {0, 0, 1024, 600};
518         m_pDvrs[m_iCurCamera]->startPriview(vv);
519         m_bPreview = true;
520     }
521     ui->pushButton->setText(tr(PreviewInfo.toStdString().data()));
522 }
523