📄 dsdemo.c
字号:
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 + -