|
@@ -1161,6 +1161,22 @@ static void opt_cap_on_frame(void *user_data, video_frame *frame)
|
|
//}
|
|
//}
|
|
|
|
|
|
video_frame_free(&rtp_frame);
|
|
video_frame_free(&rtp_frame);
|
|
|
|
+
|
|
|
|
+ // preview
|
|
|
|
+ {
|
|
|
|
+ video_frame preview_frame;
|
|
|
|
+ video_frame_alloc(REC_COMMON_VIDEO_PREVIEW_HEIGHT, REC_COMMON_VIDEO_PREVIEW_WIDTH, VIDEO_FORMAT_RGB24, &preview_frame);
|
|
|
|
+ uint8_t* src_data[4] = { frame->data[0] + frame->linesize[0] * 80, 0, 0, 0 };
|
|
|
|
+ sws_scale(video_cap->preview_sws_ctx, src_data, frame->linesize, 0, REC_COMMON_VIDEO_SNAPSHOT_PREVIEW_WIDTH, preview_frame.data, preview_frame.linesize);
|
|
|
|
+ video_shm_enqueue(video_cap->preview_shm_queue, &preview_frame, 1, video_cap->frame_id);
|
|
|
|
+
|
|
|
|
+ //static int ipreview_shm_queue = 0;
|
|
|
|
+ //char strname[MAX_PATH] = { 0 };
|
|
|
|
+ //snprintf(strname, MAX_PATH, "opt_preview_shm_queue_%d.bmp", ipreview_shm_queue++);
|
|
|
|
+ //video_frame_save_bmpfile(strname, &preview_frame);
|
|
|
|
+
|
|
|
|
+ video_frame_free(&preview_frame);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef RVC_OS_WIN
|
|
#ifdef RVC_OS_WIN
|
|
@@ -1208,6 +1224,14 @@ static video_capture_t *video_capture_create(capture_t *cap, int camera_type)
|
|
REC_COMMON_VIDEO_RTP_OPT_HEIGHT,
|
|
REC_COMMON_VIDEO_RTP_OPT_HEIGHT,
|
|
AV_PIX_FMT_BGR24,
|
|
AV_PIX_FMT_BGR24,
|
|
SWS_POINT, NULL, NULL, NULL);
|
|
SWS_POINT, NULL, NULL, NULL);
|
|
|
|
+ video_cap->preview_shm_queue = new Clibvideoqueue(REC_COMMON_VIDEO_OPT_SHM_PREVIEW_QUEUE);
|
|
|
|
+ video_cap->preview_sws_ctx = sws_getContext(REC_COMMON_VIDEO_SNAPSHOT_PREVIEW_HEIGHT,
|
|
|
|
+ REC_COMMON_VIDEO_SNAPSHOT_PREVIEW_WIDTH,
|
|
|
|
+ AV_PIX_FMT_BGR24,
|
|
|
|
+ REC_COMMON_VIDEO_PREVIEW_HEIGHT,
|
|
|
|
+ REC_COMMON_VIDEO_PREVIEW_WIDTH,
|
|
|
|
+ AV_PIX_FMT_BGR24,
|
|
|
|
+ SWS_FAST_BILINEAR, NULL, NULL, NULL);
|
|
//video_cap->preview_shm_queue = NULL;
|
|
//video_cap->preview_shm_queue = NULL;
|
|
//video_cap->preview_sws_ctx = NULL;
|
|
//video_cap->preview_sws_ctx = NULL;
|
|
}
|
|
}
|