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

📄 video_dialog.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	CreateSizeMenu();	// change max frame rate spinner	if (signalIndex == 1) {		// NTSC 		gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(frame_rate_spinner),			GTK_ADJUSTMENT(frame_rate_ntsc_adjustment));	} else {		// PAL or SECAM		float frameRate = gtk_spin_button_get_value_as_float(			GTK_SPIN_BUTTON(frame_rate_spinner));		if (frameRate > VIDEO_PAL_FRAME_RATE) {			gtk_spin_button_set_value(GTK_SPIN_BUTTON(frame_rate_spinner),				VIDEO_PAL_FRAME_RATE);		}		gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(frame_rate_spinner),			GTK_ADJUSTMENT(frame_rate_pal_adjustment));	}}static void on_signal_menu_activate(GtkWidget *widget, gpointer data){	ChangeSignal(((unsigned int)data) & 0xFF);}static void SetAvailableSignals(void){	GSList* item = signal_menu_items;	u_int8_t i = 0;	u_int8_t validSignalIndex = 0xFF;	// for all menu items in the signal menu	while (item != NULL) {		// all signals are enabled		bool enabled = true;		// unless input is a tuner		if (pVideoCaps != NULL		  && pVideoCaps->m_inputHasTuners[inputIndex]) {			// this signal type is valid for this tuner		  	if (pVideoCaps->m_inputTunerSignalTypes[inputIndex] & (1 << i)) {				// remember first valid signal type for this tuner				if (validSignalIndex == 0xFF) {					validSignalIndex = i;				}			} else { // this signal type is invalid for this tuner				// so disable this menu item				enabled = false;				// check if our current signal type is invalid for this tuner				if (signalIndex == i) {					signalIndex = 0xFF;				}			}		}		gtk_widget_set_sensitive(GTK_WIDGET(item->data), enabled);		item = item->next;		i++;	}	// try to choose a valid signal type if we don't have one	if (signalIndex == 0xFF) {		if (validSignalIndex == 0xFF) {			// we're in trouble			debug_message("SetAvailableSignals: no valid signal type!");			signalIndex = 0;		} else {			signalIndex = validSignalIndex;		}		// cause the displayed value to be updated		gtk_option_menu_set_history(GTK_OPTION_MENU(signal_menu), signalIndex);		// TBD check that signal activate is called here	}}static void on_aspect_menu_activate(GtkWidget *widget, gpointer data){	aspectIndex = ((unsigned int)data) & 0xFF;}static bool ValidateAndSave(void){	// if source has been modified	if (source_modified) {		// validate it		ChangeSource();		// can't validate		if (source_modified) {			return false;		}	}	// if previewing, stop video source	AVFlow->StopVideoPreview();	// copy new values to config	MyConfig->SetStringValue(CONFIG_VIDEO_SOURCE_TYPE,		source_type);	MyConfig->SetStringValue(CONFIG_VIDEO_SOURCE_NAME,		gtk_entry_get_text(GTK_ENTRY(source_entry)));	MyConfig->UpdateFileHistory(		gtk_entry_get_text(GTK_ENTRY(source_entry)));	if (MyConfig->m_videoCapabilities != pVideoCaps) {		delete MyConfig->m_videoCapabilities;		MyConfig->m_videoCapabilities = pVideoCaps;		pVideoCaps = NULL;	}	if (strcasecmp(source_type, VIDEO_SOURCE_V4L) 	  && default_file_audio_source >= 0) {		MyConfig->SetStringValue(CONFIG_AUDIO_SOURCE_TYPE,			source_type);		MyConfig->SetStringValue(CONFIG_AUDIO_SOURCE_NAME,			gtk_entry_get_text(GTK_ENTRY(source_entry)));		MyConfig->SetIntegerValue(CONFIG_AUDIO_SOURCE_TRACK,			default_file_audio_source);	}	MyConfig->SetIntegerValue(CONFIG_VIDEO_INPUT,		inputIndex);	MyConfig->SetIntegerValue(CONFIG_VIDEO_SIGNAL,		signalIndex);	MyConfig->SetIntegerValue(CONFIG_VIDEO_CHANNEL_LIST_INDEX,		channelListIndex);	// extract channel index out of combo (not so simple)	GtkWidget* entry = GTK_COMBO(channel_combo)->entry;	const char* channelName = gtk_entry_get_text(GTK_ENTRY(entry));	struct CHANLISTS* pChannelList = chanlists;	for (int i = 0; i < pChannelList[channelListIndex].count; i++) {		if (!strcmp(channelName, 		  pChannelList[channelListIndex].list[i].name)) {			channelIndex = i;			break;		}	}	MyConfig->SetIntegerValue(CONFIG_VIDEO_CHANNEL_INDEX,		channelIndex);	MyConfig->SetIntegerValue(CONFIG_VIDEO_SOURCE_TRACK,		trackValues ? trackValues[trackIndex] : 0);	MyConfig->SetIntegerValue(CONFIG_VIDEO_RAW_WIDTH,		sizeWidthValues[sizeIndex]);	MyConfig->SetIntegerValue(CONFIG_VIDEO_RAW_HEIGHT,		sizeHeightValues[sizeIndex]);	MyConfig->SetFloatValue(CONFIG_VIDEO_ASPECT_RATIO,		aspectValues[aspectIndex]);	MyConfig->SetFloatValue(CONFIG_VIDEO_FRAME_RATE,		gtk_spin_button_get_value_as_float(			GTK_SPIN_BUTTON(frame_rate_spinner)));	MyConfig->SetIntegerValue(CONFIG_VIDEO_BIT_RATE,		gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(bit_rate_spinner)));	// now put the new configuration into effect	MyConfig->Update();	NewVideoWindow();	// restart video source	if (MyConfig->GetBoolValue(CONFIG_VIDEO_ENABLE)) {		AVFlow->StartVideoPreview();	}	// refresh display of settings in main window	DisplayVideoSettings();  	DisplayStatusSettings();  	return true;}static void on_ok_button (GtkWidget *widget, gpointer *data){	// check and save values	if (!ValidateAndSave()) {		return;	}    on_destroy_dialog(NULL, NULL);}static void on_cancel_button (GtkWidget *widget, gpointer *data){	on_destroy_dialog(NULL, NULL);}void CreateVideoDialog (void) {	GtkWidget* hbox;	GtkWidget* vbox;	GtkWidget* hbox2;	GtkWidget* label;	GtkWidget* button;	GtkObject* adjustment;	pVideoCaps = MyConfig->m_videoCapabilities;	default_file_audio_source = -1;	dialog = gtk_dialog_new();	gtk_signal_connect(GTK_OBJECT(dialog),		"destroy",		GTK_SIGNAL_FUNC(on_destroy_dialog),		&dialog);	gtk_window_set_title(GTK_WINDOW(dialog), "Video Settings");	gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);#ifndef HAVE_GTK_2_0	gtk_container_set_resize_mode(GTK_CONTAINER(dialog), GTK_RESIZE_IMMEDIATE);#endif	hbox = gtk_hbox_new(FALSE, 1);	gtk_widget_show(hbox);	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,		FALSE, FALSE, 5);	vbox = gtk_vbox_new(TRUE, 1);	gtk_widget_show(vbox);	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);	label = gtk_label_new(" Source:");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	gtk_widget_show(label);	input_label = gtk_label_new("   Port:");	gtk_misc_set_alignment(GTK_MISC(input_label), 0.0, 0.5);	gtk_box_pack_start(GTK_BOX(vbox), input_label, FALSE, FALSE, 0);	signal_label = gtk_label_new("   Signal:");	gtk_misc_set_alignment(GTK_MISC(signal_label), 0.0, 0.5);	gtk_box_pack_start(GTK_BOX(vbox), signal_label, FALSE, FALSE, 0);	channel_list_label = gtk_label_new("   Channel List:");	gtk_misc_set_alignment(GTK_MISC(channel_list_label), 0.0, 0.5);	gtk_box_pack_start(GTK_BOX(vbox), channel_list_label, FALSE, FALSE, 0);	channel_label = gtk_label_new("   Channel:");	gtk_misc_set_alignment(GTK_MISC(channel_label), 0.0, 0.5);	gtk_box_pack_start(GTK_BOX(vbox), channel_label, FALSE, FALSE, 0);	track_label = gtk_label_new("   Track:");	gtk_misc_set_alignment(GTK_MISC(track_label), 0.0, 0.5);	gtk_box_pack_start(GTK_BOX(vbox), track_label, FALSE, FALSE, 0);	label = gtk_label_new(" Output:");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_widget_show(label);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	label = gtk_label_new("   Size:");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_widget_show(label);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	label = gtk_label_new("   Aspect Ratio:");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_widget_show(label);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	label = gtk_label_new("   Frame Rate (fps):");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_widget_show(label);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	label = gtk_label_new("   Bit Rate (kbps):");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_widget_show(label);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	vbox = gtk_vbox_new(TRUE, 1);	gtk_widget_show(vbox);	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);	hbox2 = gtk_hbox_new(FALSE, 1);	gtk_widget_show(hbox2);	gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);	source_type = MyConfig->GetStringValue(CONFIG_VIDEO_SOURCE_TYPE);	// source entry	free(source_name);	source_name = 		stralloc(MyConfig->GetStringValue(CONFIG_VIDEO_SOURCE_NAME));	source_modified = false;	source_combo = CreateFileCombo(source_name);	source_entry = GTK_COMBO(source_combo)->entry;	source_list = GTK_COMBO(source_combo)->list;	gtk_signal_connect(GTK_OBJECT(source_list), "select_child",		GTK_SIGNAL_FUNC(on_source_list_changed), NULL);	SetEntryValidator(GTK_OBJECT(source_entry),		GTK_SIGNAL_FUNC(on_source_entry_changed), 		GTK_SIGNAL_FUNC(on_source_leave));	gtk_widget_show(source_combo);	gtk_box_pack_start(GTK_BOX(hbox2), source_combo, TRUE, TRUE, 0);	// browse button	browse_button = gtk_button_new_with_label(" Browse... ");	gtk_signal_connect(GTK_OBJECT(browse_button),		 "clicked",		 GTK_SIGNAL_FUNC(on_source_browse_button),		 NULL);	gtk_widget_show(browse_button);	gtk_box_pack_start(GTK_BOX(hbox2), browse_button, FALSE, FALSE, 5);	// N.B. because of the dependencies of 	// input, signal, channel list, channel, and sizes	// order of operations is important here	channelIndex = 		MyConfig->GetIntegerValue(CONFIG_VIDEO_CHANNEL_INDEX);	channelListIndex = 		MyConfig->GetIntegerValue(CONFIG_VIDEO_CHANNEL_LIST_INDEX);	signalIndex = 		MyConfig->GetIntegerValue(CONFIG_VIDEO_SIGNAL); 	inputIndex = 		MyConfig->GetIntegerValue(CONFIG_VIDEO_INPUT);	channel_combo = NULL;	channel_combo = gtk_combo_new();	CreateChannelCombo();	channel_list_menu = NULL;	CreateChannelListMenu();	track_menu = NULL;	track_menu = CreateTrackMenu(		track_menu,		'V',		gtk_entry_get_text(GTK_ENTRY(source_entry)),		&trackIndex,		&trackNumber,		&trackValues);	trackIndex = 0; 	for (u_int8_t i = 0; i < trackNumber; i++) {		if (MyConfig->GetIntegerValue(CONFIG_VIDEO_SOURCE_TRACK)		   == trackValues[i]) {			trackIndex = i;			break;		}	}	sizeIndex = 0; 	for (u_int8_t i = 0; i < sizeWidthValueCnt; i++) {		if (MyConfig->GetIntegerValue(CONFIG_VIDEO_RAW_WIDTH)		    == sizeWidthValues[i]		  && MyConfig->GetIntegerValue(CONFIG_VIDEO_RAW_HEIGHT)		    == sizeHeightValues[i]) {			sizeIndex = i;			break;		}	}	size_menu = NULL;	CreateSizeMenu();	signal_menu = CreateOptionMenu(		NULL,		signalNames, 		sizeof(signalNames) / sizeof(char*),		signalIndex,		GTK_SIGNAL_FUNC(on_signal_menu_activate),		&signal_menu_items);	input_menu = NULL;	CreateInputMenu(pVideoCaps);	ChangeInput(inputIndex);	gtk_box_pack_start(GTK_BOX(vbox), input_menu, FALSE, FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), signal_menu, FALSE, FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), channel_list_menu, FALSE, FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), channel_combo, FALSE, FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), track_menu, FALSE, FALSE, 0);	// spacer	label = gtk_label_new(" ");	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);	gtk_widget_show(label);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), size_menu, FALSE, FALSE, 0);	aspectIndex = 0; 	for (u_int8_t i = 0; i < sizeof(aspectValues) / sizeof(float); i++) {		if (MyConfig->GetFloatValue(CONFIG_VIDEO_ASPECT_RATIO)		  == aspectValues[i]) {			aspectIndex = i;			break;		}	}	aspect_menu = CreateOptionMenu(		NULL,		aspectNames, 		sizeof(aspectNames) / sizeof(char*),		aspectIndex,		GTK_SIGNAL_FUNC(on_aspect_menu_activate));	gtk_box_pack_start(GTK_BOX(vbox), aspect_menu, FALSE, FALSE, 0);	frame_rate_pal_adjustment = gtk_adjustment_new(		MyConfig->GetFloatValue(CONFIG_VIDEO_FRAME_RATE),		1, VIDEO_PAL_FRAME_RATE, 1, 0, 0);	gtk_object_ref(frame_rate_pal_adjustment);	frame_rate_ntsc_adjustment = gtk_adjustment_new(		MyConfig->GetFloatValue(CONFIG_VIDEO_FRAME_RATE),		1, VIDEO_NTSC_FRAME_RATE, 1, 0, 0);	gtk_object_ref(frame_rate_ntsc_adjustment);	if (signalIndex == 1) {		frame_rate_spinner = gtk_spin_button_new(			GTK_ADJUSTMENT(frame_rate_ntsc_adjustment), 1, 2);	} else {		frame_rate_spinner = gtk_spin_button_new(			GTK_ADJUSTMENT(frame_rate_pal_adjustment), 1, 2);	}	gtk_widget_show(frame_rate_spinner);	gtk_box_pack_start(GTK_BOX(vbox), frame_rate_spinner, FALSE, FALSE, 0);	adjustment = gtk_adjustment_new(		MyConfig->GetIntegerValue(CONFIG_VIDEO_BIT_RATE),		25, 4000, 50, 0, 0);	bit_rate_spinner = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 50, 0);	gtk_widget_show(bit_rate_spinner);	gtk_box_pack_start(GTK_BOX(vbox), bit_rate_spinner, FALSE, FALSE, 0);	// Add standard buttons at bottom	button = AddButtonToDialog(dialog,		" OK ", 		GTK_SIGNAL_FUNC(on_ok_button));	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);	AddButtonToDialog(dialog,		" Cancel ", 		GTK_SIGNAL_FUNC(on_cancel_button));	ShowSourceSpecificSettings();	gtk_widget_show(dialog);}/* end video_dialog.cpp */

⌨️ 快捷键说明

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