⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update_frames.c

📁 Coriander is a GUI for controlling a Digital Camera (in the sense of the IIDC specs issued by the 1
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -