|
@@ -77,23 +77,25 @@ static int get_local_video_frame(video_frame** frame, int itype, Clibvideoqueue*
|
|
|
frm.data = tmp_frame_preview->data[0];
|
|
|
//Dbg("%s:%d, session->video_shm_q_preview = 0x%08x.", __FUNCTION__, __LINE__, local_video_queue);
|
|
|
BOOL result = local_video_queue->GetVideo(&frm, VIDEOQUEUE_FLAG_HORIZONTAL_FLIP);
|
|
|
- if (NULL != personimage && NULL != personmask)
|
|
|
- {
|
|
|
- IplImage* img = cvCreateImageHeader(cvSize(frm.width, frm.height), IPL_DEPTH_8U, 3);
|
|
|
- img->imageData = (char*)frm.data;
|
|
|
- if (frm.width != personimage->width) {
|
|
|
- IplImage* tmp = cvCreateImage(cvSize(frm.width, frm.height), IPL_DEPTH_8U, 3);
|
|
|
- IplImage* tmpmask = cvCreateImage(cvSize(frm.width, frm.height), IPL_DEPTH_8U, 1);
|
|
|
- cvResize(personimage, tmp);
|
|
|
- cvResize(personmask, tmpmask);
|
|
|
- cvAdd(img, tmp, img, tmpmask);
|
|
|
- cvReleaseImage(&tmp);
|
|
|
- cvReleaseImage(&tmpmask);
|
|
|
- }
|
|
|
- else {
|
|
|
- cvAdd(img, personimage, img, personmask);
|
|
|
+ if (result && 1 == itype) {
|
|
|
+ if (NULL != personimage && NULL != personmask)
|
|
|
+ {
|
|
|
+ IplImage* img = cvCreateImageHeader(cvSize(frm.width, frm.height), IPL_DEPTH_8U, 3);
|
|
|
+ img->imageData = (char*)frm.data;
|
|
|
+ if (frm.width != personimage->width) {
|
|
|
+ IplImage* tmp = cvCreateImage(cvSize(frm.width, frm.height), IPL_DEPTH_8U, 3);
|
|
|
+ IplImage* tmpmask = cvCreateImage(cvSize(frm.width, frm.height), IPL_DEPTH_8U, 1);
|
|
|
+ cvResize(personimage, tmp);
|
|
|
+ cvResize(personmask, tmpmask);
|
|
|
+ cvAdd(img, tmp, img, tmpmask);
|
|
|
+ cvReleaseImage(&tmp);
|
|
|
+ cvReleaseImage(&tmpmask);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ cvAdd(img, personimage, img, personmask);
|
|
|
+ }
|
|
|
+ cvReleaseImageHeader(&img);
|
|
|
}
|
|
|
- cvReleaseImageHeader(&img);
|
|
|
}
|
|
|
|
|
|
*frame = tmp_frame_preview;
|
|
@@ -163,7 +165,7 @@ void* rvc_videorender_func(void* arg)
|
|
|
tparam_remote.uheight = param->location_param.iremote_view_cy;
|
|
|
tparam_remote.ivideoformat = VIDEO_FORMAT_RGB24;
|
|
|
if (0 == param->premote_render->VideoRenderSetParam(&tparam_remote)) {
|
|
|
- //param->premote_render->ShowVideoWindow();
|
|
|
+ Dbg("%s:%d video render set param success.",__FUNCTION__, __LINE__);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
@@ -185,7 +187,8 @@ void* rvc_videorender_func(void* arg)
|
|
|
if (0 != sem_timedwait(¶m->ui_stop_sem, &ts) && (ETIMEDOUT == errno))
|
|
|
{
|
|
|
video_frame* local_video_frame = NULL;
|
|
|
- int iwindowstate = get_local_video_frame(&local_video_frame, 1, local_video_queue, personimage, personmask);
|
|
|
+ int iwindowstate = param->cb.on_window_type(param->cb.user_data);
|
|
|
+ get_local_video_frame(&local_video_frame, iwindowstate, local_video_queue, personimage, personmask);
|
|
|
|
|
|
if (NULL != local_video_frame) {
|
|
|
video_frame* localframe = NULL;
|
|
@@ -368,9 +371,7 @@ int rvc_start_video_render(rvc_video_render_t* prender, bool bremote, rvc_video_
|
|
|
int rvc_stop_video_render(rvc_video_render_t* prender)
|
|
|
{
|
|
|
sem_post(&prender->ui_stop_sem);
|
|
|
-
|
|
|
rvc_stop_remote_video_render(prender);
|
|
|
-
|
|
|
if (prender->ui_threadid > 0) {
|
|
|
if (0 == pthread_join(prender->ui_threadid, NULL)) {
|
|
|
Dbg("video render thread %u pthread join success.", prender->ui_threadid);
|
|
@@ -380,9 +381,7 @@ int rvc_stop_video_render(rvc_video_render_t* prender)
|
|
|
Dbg("video render thread pthread join error for %s.", strerror(errno));
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
Dbg("video render thread exit!");
|
|
|
-
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
|