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