4 void intecept_frame(
int camera_id,
unsigned int cur_frame_seq,
unsigned char* p_buffer,
unsigned int size,
struct timeval *pt_camera_timeStamp);
11 #define MAX_SEQ_OFFSET 110000 // 3600 * 30 = 108000
17 #define SIMPLE_LOCK while(g_lock) { usleep(10); } g_lock = 1;
18 #define SIMPLE_UNLOCK g_lock = 0;
69 xu32 ui32_udpFrameSize = 0;
70 xu32 ui32_udpMaxBlockNum = 0;
93 #ifdef CANLAB_LOGGING_ENABLE
100 #else // #ifdef CANLAB_LOGGING_ENABLE
116 xu16 ui16_tmp_cam_id;
118 ui16_tmp_cam_id = (data->
idx & 0x6) | ((data->
idx & 0x1) ^ 1);
126 #endif // #ifdef CANLAB_LOGGING_ENABLE
133 buffer = gst_buffer_new_and_alloc (ui32_udpFrameSize);
134 gst_buffer_map (buffer, &map, GST_MAP_WRITE);
135 memcpy(map.data, &frame->
block, ui32_udpFrameSize);
136 gst_buffer_unmap (buffer, &map);
138 struct timeval tv_frame_pts;
141 GST_BUFFER_PTS(buffer) = GST_TIMEVAL_TO_TIME(tv_frame_pts);
142 gst_app_src_push_buffer (GST_APP_SRC (data->
up_appsrc), buffer);
160 GstFlowReturn ret = GST_FLOW_OK;
163 xu16 ui16_udpMaxBlockNum = 0;
164 xu32 ui32_udpLastBlockSize = 0;
180 sample = gst_app_sink_pull_sample (GST_APP_SINK (elt));
183 if(data->
skip_count < ((ui16_udpMaxBlockNum+1) * fps * 1))
186 gst_sample_unref (sample);
190 buffer = gst_sample_get_buffer (sample);
191 recv_len = gst_buffer_extract(buffer, 0, data->
recv,
sizeof(*data->
recv));
206 gst_sample_unref (sample);
216 gst_sample_unref (sample);
223 frame = &data->
frameX[now];
227 info->
block_id > ui16_udpMaxBlockNum
232 gst_sample_unref (sample);
237 if(info->
block_id == ui16_udpMaxBlockNum) {
264 #ifndef FIX_NOW_FRAME
283 gst_sample_unref (sample);
292 snprintf(name_app,
sizeof(name_app),
"app_%u", data->
idx);
294 switch (GST_MESSAGE_TYPE (message)) {
295 case GST_MESSAGE_EOS:
296 g_print (
"The appsink[%s] Finished playback\n", name_app);
299 case GST_MESSAGE_ERROR:
300 g_print (
"The appsink[%s] received error\n", name_app);
314 snprintf(name_app,
sizeof(name_app),
"app_%u", data->
idx);
316 switch (GST_MESSAGE_TYPE (message)) {
317 case GST_MESSAGE_EOS:
318 g_print (
"The appsrc[%s] got dry\n", name_app);
319 appsrc = gst_bin_get_by_name (GST_BIN (data->
appsrc), name_app);
320 gst_app_src_end_of_stream (GST_APP_SRC (appsrc));
321 gst_object_unref (appsrc);
323 case GST_MESSAGE_ERROR:
324 g_print (
"The appsrc[%s] received error\n", name_app);
341 xu32 image_width = 0;
342 xu32 image_height = 0;
358 snprintf(ip_address,
sizeof(ip_address),
"192.168.7.8");
363 snprintf(ip_address,
sizeof(ip_address),
"192.168.8.8");
368 snprintf(name_app,
sizeof(name_app),
"app_%u", data->
idx);
369 snprintf(buff,
sizeof(buff),
370 "udpsrc address=%s port=%u retrieve-sender-address=false buffer-size=%u "
371 " ! queue max-size-time=2000000000 max-size-buffers=2000000000 max-size-bytes=2000000000 "
372 " ! appsink name=%s",
378 data->
appsink = gst_parse_launch (buff, NULL);
380 g_print (
"Launch fail for port[%u]\n", port);
391 g_object_set (G_OBJECT (
gAppSink),
"emit-signals", TRUE,
"sync", FALSE, NULL);
396 snprintf(name_appsrc,
sizeof(name_appsrc),
"appsrc_%u", data->
idx);
401 snprintf(buff,
sizeof(buff),
"appsrc name=%s stream-type=\"stream\" is-live=1 do-timestamp=0 format=time "
402 " caps=\"video/x-raw,format=UYVY,width=%d,height=%d,pixel-aspect-ratio=1/1,interlace-mode=progressive,framerate=30/1\" "
403 " ! queue max-size-time=2000000000 max-size-buffers=2000000000 max-size-bytes=2000000000 "
404 "! videoscale method=0 n-thread=9 ! video/x-raw, width=480, height=270 "
405 "! videoconvert ! ximagesink sync=false async=false",
413 snprintf(buff,
sizeof(buff),
"appsrc name=%s stream-type=\"stream\" is-live=1 do-timestamp=0 format=time "
414 " caps=\"video/x-raw,format=UYVY,width=%d,height=%d,pixel-aspect-ratio=1/1,interlace-mode=progressive,framerate=30/1\" "
415 " ! queue max-size-time=2000000000 max-size-buffers=2000000000 max-size-bytes=2000000000 "
416 " ! videoconvert ! ximagesink sync=false async=false",
426 data->
appsrc = gst_parse_launch (buff, NULL);
427 if (data->
appsrc == NULL) {
428 g_print (
"Launch fail for port[%u]\n", port);
432 appSrcBus = gst_element_get_bus (data->
appsrc);
434 gst_object_unref (appSrcBus);
436 data->
up_appsrc = gst_bin_get_by_name (GST_BIN(data->
appsrc), name_appsrc);
437 g_object_set (data->
up_appsrc,
"format", GST_FORMAT_TIME, NULL);
450 GstMessage *msg = NULL;
459 fprintf(stderr,
"T_CB_APP is NULL.\n");
467 char renice_cmd[ 128 ];
469 sprintf (renice_cmd,
"renice -20 %d > /dev/null" , pid);
470 if(0 > system (renice_cmd)) {
472 return (
void *)&result;
476 gst_init (NULL,NULL);
482 if(pt_func_arg->
use_cam[idx] == 1)
489 if(pt_func_arg->
use_cam[idx] == 1)
518 if(pt_func_arg->
use_cam[idx] == 1)
523 gst_element_set_state (data->
appsrc, GST_STATE_PLAYING);
525 gst_element_set_state (data->
appsink, GST_STATE_PLAYING);
531 msg = gst_bus_timed_pop_filtered(
appSinkBus, GST_CLOCK_TIME_NONE, GstMessageType(GST_MESSAGE_EOS));
534 gst_message_unref(msg);
538 if(pt_func_arg->
use_cam[idx] == 1)
562 void intecept_frame(
int camera_id,
unsigned int cur_frame_seq,
unsigned char* p_buffer,
unsigned int size,
struct timeval *pt_camera_timeStamp)
584 pt_func_arg->
use_cam[0] = use_cam_0;
585 pt_func_arg->
use_cam[1] = use_cam_1;
586 pt_func_arg->
use_cam[2] = use_cam_2;
587 pt_func_arg->
use_cam[3] = use_cam_3;
593 printf(
"Fail to create thread !!! \n");
606 gst_element_post_message(
gAppSink, gst_message_new_eos(GST_OBJECT(
gAppSink)));
619 int clpe_getFrameAnyCam(
int *p_camera_id,
unsigned char **p_buffer,
unsigned int *p_size,
struct timeval *pt_camera_timeStamp)
645 int clpe_getFrameWithCamId(
int camera_id,
unsigned char **p_buffer,
unsigned int *p_size,
struct timeval *pt_camera_timeStamp)
671 #ifdef CANLAB_LOGGING_ENABLE
672 int clpe_getFrameCb(
unsigned int inst,
unsigned int seq,
unsigned char* buffer,
unsigned int size,
struct timeval* frame_us,
unsigned int dropped)
674 struct timeval tv_sub;
675 struct timeval cur_sub;
678 struct timeval curPcTime;
680 gettimeofday(&curPcTime, NULL);
685 localtime_r(&frame_us->tv_sec, <m_frame);
686 timersub(frame_us, &
frame_pre[inst], &tv_sub);
688 localtime_r(&curPcTime.tv_sec, <m_curPc);
689 timersub(&curPcTime, &
prePcTime[inst], &cur_sub);
692 printf(
"%u | %4u | " FORM_LTM " | %6lu |",
701 printf(
" " FORM_LTM " | %6lu | %u\n",
721 #endif //#ifdef CANLAB_LOGGING_ENABLE