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

📄 gui_main.cpp

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		"toggled",
		GTK_SIGNAL_FUNC(on_record_enabled_button),
		NULL);
	gtk_widget_show(record_enabled_button);

	// create second row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

	// settings summary
	record_settings_label = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(record_settings_label), 0.0, 0.5);
	gtk_widget_show(record_settings_label);
	gtk_box_pack_start(GTK_BOX(hbox), record_settings_label, TRUE, TRUE, 0);

	// settings button
	record_settings_button = gtk_button_new_with_label(" Settings... ");
	gtk_box_pack_start(GTK_BOX(hbox), record_settings_button, FALSE, FALSE, 5);
	gtk_signal_connect(GTK_OBJECT(record_settings_button), 
		"clicked",
		GTK_SIGNAL_FUNC(on_record_settings_button),
		NULL);
	gtk_widget_show(record_settings_button);

	// finalize
	gtk_container_add(GTK_CONTAINER(frame), vbox);
	gtk_widget_show(frame);
}

static void LayoutTransmitFrame(GtkWidget* box)
{
	GtkWidget *frame;
	GtkWidget *vbox, *hbox;

	frame = gtk_frame_new("Transmission");
	gtk_frame_set_label_align(GTK_FRAME(frame), frameLabelAlignment, 0);
	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
	gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 5);

	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);

	// create first row, homogenous
	hbox = gtk_hbox_new(TRUE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5);
  
	// enabled button
	transmit_enabled_button = gtk_check_button_new_with_label("Enabled");
	gtk_box_pack_start(GTK_BOX(hbox), transmit_enabled_button, TRUE, TRUE, 5);
	gtk_signal_connect(GTK_OBJECT(transmit_enabled_button), 
		"toggled",
		GTK_SIGNAL_FUNC(on_transmit_enabled_button),
		NULL);
	gtk_widget_show(transmit_enabled_button);

	// create second row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

	// settings summary
	transmit_settings_label = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(transmit_settings_label), 0.0, 0.5);
	gtk_widget_show(transmit_settings_label);
	gtk_box_pack_start(GTK_BOX(hbox), transmit_settings_label, TRUE, TRUE, 0);

	// settings button
	transmit_settings_button = gtk_button_new_with_label(" Settings... ");
	gtk_box_pack_start(GTK_BOX(hbox), 
		transmit_settings_button, FALSE, FALSE, 5);
	gtk_signal_connect(GTK_OBJECT(transmit_settings_button), 
		"clicked",
		GTK_SIGNAL_FUNC(on_transmit_settings_button),
		NULL);
	gtk_widget_show(transmit_settings_button);

	// finalize
	gtk_container_add(GTK_CONTAINER(frame), vbox);
	gtk_widget_show(frame);
}

// Control frame
void LayoutControlFrame(GtkWidget* box)
{
	GtkWidget *frame;
	GtkWidget *vbox;
	GtkWidget *hbox;
	GtkWidget *label;
	GtkWidget *separator;
	GtkObject* adjustment;

	frame = gtk_frame_new("Control");
	gtk_frame_set_label_align(GTK_FRAME(frame), frameLabelAlignment, 0);
	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
	gtk_box_pack_end(GTK_BOX(box), frame, FALSE, FALSE, 5);

	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_container_add(GTK_CONTAINER(frame), vbox);

	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

	label = gtk_label_new(" Duration:");
	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
	gtk_widget_show(label);
	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);

	adjustment = gtk_adjustment_new(
		MyConfig->GetIntegerValue(CONFIG_APP_DURATION),
		1, 24 * 60 * 60, 1, 0, 0);
	duration_spinner = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0);
	gtk_signal_connect(GTK_OBJECT(duration_spinner),
		"changed",
		GTK_SIGNAL_FUNC(on_duration_changed),
		GTK_OBJECT(duration_spinner));
	gtk_widget_show(duration_spinner);
	gtk_box_pack_start(GTK_BOX(hbox), duration_spinner, FALSE, FALSE, 5);

	durationUnitsIndex = 0; // temporary
	duration_units_menu = CreateOptionMenu(NULL,
		durationUnitsNames, 
		sizeof(durationUnitsNames) / sizeof(char*),
		durationUnitsIndex,
		GTK_SIGNAL_FUNC(on_duration_units_menu_activate));
	gtk_box_pack_start(GTK_BOX(hbox), duration_units_menu, FALSE, FALSE, 5);

	// vertical separator
	separator = gtk_vseparator_new();
	gtk_widget_show(separator);
	gtk_box_pack_start(GTK_BOX(hbox), separator, FALSE, FALSE, 0);

	start_button = gtk_button_new();
	start_button_label = gtk_label_new("  Start  ");
	gtk_misc_set_alignment(GTK_MISC(start_button_label), 0.5, 0.5);
	gtk_container_add(GTK_CONTAINER(start_button), start_button_label);
	gtk_widget_show(start_button_label);
	gtk_box_pack_start(GTK_BOX(hbox), start_button, TRUE, TRUE, 5);
	gtk_signal_connect(GTK_OBJECT(start_button), 
		"clicked",
		GTK_SIGNAL_FUNC(on_start_button),
		NULL);
	gtk_widget_show(start_button);

	// separator
	separator = gtk_hseparator_new();
	gtk_widget_show(separator);
	gtk_box_pack_start(GTK_BOX(vbox), separator, TRUE, TRUE, 0);

	// second row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

	label = gtk_label_new(" Configuration File:");
	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
	gtk_widget_show(label);
	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);

	config_file_entry = gtk_entry_new_with_max_length(256);
	gtk_entry_set_text(GTK_ENTRY(config_file_entry), 
		MyConfig->GetFileName());
	gtk_widget_show(config_file_entry);
	gtk_box_pack_start(GTK_BOX(hbox), config_file_entry, TRUE, TRUE, 5);
	
	// config file load button
	load_config_button = gtk_button_new_with_label(" Load... ");
	gtk_signal_connect(GTK_OBJECT(load_config_button),
		 "clicked",
		 GTK_SIGNAL_FUNC(on_load_config_button),
		 NULL);
	gtk_widget_show(load_config_button);
	gtk_box_pack_start(GTK_BOX(hbox), load_config_button, FALSE, FALSE, 5);

	// config file save button
	save_config_button = gtk_button_new_with_label(" Save ");
	gtk_signal_connect(GTK_OBJECT(save_config_button),
		 "clicked",
		 GTK_SIGNAL_FUNC(on_save_config_button),
		 NULL);
	gtk_widget_show(save_config_button);
	gtk_box_pack_start(GTK_BOX(hbox), save_config_button, FALSE, FALSE, 5);

	gtk_widget_show(frame); // show control frame
}

// Status frame
void LayoutStatusFrame(GtkWidget* box)
{
	GtkWidget *frame;
	GtkWidget *frame_vbox;
	GtkWidget *vbox, *hbox;
	GtkWidget *separator;

	frame = gtk_frame_new("Status");
	gtk_frame_set_label_align(GTK_FRAME(frame), frameLabelAlignment, 0);
	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
	gtk_box_pack_end(GTK_BOX(box), frame, FALSE, FALSE, 5);

	// frame vbox
	frame_vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(frame_vbox);
	gtk_container_add(GTK_CONTAINER(frame), frame_vbox);

	// first row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2);

	media_source_label = gtk_label_new(" Source:");
	gtk_misc_set_alignment(GTK_MISC(media_source_label), 0.0, 0.5);
	gtk_widget_show(media_source_label);
	gtk_box_pack_start(GTK_BOX(hbox), media_source_label, TRUE, TRUE, 5);

	media_source = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(media_source), 1.0, 0.5);
	gtk_widget_show(media_source);
	gtk_box_pack_start(GTK_BOX(hbox), media_source, TRUE, TRUE, 5);

	// separator
	separator = gtk_hseparator_new();
	gtk_widget_show(separator);
	gtk_box_pack_start(GTK_BOX(frame_vbox), separator, TRUE, TRUE, 0);

	// second row

	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2);

	// vbox for time labels
	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);

	start_time_label = gtk_label_new(" Start Time:");
	gtk_misc_set_alignment(GTK_MISC(start_time_label), 0.0, 0.5);
	gtk_widget_show(start_time_label);
	gtk_box_pack_start(GTK_BOX(vbox), start_time_label, TRUE, TRUE, 0);

	duration_label = gtk_label_new(" Current Duration:");
	gtk_misc_set_alignment(GTK_MISC(duration_label), 0.0, 0.5);
	gtk_widget_show(duration_label);
	gtk_box_pack_start(GTK_BOX(vbox), duration_label, TRUE, TRUE, 0);

	current_time_label = gtk_label_new(" Current Time:");
	gtk_misc_set_alignment(GTK_MISC(current_time_label), 0.0, 0.5);
	gtk_widget_show(current_time_label);
	gtk_box_pack_start(GTK_BOX(vbox), current_time_label, TRUE, TRUE, 0);

	finish_time_label = gtk_label_new(" Finish Time:");
	gtk_misc_set_alignment(GTK_MISC(finish_time_label), 0.0, 0.5);
	gtk_widget_show(finish_time_label);
	gtk_box_pack_start(GTK_BOX(vbox), finish_time_label, TRUE, TRUE, 0);

	// vbox for time values
	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);

	start_time = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(start_time), 1.0, 0.5);
	gtk_widget_show(start_time);
	gtk_box_pack_start(GTK_BOX(vbox), start_time, TRUE, TRUE, 0);

	duration = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(duration), 1.0, 0.5);
	gtk_widget_show(duration);
	gtk_box_pack_start(GTK_BOX(vbox), duration, TRUE, TRUE, 0);

	current_time = gtk_label_new("                 ");
	gtk_misc_set_alignment(GTK_MISC(current_time), 1.0, 0.5);
	gtk_widget_show(current_time);
	gtk_box_pack_start(GTK_BOX(vbox), current_time, TRUE, TRUE, 0);

	finish_time = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(finish_time), 1.0, 0.5);
	gtk_widget_show(finish_time);
	gtk_box_pack_start(GTK_BOX(vbox), finish_time, TRUE, TRUE, 0);

	// vbox for time units
	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);

	start_time_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(start_time_units), 1.0, 0.5);
	gtk_widget_show(start_time_units);
	gtk_box_pack_start(GTK_BOX(vbox), start_time_units, TRUE, TRUE, 0);

	duration_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(duration_units), 1.0, 0.5);
	gtk_widget_show(duration_units);
	gtk_box_pack_start(GTK_BOX(vbox), duration_units, TRUE, TRUE, 0);

	current_time_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(current_time_units), 1.0, 0.5);
	gtk_widget_show(current_time_units);
	gtk_box_pack_start(GTK_BOX(vbox), current_time_units, TRUE, TRUE, 0);

	finish_time_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(finish_time_units), 1.0, 0.5);
	gtk_widget_show(finish_time_units);
	gtk_box_pack_start(GTK_BOX(vbox), finish_time_units, TRUE, TRUE, 0);

	// separator
	separator = gtk_hseparator_new();
	gtk_widget_show(separator);
	gtk_box_pack_start(GTK_BOX(frame_vbox), separator, TRUE, TRUE, 0);

	// third row

	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2);

	// vbox for size labels
	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);

	current_size_label = gtk_label_new(" Current Size:");
	gtk_misc_set_alignment(GTK_MISC(current_size_label), 0.0, 0.5);
	gtk_widget_show(current_size_label);
	gtk_box_pack_start(GTK_BOX(vbox), current_size_label, TRUE, TRUE, 0);

	final_size_label = gtk_label_new(" Estimated Final Size:");
	gtk_misc_set_alignment(GTK_MISC(final_size_label), 0.0, 0.5);
	gtk_widget_show(final_size_label);
	gtk_box_pack_start(GTK_BOX(vbox), final_size_label, TRUE, TRUE, 0);

	// vbox for size values
	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);

	current_size = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(current_size), 1.0, 0.5);
	gtk_widget_show(current_size);
	gtk_box_pack_start(GTK_BOX(vbox), current_size, TRUE, TRUE, 0);

	final_size = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(final_size), 1.0, 0.5);
	gtk_widget_show(final_size);
	gtk_box_pack_start(GTK_BOX(vbox), final_size, TRUE, TRUE, 0);

	// vbox for size units
	vbox = gtk_vbox_new(FALSE, 1);
	gtk_widget_show(vbox);
	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);

	current_size_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(current_size_units), 1.0, 0.5);
	gtk_widget_show(current_size_units);
	gtk_box_pack_start(GTK_BOX(vbox), current_size_units, TRUE, TRUE, 0);

	final_size_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(final_size_units), 1.0, 0.5);
	gtk_widget_show(final_size_units);
	gtk_box_pack_start(GTK_BOX(vbox), final_size_units, TRUE, TRUE, 0);

	// separator
	separator = gtk_hseparator_new();
	gtk_widget_show(separator);
	gtk_box_pack_start(GTK_BOX(frame_vbox), separator, TRUE, TRUE, 0);

	// fourth row

	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2);

	actual_fps_label = gtk_label_new(" Video Frame Rate:");
	gtk_misc_set_alignment(GTK_MISC(actual_fps_label), 0.0, 0.5);
	gtk_widget_show(actual_fps_label);
	gtk_box_pack_start(GTK_BOX(hbox), actual_fps_label, TRUE, TRUE, 5);

	actual_fps = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(actual_fps), 1.0, 0.5);
	gtk_widget_show(actual_fps);
	gtk_box_pack_start(GTK_BOX(hbox), actual_fps, FALSE, FALSE, 0);

	actual_fps_units = gtk_label_new("");
	gtk_misc_set_alignment(GTK_MISC(actual_fps_units), 1.0, 0.5);
	gtk_widget_show(actual_fps_units);
	gtk_box_pack_start(GTK_BOX(hbox), actual_fps_units, FALSE, FALSE, 5);

	gtk_widget_show(frame); // show control frame
}

/*
 * Main routine - set up window
 */
int gui_main(int argc, char **argv, CLiveConfig* pConfig)
{
	MyConfig = pConfig;

	AVFlow = new CAVMediaFlow(pConfig);

	gtk_init(&argc, &argv);

	// Setup main window
	main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, FALSE, TRUE);

	char buffer[80];
	snprintf(buffer, sizeof(buffer), "cisco mp4live %s", VERSION);
	gtk_window_set_title(GTK_WINDOW(main_window), buffer);
	gtk_signal_connect(GTK_OBJECT(main_window),
		"delete_event",
		GTK_SIGNAL_FUNC(delete_event),
		NULL);

	// main boxes
	main_hbox = gtk_hbox_new(FALSE, 1);
	gtk_container_set_border_width(GTK_CONTAINER(main_hbox), 4);
	gtk_widget_show(main_hbox);
	gtk_container_add(GTK_CONTAINER(main_window), main_hbox);

	main_vbox1 = gtk_vbox_new(FALSE, 1);
	gtk_container_set_border_width(GTK_CONTAINER(main_vbox1), 4);
	gtk_widget_show(main_vbox1);
	gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox1, FALSE, FALSE, 5);

	main_vbox2 = gtk_vbox_new(FALSE, 1);
	gtk_container_set_border_width(GTK_CONTAINER(main_vbox2), 4);
	gtk_widget_show(main_vbox2);
	gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox2, FALSE, FALSE, 5);

	// Video Preview
	NewVideoWindow();
	
	// Video Frame
	LayoutVideoFrame(main_vbox2);

	// Audio Frame
	LayoutAudioFrame(main_vbox2);

	// Recording Frame
	LayoutRecordingFrame(main_vbox2);

	// Transmission Frame
	LayoutTransmitFrame(main_vbox2);

	// Status frame
	LayoutStatusFrame(main_vbox1);

	// Control frame
	LayoutControlFrame(main_vbox1);

	DisplayAllSettings();

	gtk_widget_show(main_window);

	if (MyConfig->GetBoolValue(CONFIG_VIDEO_ENABLE)) {
		AVFlow->StartVideoPreview();
	}

	// "press" start button
	if (MyConfig->m_appAutomatic) {
		on_start_button(start_button, NULL);
	}

	gtk_main();

	delete AVFlow;

	return 0;
}

/* end gui_main.cpp */

⌨️ 快捷键说明

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