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

📄 dsdemo.c

📁 海康威视视频采集卡linux开发包4.22版
💻 C
📖 第 1 页 / 共 5 页
字号:
	
	gdk_window_get_pointer(w_full_area->window, &x, &y, NULL);
	x += full_win.x;
	y += full_win.y;

	for(i = 0; i< totalport; i++)	
	{
		if(PtInRect(dstRect[i], x, y))
		{
			port = i;
			break;
		}
	}
	return port;
}

int click2(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
	int port, i;
	
	if(!GTK_TOGGLE_BUTTON(w_preview)->active)
		return 0;
	
	port = GetPort();
	if(port >= 0)
	{
		selectport = port;
		if(strlen(set_bit_rate_str[selectport]) == 0)
			gtk_entry_set_text(GTK_ENTRY(w_set_bit_rate), "0");
		else
			gtk_entry_set_text(GTK_ENTRY(w_set_bit_rate), set_bit_rate_str[selectport]);
	}

	/* button press twice */	
	if(event->type  != GDK_2BUTTON_PRESS/*5*/)
	{
		if(port < 0)
			return -1;
		if(GTK_TOGGLE_BUTTON(w_audio_preview)->active)
		{
			/* add at 2002.5.14 for audio preview */
			SetAudioPreview(ChannelHandle[audiopreviewport], 0); /* stop old port audio preview */
			audiopreviewport = port;
			SetAudioPreview(ChannelHandle[audiopreviewport], 1); /* start new port audio preview */
		}
		return (TRUE);
	}
										
#ifdef PREVIEWOPEN
	if(clickflag)
	{
		if(port < 0)
			return TRUE;
		for(i = 0; i< totalport; i++)	
		{
			bPreviewOpen[i] = 0;
#ifndef	USE_PREVIEW_TIMER
			sem_post(previewconf[i].SyncSem);   /* yxq add at 2005.9.7 */
			bPreviewThreadRun[i] = 3;
			while(bPreviewThreadRun[i] == 3)
                                usleep(100);
#endif
			if(StopVideoPreview(ChannelHandle[i]) < 0)
				printf("StoptVideoPreview(channel %d) failed\n", i);
			if(pOverlaySurface[i]!=NULL)
			{
				SDL_FreeYUVOverlay(pOverlaySurface[i]);
				pOverlaySurface[i] = NULL;
			}
			
		}
		clickport = port;
		previewconf[port].w = full_rect.w;
		previewconf[port].h = full_rect.h;
		if(StartVideoPreview(ChannelHandle[port], &previewconf[port], useSyncSem) < 0)
			printf("start video preview(port %d) failed\n", port);
		pOverlaySurface[port] = SDL_CreateYUVOverlay(previewconf[port].w, previewconf[port].h, SDL_YV12_OVERLAY, pOverlayScreen);
		if(pOverlaySurface[port] == NULL)
		{
			fprintf(stderr,"the SDL overlay surface create failed!\n");
			return 0;
		}
		memcpy(&tmpRect, &dstRect[port], sizeof(SDL_Rect));
		memcpy(&dstRect[port], &full_rect, sizeof(SDL_Rect));
		
		bPreviewOpen[port] = 1;
		full_win_flag = 1;
	}
	else 
	{
		bPreviewOpen[clickport] = 0;
#ifndef	USE_PREVIEW_TIMER
		sem_post(previewconf[clickport].SyncSem);
		bPreviewThreadRun[clickport] = 3;
		while(bPreviewThreadRun[clickport] == 3)
                      usleep(100);
#endif
		//GdkRectangle GdkRect;
		StopVideoPreview(ChannelHandle[clickport]);
		if(pOverlaySurface[clickport]!=NULL)
		{
			SDL_FreeYUVOverlay(pOverlaySurface[clickport]);
			pOverlaySurface[clickport] = NULL;
		}
		memcpy(&dstRect[clickport], &tmpRect, sizeof(SDL_Rect));
		/* generate expose event */
		gdk_window_hide(w_full_area->window);
		usleep(1000);
		gdk_window_show(w_full_area->window);
		
		gdk_window_clear(w_full_area->window);
		for(i = 0; i < totalport; i++){
			previewconf[i].w = dstRect[i].w;
			previewconf[i].h = dstRect[i].h;
			if(StartVideoPreview(ChannelHandle[i], &previewconf[i], useSyncSem) < 0)
				printf("start video preview(port %d) failed\n", i);
			pOverlaySurface[i] = SDL_CreateYUVOverlay(previewconf[i].w, previewconf[i].h, SDL_YV12_OVERLAY, pOverlayScreen);
			if(pOverlaySurface[i] == NULL)
			{
				fprintf(stderr,"the SDL overlay surface create failed!\n");
				return 0;
			}
			bPreviewOpen[i] = 1;
		}
		full_win_flag = 0;
	}
	clickflag ^= 1;
#endif
	return 0;
}

gint expose_ev( GtkWidget *widget,
                   GdkEvent  *event,
                   gpointer   data )
{
	char *str1 = "HikVision demo - loop test for DS-40xxHC card";
	GdkFont *font = NULL;
	GdkColor color;
	char title_str[160];
	char tmpstr[] = " ";
	

	sprintf(title_str, "%s %20s Start Time: %s", str1, tmpstr, starttime);
		
	camp = gdk_colormap_get_system();
	gc1 = gdk_gc_new(title->window);	//get GC
	
	//title expose
	if(widget->window == title->window)
	{
		//set title background
		color.red = 0;
		color.green = 0;
		color.blue = 0xffff;
		if(!gdk_color_alloc(camp, &color)){
			g_error("Cannot allocate color\n");
		}
		gdk_window_set_background(widget->window, &color);

		//set foreground
		
		color.red = 0xffff;
		color.green = 0xffff;
		color.blue = 0xffff;
		if(!gdk_color_alloc(camp, &color)){
			g_error("Cannot allocate color\n");
		}
		gdk_gc_set_foreground(gc1, &color);
		gdk_window_clear(widget->window);

		//font = gdk_fontset_load("7x14,hanzigb16fs");
		font = gdk_fontset_load("-*-*-*-*-normal--15-*-*-*-*-*-*");
		if(font != NULL){
			gdk_draw_text(widget->window, font, gc1, 10, 20, title_str, strlen(title_str));
			gdk_font_unref(font);
		}
		
		return(TRUE);
	}

	//video_area expose
	//allocte color
	gc2 = gdk_gc_new(w_full_area->window);	//get GC
	if(gdk_color_parse("black", &color))
	{
		if( !gdk_colormap_alloc_color(camp, &color,FALSE, TRUE)){
			g_error("Cannot allocate color\n");
		}
	}
		
	gdk_window_set_background(widget->window, &color);	//set background color	
	
	/* set foreground to sign motion block */
	color.red = 0;
	color.green = 0xffff;
	color.blue = 0;
	if(!gdk_color_alloc(camp, &color)){
		g_error("Cannot allocate color\n");
	}
	gdk_gc_set_foreground(gc2, &color);
	gdk_window_clear(widget->window);
		
	return(TRUE);
}

int main(int argc, char *argv[])
{
	GtkWidget *window;
	GtkWidget *frame, *main_box, *hbox, *hbox1, *vbox1, *vbox2, *hbox2;
	GtkWidget *label;
	GdkVisual *visual;
	int win_width, win_height; /* yxq modified at 2004.2.23*/
	int i, j;
	char	SDL_windowhack[32]; /* yxq add at 2004.8.25*/

	/* for callback function, add at 2002.4.24 */
	STREAM_READ_CALLBACK pStreamRead;
	pStreamRead = (STREAM_READ_CALLBACK)StreamRead_callback;
	
	//XInitThreads();
	/* init display */
	gtk_set_locale();
	gtk_init(&argc, &argv);		
	camp = gdk_colormap_get_system();

	//get display size
	win_width  = gdk_screen_width();
	win_height = gdk_screen_height();

	fprintf(stderr,"<demo_info> the screen w:%d h:%d!\n", win_width, win_height);
	
	visual = gdk_visual_get_system();

	/* get current directory */
	//getcwd(savepath, 50);
	
	//create window
	//window = gtk_window_new(GTK_WINDOW_POPUP);
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

	gtk_signal_connect(GTK_OBJECT(window),"delete_event",
		GTK_SIGNAL_FUNC(my_exit),NULL);
	gtk_signal_connect(GTK_OBJECT(window),"destroy",
		GTK_SIGNAL_FUNC(my_exit),NULL);

	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	gtk_widget_set_usize(window, win_width, win_height);
	
	frame = gtk_frame_new(NULL);
	gtk_container_add(GTK_CONTAINER(window), frame);

	main_box = gtk_vbox_new(FALSE, 0);
	gtk_container_add(GTK_CONTAINER(frame), main_box);
	
	hbox = gtk_hbox_new(FALSE, 0);
	gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
	gtk_box_pack_start(GTK_BOX (main_box), hbox, FALSE, /*TRUE*/FALSE, 0);

	/******* title window *******/
	title = gtk_drawing_area_new();
	gtk_widget_set_usize(title, win_width, 30);
			
	gtk_widget_set_events(title, GDK_EXPOSURE_MASK);
	gtk_signal_connect(GTK_OBJECT (title), "expose_event",
			GTK_SIGNAL_FUNC(expose_ev), NULL);
	gtk_box_pack_start(GTK_BOX(hbox), title, FALSE, FALSE, 0);
	/************* end title window ***********/

	hbox = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(main_box), hbox, FALSE, TRUE, 0);

	/***************** channel window **********************/
	frame = gtk_frame_new(NULL);
	gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 0);
/*
	yxq modified at 2004.8.27
	vbox1 = gtk_vbox_new(FALSE, 5);
	gtk_container_add(GTK_CONTAINER(frame), vbox1);
*/

	/* modify at 2002.4.10 */
	full_win.w = WIN_W;
	full_win.h = WIN_H;
	w_full_area = gtk_drawing_area_new();
	gtk_widget_set_usize(w_full_area, full_win.w, full_win.h);
	gtk_widget_set_events(w_full_area, GDK_EXPOSURE_MASK |
				GDK_BUTTON_PRESS_MASK); 
	gtk_signal_connect(GTK_OBJECT(w_full_area), "expose_event",
				GTK_SIGNAL_FUNC(expose_ev), NULL);
	gtk_signal_connect(GTK_OBJECT(w_full_area), "button_press_event",
				GTK_SIGNAL_FUNC(click2), GINT_TO_POINTER(-1));
	//gtk_box_pack_start(GTK_BOX(vbox1), w_full_area, FALSE, FALSE, 0);
	/* yxq modified at 2004.8.27*/
	gtk_container_add(GTK_CONTAINER(frame), w_full_area);
	/***************** end channel window **********************/
	
	
	/****************** opearate window *********************/
	frame = gtk_frame_new(NULL);
	gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE/*FALSE*/, TRUE/*FALSE*/, 0);
	
	vbox1 = gtk_vbox_new(FALSE, 5);
	gtk_container_add(GTK_CONTAINER(frame), vbox1);
	
	//status information	
	frame = gtk_frame_new("Status Information");
	gtk_box_pack_start(GTK_BOX (vbox1), frame, TRUE, FALSE, 0);
	
	vbox2 = gtk_vbox_new(FALSE,0);
	gtk_container_add(GTK_CONTAINER(frame), vbox2);

	for(i = 0; i < 3; i++)
	{
		hbox2 = gtk_hbox_new(FALSE, 0);
		gtk_box_pack_start(GTK_BOX(vbox2), hbox2, FALSE, FALSE, 5);
		label = gtk_label_new(status_str[i]);
		gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 5);
		
		w_status_buffer[i] = gtk_text_buffer_new(NULL);
		w_status[i] = gtk_text_view_new_with_buffer(w_status_buffer[i]);

		gtk_widget_set_usize(w_status[i], 100,25);
		if(i ==2)
			gtk_widget_set_usize(w_status[i], 60,25);
		gtk_text_view_set_editable(GTK_TEXT_VIEW(w_status[i]), FALSE);
		gtk_box_pack_start(GTK_BOX(hbox2), w_status[i], FALSE, FALSE,0);
				
	}

	/**	
	//display ports
	frame = gtk_frame_new(NULL);
	gtk_box_pack_start(GTK_BOX (vbox1), frame, TRUE, FALSE, 0);

	vbox2 = gtk_vbox_new(FALSE, 0);
	gtk_container_set_border_width(GTK_CONTAINER(vbox2), 4);
	gtk_container_add(GTK_CONTAINER(frame), vbox2);
*/
	/* frame information */
	frame = gtk_frame_new("Channel Info");
	gtk_box_pack_start(GTK_BOX (vbox1), frame, /*FALSE*/TRUE, FALSE, 0);
	vbox2 = gtk_vbox_new(FALSE, 0);
	gtk_container_add(GTK_CONTAINER(frame), vbox2);
	
 	hbox2 = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(vbox2), hbox2, TRUE, FALSE, 2);
	label = gtk_label_new("Channel");
	gtk_box_pack_start(GTK_BOX(hbox2), label, TRUE, FALSE, 2);

	w_channel_buffer = gtk_text_buffer_new(NULL);
	w_channel = gtk_text_view_new_with_buffer(w_channel_buffer);

	gtk_widget_set_usize(w_channel, 95, 24);
	gtk_box_pack_start(GTK_BOX(hbox2), w_channel, FALSE, FALSE, 0);
 	
 	hbox2 = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(vbox2), hbox2, TRUE, FALSE, 2);
	label = gtk_label_new("a_frame rate");
	gtk_box_pack_start(GTK_BOX(hbox2), label, TRUE, FALSE, 2);
	
	w_audio_framerate_buffer = gtk_text_buffer_new(NULL);
	w_audio_framerate = gtk_text_view_new_with_buffer(w_audio_framerate_buffer);

	gtk_widget_set_usize(w_audio_framerate, 95, 24);
	gtk_box_pack_start(GTK_BOX(hbox2), w_audio_framerate, FALSE, FALSE, 0);
 	
 	hbox2 = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(vbox2), hbox2, TRUE, FALSE, 2);
	label = gtk_label_new("v_frame rate");
	gtk_box_pack_start(GTK_BOX(hbox2), label, TRUE, FALSE, 2);
	
	w_video_framerate_buffer = gtk_text_buffer_new(NULL);
	w_video_framerate = gtk_text_view_new_with_buffer(w_video_framerate_buffer);

	gtk_widget_set_usize(w_video_framerate, 95, 24);
	gtk_box_pack_start(GTK_BOX(hbox2), w_video_framerate, FALSE, FALSE, 0);
 	
 	hbox2 = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(vbox2), hbox2, TRUE, FALSE, 2);
	label = gtk_label_new("Total frame");
	gtk_box_pack_start(GTK_BOX(hbox2), label, TRUE, FALSE, 2);

	w_totalframe_buffer = gtk_text_buffer_new(NULL);
	w_totalframe = gtk_text_view_new_with_buffer(w_totalframe_buffer);

	gtk_widget_set_usize(w_totalframe, 95, 24);
	gtk_box_pack_start(GTK_BOX(hbox2), w_totalframe, FALSE, FALSE, 0);
 	
 	//get bit rate
	hbox2 = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(vbox2), hbox2, TRUE, FALSE, 2);
	label = gtk_label_new("BitRate(bps)");
	gtk_box_pack_start(GTK_BOX(hbox2), label, TRUE, FALSE, 2);

	w_bit_rate_buffer = gtk_text_buffer_new(NULL);
	w_bit_rate = gtk_text_view_new_with_buffer(w_bit_rate_buffer);

	gtk_widget_set_usize(w_bit_rate, 95, 24);
	gtk_box_pack_start(GTK_BOX(hbox2), w_bit_rate, FALSE, FALSE, 0);
 	
	//set bit_rate(bps)
	hbox2 = gtk_hbox_new(FALSE, 0);

⌨️ 快捷键说明

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