📄 update_frames.c
字号:
cond422=((camera->misc_info.mode==MODE_320x240_YUV422)|| (camera->misc_info.mode==MODE_640x480_YUV422)|| (camera->misc_info.mode==MODE_800x600_YUV422)|| (camera->misc_info.mode==MODE_1024x768_YUV422)|| (camera->misc_info.mode==MODE_1280x960_YUV422)|| (camera->misc_info.mode==MODE_1600x1200_YUV422)); } else { cond16=(camera->format7_info.mode[camera->misc_info.mode-MODE_FORMAT7_MIN].color_coding_id==COLOR_FORMAT7_MONO16); cond8=(camera->format7_info.mode[camera->misc_info.mode-MODE_FORMAT7_MIN].color_coding_id==COLOR_FORMAT7_MONO8); cond422=(camera->format7_info.mode[camera->misc_info.mode-MODE_FORMAT7_MIN].color_coding_id==COLOR_FORMAT7_YUV422); } gtk_widget_set_sensitive(lookup_widget(main_window,"pattern_menu"),(cond8||cond16||cond422)); gtk_widget_set_sensitive(lookup_widget(main_window,"bayer_menu"),(cond8||cond16||cond422)); gtk_widget_set_sensitive(lookup_widget(main_window,"stereo_menu"),cond16||cond422); pthread_mutex_lock(&camera->uimutex); gtk_widget_set_sensitive(lookup_widget(main_window,"mono16_bpp"),cond16&& (camera->stereo==NO_STEREO_DECODING)&&(camera->bayer==NO_BAYER_DECODING)); gtk_widget_set_sensitive(lookup_widget(main_window,"label114"),cond16&& (camera->stereo==NO_STEREO_DECODING)&&(camera->bayer==NO_BAYER_DECODING)); pthread_mutex_unlock(&camera->uimutex); }voidUpdateServiceFrame(void){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (lookup_widget(main_window,"service_iso")), GetService(camera,SERVICE_ISO)!=NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (lookup_widget(main_window,"service_display")), GetService(camera,SERVICE_DISPLAY)!=NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (lookup_widget(main_window,"service_save")), GetService(camera,SERVICE_SAVE)!=NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (lookup_widget(main_window,"service_ftp")), GetService(camera,SERVICE_FTP)!=NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (lookup_widget(main_window,"service_v4l")), GetService(camera,SERVICE_V4L)!=NULL);}voidUpdateFormat7InfoFrame(void){ char *temp; Format7ModeInfo_t *mode; float bpp; int bytesize, grandtotal; temp=(char*)malloc(STRING_SIZE*sizeof(char)); if (camera->format7_info.edit_mode!=-1) { mode = &camera->format7_info.mode[camera->format7_info.edit_mode-MODE_FORMAT7_MIN]; switch (mode->color_coding_id) { case COLOR_FORMAT7_MONO8: bpp=1; break; case COLOR_FORMAT7_MONO16: bpp=2; break; case COLOR_FORMAT7_RGB8: bpp=3; break; case COLOR_FORMAT7_RGB16: bpp=6; break; case COLOR_FORMAT7_YUV444: bpp=3; break; case COLOR_FORMAT7_YUV422: bpp=2; break; case COLOR_FORMAT7_YUV411: bpp=1.5; break; default: bpp=1; MainError("Wrong format_7 color coding ID!"); break; } bytesize=(int) ((float)mode->size_x*(float)mode->size_y*bpp); /* // this appears to be meaningless as some cameras take padding into account if (bytesize!=mode->total_bytes) { fprintf(stderr,"bytesize: %d, total_bytes: %d\n",bytesize, (int)mode->total_bytes); MainStatus("The camera has a strange TOTAL_BYTES value."); } */ //fprintf(stderr,"total bytes: %d\n",mode->total_bytes); if (mode->bpp!=0) { // if there is packet padding, take it into account if (mode->total_bytes%mode->bpp!=0) { grandtotal=(mode->total_bytes/mode->bpp+1)*mode->bpp; } else { grandtotal=mode->total_bytes; } } else { grandtotal=0; MainError("BPP is zero! This should not happen."); } sprintf(temp," %d", bytesize); gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"format7_imagebytes"), ctxt.format7_imagebytes_ctxt, ctxt.format7_imagebytes_id); ctxt.format7_imagebytes_id=gtk_statusbar_push((GtkStatusbar*)lookup_widget(main_window,"format7_imagebytes"), ctxt.format7_imagebytes_ctxt,temp); sprintf(temp," %d", mode->size_x*mode->size_y); gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"format7_imagepixels"), ctxt.format7_imagepixels_ctxt, ctxt.format7_imagepixels_id); ctxt.format7_imagepixels_id=gtk_statusbar_push((GtkStatusbar*)lookup_widget(main_window,"format7_imagepixels"), ctxt.format7_imagepixels_ctxt,temp); sprintf(temp," %d", grandtotal); gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"format7_totalbytes"), ctxt.format7_totalbytes_ctxt, ctxt.format7_totalbytes_id); ctxt.format7_totalbytes_id=gtk_statusbar_push((GtkStatusbar*)lookup_widget(main_window,"format7_totalbytes"), ctxt.format7_totalbytes_ctxt,temp); sprintf(temp," %d", grandtotal - bytesize); gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"format7_padding"), ctxt.format7_padding_ctxt, ctxt.format7_padding_id); ctxt.format7_padding_id=gtk_statusbar_push((GtkStatusbar*)lookup_widget(main_window,"format7_padding"), ctxt.format7_padding_ctxt,temp); } free(temp);}voidUpdateBandwidthFrame(void){ camera_t* cam; unsigned int bandwidth; float *ports; float ratio; char* temp; int nports, i, truebps, theobps; chain_t* iso_service; GtkProgressBar *bar; temp=(char*)malloc(STRING_SIZE*sizeof(char)); // get the number of ports nports=businfo->port_num; ports=(float*)malloc(nports*sizeof(float)); for (i=0;i<nports;i++) ports[i]=0; cam=cameras; while(cam!=NULL) { if (dc1394_get_bandwidth_usage(cam->camera_info.handle, cam->camera_info.id, &bandwidth)!=DC1394_SUCCESS) { MainError("Could not get a camera bandwidth usage. Bus usage might be inaccurate."); } iso_service=GetService(cam,SERVICE_ISO); // if we are using format7 and there is a running ISO service, we can get a better estimate: if ((cam->misc_info.format==FORMAT_SCALABLE_IMAGE_SIZE)&&(iso_service!=NULL)){ //fprintf(stderr,"better estimate can be found\n"); // use the fractions of packets needed: theobps=8000*cam->format7_info.mode[cam->format7_info.edit_mode-MODE_FORMAT7_MIN].bpp; truebps=iso_service->fps*cam->format7_info.mode[cam->format7_info.edit_mode-MODE_FORMAT7_MIN].total_bytes; ratio=(float)truebps/(float)theobps; //fprintf(stderr,"truebps: %d, theobps: %d, ratio: %.2f\n",truebps, theobps, ratio); // apply only if the ratio is less than 0.95 and greater than 0 if ((ratio<.95)&&(ratio>0)) bandwidth=(int)((float)bandwidth*ratio); } // sum the values of the bandwidths ports[dc1394_get_camera_port(cam->camera_info.handle)]+=bandwidth; cam=cam->next; } for (i=0;i<nports;i++) { sprintf(temp,"bandwidth_bar%d",i); ports[i]=ports[i]/4915; if (ports[i]>1.0) ports[i]=1; //fprintf(stderr,"Cam bandwidth usage: %.1f%%\n",100*ports[i]); bar=GTK_PROGRESS_BAR(lookup_widget(main_window,temp)); gtk_progress_set_percentage(GTK_PROGRESS(bar),ports[i] ); } free(ports); free(temp); UpdateServiceTree();}voidUpdateServiceTree(void){ char **temp; int i; GtkCList *list; camera_t* cam; chain_t* service; char tmp_string[20]; list=(GtkCList*)(lookup_widget(main_window,"service_clist")); temp=(char**)malloc(3*sizeof(char*)); for (i=0;i<3;i++) { temp[i]=(char*)malloc(STRING_SIZE*sizeof(char)); } // freeze the clist gtk_clist_freeze(list); // clear the clist gtk_clist_clear(list); cam=cameras; while(cam!=NULL) { sprintf(temp[0],"%s",cam->prefs.name); sprintf(temp[1]," "); sprintf(temp[2]," "); gtk_clist_append (list, temp); for (i=SERVICE_ISO;i<=SERVICE_FTP;i++) { service=GetService(cam,i); if (service!=NULL) { if (service->fps_frames>0) { sprintf(tmp_string," %.3f",service->fps); sprintf(temp[1],"%.5f", service->fps); } else { sprintf(tmp_string," %.3f",fabs(0.0)); sprintf(temp[1],"%.5f", fabs(0.0)); } switch(i) { case SERVICE_ISO: sprintf(temp[0]," Receive"); if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_receive"), ctxt.fps_receive_ctxt, ctxt.fps_receive_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_receive"), ctxt.fps_receive_ctxt, tmp_string); } break; case SERVICE_DISPLAY: sprintf(temp[0]," Display"); if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_display"), ctxt.fps_display_ctxt, ctxt.fps_display_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_display"), ctxt.fps_display_ctxt, tmp_string); } break; case SERVICE_SAVE: sprintf(temp[0]," Save "); if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_save"), ctxt.fps_save_ctxt, ctxt.fps_save_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_save"), ctxt.fps_save_ctxt, tmp_string); } break; case SERVICE_V4L: sprintf(temp[0]," V4L "); if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_v4l"), ctxt.fps_v4l_ctxt, ctxt.fps_v4l_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_v4l"), ctxt.fps_v4l_ctxt, tmp_string); } break; case SERVICE_FTP: sprintf(temp[0]," FTP "); if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_ftp"), ctxt.fps_ftp_ctxt, ctxt.fps_ftp_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_ftp"), ctxt.fps_ftp_ctxt, tmp_string); } break; default: sprintf(temp[0],"!! Unknown service ID !!"); break; } pthread_mutex_lock(&service->mutex_data); service->prev_time=service->current_time; service->fps_frames=0; pthread_mutex_unlock(&service->mutex_data); sprintf(temp[2],"%llu", service->processed_frames); gtk_clist_append (list, temp); } else { switch(i) { case SERVICE_ISO: if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_receive"), ctxt.fps_receive_ctxt, ctxt.fps_receive_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_receive"), ctxt.fps_receive_ctxt, ""); } break; case SERVICE_DISPLAY: if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_display"), ctxt.fps_display_ctxt, ctxt.fps_display_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_display"), ctxt.fps_display_ctxt, ""); } break; case SERVICE_SAVE: if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_save"), ctxt.fps_save_ctxt, ctxt.fps_save_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_save"), ctxt.fps_save_ctxt, ""); } break; case SERVICE_V4L: if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_v4l"), ctxt.fps_v4l_ctxt, ctxt.fps_v4l_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_v4l"), ctxt.fps_v4l_ctxt, ""); } break; case SERVICE_FTP: if (cam==camera) { gtk_statusbar_remove((GtkStatusbar*)lookup_widget(main_window,"fps_ftp"), ctxt.fps_ftp_ctxt, ctxt.fps_ftp_id); ctxt.fps_receive_id=gtk_statusbar_push((GtkStatusbar*) lookup_widget(main_window,"fps_ftp"), ctxt.fps_ftp_ctxt,""); } break; default: sprintf(temp[0],"!! Unknown service ID !!"); break; } } } cam=cam->next; } //gtk_clist_set_column_width (list, 0, 200); //gtk_clist_set_column_width (list, 1, 100); // unfreeze the clist gtk_clist_thaw(list); for (i=0;i<3;i++) { free(temp[i]); } free(temp);}voidUpdatePrefsDisplayOverlayFrame(void){ //fprintf(stderr,"updated: %d %d\n",camera->prefs.overlay_pattern,camera->prefs.overlay_type); gtk_widget_set_sensitive(lookup_widget(main_window,"overlay_type_menu"), camera->prefs.overlay_pattern!=OVERLAY_PATTERN_OFF); gtk_widget_set_sensitive(lookup_widget(main_window,"overlay_color_picker"), (camera->prefs.overlay_pattern!=OVERLAY_PATTERN_OFF) && (camera->prefs.overlay_type==OVERLAY_TYPE_REPLACE)); gtk_widget_set_sensitive(lookup_widget(main_window,"overlay_file_entry"), (camera->prefs.overlay_pattern==OVERLAY_PATTERN_IMAGE));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -