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

📄 frontend.c

📁 LINUX下非常有名的视频采集和显示源代码,直接安装后可以使用,效果很好
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <getopt.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/mman.h>#include <fcntl.h>#include <pthread.h>#include <linux/types.h> #include <gtk/gtk.h>#include <glib.h>#include <linux/videodev.h>#include <png.h>#include "gqcam.h"#include "frontend.h"#include "preferences.h"#include "save.h"#include "color.h"#include "greyscale.h"#include "timer.h"void closedialog(GtkWidget *widget, GtkWidget *dialog){  gtk_widget_destroy(dialog);}void errordialog(char *message, struct Camera *camera){  GtkWidget *errordialog;  GtkWidget *button;  GtkWidget *label;    errordialog = gtk_dialog_new();  button = gtk_button_new_with_label("Oops...");  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(errordialog)->action_area), button, TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT(button), "clicked", (GtkSignalFunc) closedialog, errordialog);      gtk_widget_show (button);  label = gtk_label_new(message);  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(errordialog)->vbox), label, TRUE, TRUE, 8);  gtk_widget_show (label);    gtk_widget_show(errordialog);  return;}void setbrightness(GtkAdjustment *adj, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.brightness = (adj->value)*256;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void setwhite(GtkAdjustment *adj, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.whiteness = (adj->value)*256;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void setcontrast(GtkAdjustment *adj, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.contrast = (adj->value)*256;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void sethue(GtkAdjustment *adj, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.hue = (adj->value)*256;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void setcolor(GtkAdjustment *adj, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.colour = (adj->value)*256;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void setsizefull(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_win.width = camera->vid_caps.maxwidth;  camera->vid_win.height = camera->vid_caps.maxheight;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void setsizehalf(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_win.width = (camera->vid_caps.maxwidth)/2;  camera->vid_win.height = (camera->vid_caps.maxheight)/2;  camera->update_camera = 1;  clearimg(camera);  pthread_mutex_unlock(&camera->pref_mutex);}void setsizequarter(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_win.width = (camera->vid_caps.maxwidth)/4;  camera->vid_win.height = (camera->vid_caps.maxheight)/4;  camera->update_camera = 1;  clearimg(camera);  pthread_mutex_unlock(&camera->pref_mutex);}void setdepth4(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.depth = 4;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void setdepth6(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock(&camera->pref_mutex);  camera->vid_pic.depth = 6;  camera->update_camera = 1;  pthread_mutex_unlock(&camera->pref_mutex);}void stop_capture(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock( &camera->pref_mutex );  if( camera->dev ) {    camera->capture = 0;    close_cam(camera, 0);  }  pthread_mutex_unlock( &camera->pref_mutex );}void start_capture(GtkWidget *widget, struct Camera *camera){  pthread_mutex_lock( &camera->pref_mutex );  open_cam(camera);  get_cam_info(camera);  camera->capture = 1;  update_controls(camera);  if( !camera->frozen ){    clearimg(camera);  }  pthread_mutex_unlock( &camera->pref_mutex );}void en_dis_able(GtkWidget *disable, GtkWidget *enable){  /* k-l-u-d-g-e */  /* when you call this func w/ NULL, NULL it will go back to the orig state */  /* I don't know how to ask GTK for object refs, so I put in this hack -jackd */  static GtkWidget *a = NULL;  static GtkWidget *b = NULL;  if( a == NULL && b == NULL ) {    b = disable;    a = enable;  }  if( disable == NULL && enable == NULL ) {    gtk_widget_set_sensitive(a, FALSE);    gtk_widget_set_sensitive(b, TRUE);  }  else {    gtk_widget_set_sensitive(disable, FALSE);    gtk_widget_set_sensitive(enable, TRUE);  }}void camera_info(GtkWidget *widget, struct Camera *camera){  GtkWidget *dialog;  GtkWidget *textbox;  GtkWidget *button;  GtkWidget *hbox;  GtkWidget *vscrollbar;  char buff[80];    dialog = gtk_dialog_new();  gtk_window_set_title(GTK_WINDOW (dialog),"Gqcam - Camera Info");  textbox = gtk_text_new(NULL, NULL);  gtk_widget_set_usize(textbox, 400, 200);  button = gtk_button_new_with_label("Close");  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",			     GTK_SIGNAL_FUNC (gtk_widget_destroy), 			     GTK_OBJECT(dialog));  hbox = gtk_hbox_new(FALSE, 0);  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),		     hbox);  vscrollbar = gtk_vscrollbar_new (GTK_TEXT(textbox)->vadj);  gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),		     button);  gtk_container_add (GTK_CONTAINER (hbox),		     textbox);  gtk_container_add (GTK_CONTAINER(hbox), vscrollbar);  gtk_widget_show_all (dialog);  sprintf(buff, "Name: %s\n", camera->vid_caps.name);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Type: %i\n", camera->vid_caps.type);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  if (camera->vid_caps.type & VID_TYPE_CAPTURE) {    sprintf(buff, "\tCan capture\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);   }  if (camera->vid_caps.type & VID_TYPE_TUNER) {    sprintf(buff, "\tCan tune\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_TELETEXT) {    sprintf(buff, "\tDoes teletext\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_OVERLAY) {    sprintf(buff, "\tOverlay onto frame buffer\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_CHROMAKEY) {    sprintf(buff, "\tOverlay by chromakey\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_CLIPPING) {    sprintf(buff, "\tCan clip\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_FRAMERAM) {    sprintf(buff, "\tUses the frame buffer memory\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_SCALES) {    sprintf(buff, "\tScalable\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_MONOCHROME) {    sprintf(buff, "\tMonochrome only\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  if (camera->vid_caps.type & VID_TYPE_SUBCAPTURE) {    sprintf(buff, "\tCan capture subareas of the image\n");    gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  }  sprintf(buff, "Channels: %i\n", camera->vid_caps.channels);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Audios: %i\n", camera->vid_caps.audios);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Maxwidth: %i\n", camera->vid_caps.maxwidth);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Maxheight: %i\n", camera->vid_caps.maxheight);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Minwidth: %i\n", camera->vid_caps.minwidth);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Minheight: %i\n", camera->vid_caps.minheight);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "---------\n");  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);    sprintf(buff, "X: %i\n", camera->vid_win.x);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Y: %i\n", camera->vid_win.y);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Width: %i\n", camera->vid_win.width);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Height: %i\n", camera->vid_win.height);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Chromakey: %i\n", camera->vid_win.chromakey);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Flags: %i\n", camera->vid_win.flags);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "---------\n");  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);    sprintf(buff, "Brightness:\t%i (%i)\n", camera->vid_pic.brightness, camera->vid_pic.brightness/256);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Hue:\t\t%i (%i)\n", camera->vid_pic.hue, camera->vid_pic.hue/256);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Color:\t\t%i (%i)\n", camera->vid_pic.colour, camera->vid_pic.colour/256);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Contrast:\t%i (%i)\n", camera->vid_pic.contrast, camera->vid_pic.contrast/256);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Whiteness:\t%i (%i)\n", camera->vid_pic.whiteness, camera->vid_pic.whiteness/256);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Depth:\t\t%i\n", camera->vid_pic.depth);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  sprintf(buff, "Palette:\t%i\n", camera->vid_pic.palette);  gtk_text_insert(GTK_TEXT(textbox), NULL, NULL, NULL, buff, -1);  gtk_adjustment_set_value(GTK_ADJUSTMENT(GTK_TEXT(textbox)->vadj), 0);  //  print_cam_info(camera);}void about_dialog(GtkWidget *widget, struct Camera *camera){  GtkWidget *dialog, *label, *button;  char buff[80];  dialog = gtk_dialog_new();  sprintf(buff, "Gqcam version %s\n(C)2000 Cory Lueninghoener", VERSION);    label = gtk_label_new (buff);  button = gtk_button_new_with_label("Thanks, Cory!");       gtk_window_set_title(GTK_WINDOW (dialog),"Gqcam - About");  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",			     GTK_SIGNAL_FUNC (gtk_widget_destroy), 			     GTK_OBJECT(dialog));  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),		     button);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE, 10);    //gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),  //		     label);  gtk_widget_show_all (dialog);}/*void pref_dialog(GtkWidget *widget, struct Camera *camera){  errordialog("Preferences dialog is not implemented yet...", camera);}*/void open_dialog_ok(GtkWidget *widget, struct Camera *camera){  stop_capture( NULL, camera );  usleep(1);  clearimg(camera);  sprintf(camera->devname,"%s",gtk_file_selection_get_filename (GTK_FILE_SELECTION (widget->parent->parent->parent)));  gtk_widget_destroy(widget->parent->parent->parent);    start_capture(NULL, camera);  en_dis_able( NULL, NULL );}void open_dialog(GtkWidget *widget, struct Camera *camera){  GtkWidget *opendialog;    opendialog = gtk_file_selection_new ("Open Device");  gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (opendialog)->ok_button),		      "clicked", (GtkSignalFunc) open_dialog_ok, camera);    gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (opendialog)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (opendialog));    gtk_file_selection_set_filename(GTK_FILE_SELECTION(opendialog), camera->devname);    gtk_widget_show(opendialog);}/* void close_dialog(GtkWidget *widget, struct Camera *camera)   {   fprintf( stderr, "close_dialog calling stop_capture\n" );   stop_capture( NULL, camera );   usleep(1);   clearimg(camera);   }*/void update_controls(struct Camera *camera){  gtk_widget_destroy(camera->controltop);  if (camera->greyscale)    create_controls_greyscale(camera);  else    create_controls_color(camera);  if (camera->docked)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -