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

📄 recording_dialog.cpp

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 CPP
字号:
/*
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 * 
 * The Original Code is MPEG4IP.
 * 
 * The Initial Developer of the Original Code is Cisco Systems Inc.
 * Portions created by Cisco Systems Inc. are
 * Copyright (C) Cisco Systems Inc. 2001-2002.  All Rights Reserved.
 * 
 * Contributor(s): 
 *		Dave Mackie		dmackie@cisco.com
 *		Bill May 		wmay@cisco.com
 */

#include "mp4live.h"
#include "mp4live_gui.h"

static GtkWidget *dialog;
static GtkWidget *file_combo;
static GtkWidget *file_entry;

static GtkWidget *video_raw_button;
static GtkWidget *video_encoded_button;
static GtkWidget *audio_raw_button;
static GtkWidget *audio_encoded_button;
static GtkWidget *overwrite_button;

static void on_destroy_dialog (GtkWidget *widget, gpointer *data)
{
  gtk_grab_remove(dialog);
  gtk_widget_destroy(dialog);
  dialog = NULL;
} 

static void on_browse_button (GtkWidget *widget, gpointer *data)
{
	FileBrowser(file_entry);
}

static bool Validate()
{
	const char *name;

	name = gtk_entry_get_text(GTK_ENTRY(file_entry));
	if (name == NULL || *name == '\0') {
		ShowMessage("Error", "Must specify file");
		return false;
	}
  
	struct stat statbuf;

	if (stat(name, &statbuf) == 0 && !S_ISREG(statbuf.st_mode)) {
		ShowMessage("Error", "Specified name is not a file");
		return false;
	}

	return true;
}
  
static void Save()
{
	MyConfig->SetStringValue(CONFIG_RECORD_MP4_FILE_NAME,
		gtk_entry_get_text(GTK_ENTRY(file_entry)));

	MyConfig->UpdateFileHistory(
		gtk_entry_get_text(GTK_ENTRY(file_entry)));

	MyConfig->SetBoolValue(CONFIG_RECORD_RAW_VIDEO,
		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(video_raw_button)));

	MyConfig->SetBoolValue(CONFIG_RECORD_ENCODED_VIDEO,
		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(video_encoded_button)));

	MyConfig->SetBoolValue(CONFIG_RECORD_RAW_AUDIO,
		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(audio_raw_button)));

	MyConfig->SetBoolValue(CONFIG_RECORD_ENCODED_AUDIO,
		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(audio_encoded_button)));

	MyConfig->SetBoolValue(CONFIG_RECORD_MP4_OVERWRITE,
		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overwrite_button)));

	MyConfig->Update();

	DisplayRecordingSettings();
}

static void on_ok_button (GtkWidget *widget, gpointer *data)
{
	if (!Validate()) {
		return;
	}
	Save();
    on_destroy_dialog(NULL, NULL);
}

static void on_cancel_button (GtkWidget *widget, gpointer *data)
{
	on_destroy_dialog(NULL, NULL);
}

void CreateRecordingDialog (void) 
{
	GtkWidget *hbox, *label;

	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), "Recording Settings");
	gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);

	// first row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);

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

	// file entry
	file_combo = CreateFileCombo(
		MyConfig->GetStringValue(CONFIG_RECORD_MP4_FILE_NAME));

	file_entry = GTK_COMBO(file_combo)->entry;

	gtk_widget_show(file_combo);
	gtk_box_pack_start(GTK_BOX(hbox), file_combo, TRUE, TRUE, 5);
	
	// file browse button
	GtkWidget *browse_button = gtk_button_new_with_label(" Browse... ");
	gtk_signal_connect(GTK_OBJECT(browse_button),
		 "clicked",
		 GTK_SIGNAL_FUNC(on_browse_button),
		 NULL);
	gtk_box_pack_start(GTK_BOX(hbox), browse_button, FALSE, FALSE, 0);
	gtk_widget_show(browse_button);

	// second row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);

	// overwrite button
	overwrite_button = 
		gtk_check_button_new_with_label("Overwrite existing file");
	gtk_box_pack_start(GTK_BOX(hbox), overwrite_button, FALSE, FALSE, 5);
	gtk_widget_show(overwrite_button);

	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(overwrite_button),
		MyConfig->GetBoolValue(CONFIG_RECORD_MP4_OVERWRITE));
  
	// third row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);

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

	// video raw button
	video_raw_button = gtk_check_button_new_with_label("Raw");
	gtk_box_pack_start(GTK_BOX(hbox), video_raw_button, FALSE, FALSE, 5);
	gtk_widget_show(video_raw_button);

	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(video_raw_button),
		MyConfig->GetBoolValue(CONFIG_RECORD_RAW_VIDEO));
  
	// video encoded button
	video_encoded_button = gtk_check_button_new_with_label("Encoded");
	gtk_box_pack_start(GTK_BOX(hbox), video_encoded_button, FALSE, FALSE, 5);
	gtk_widget_show(video_encoded_button);

	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(video_encoded_button),
		MyConfig->GetBoolValue(CONFIG_RECORD_ENCODED_VIDEO));
  
	// fourth row
	hbox = gtk_hbox_new(FALSE, 1);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);

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

	// audio raw button
	audio_raw_button = gtk_check_button_new_with_label("Raw");
	gtk_box_pack_start(GTK_BOX(hbox), audio_raw_button, FALSE, FALSE, 5);
	gtk_widget_show(audio_raw_button);

	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(audio_raw_button),
		MyConfig->GetBoolValue(CONFIG_RECORD_RAW_AUDIO));
  
	// audio encoded button
	audio_encoded_button = gtk_check_button_new_with_label("Encoded");
	gtk_box_pack_start(GTK_BOX(hbox), audio_encoded_button, FALSE, FALSE, 5);
	gtk_widget_show(audio_encoded_button);

	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(audio_encoded_button),
		MyConfig->GetBoolValue(CONFIG_RECORD_ENCODED_AUDIO));
  
	// fifth row
	// standard buttons 
	AddButtonToDialog(dialog,
		" OK ", 
		GTK_SIGNAL_FUNC(on_ok_button));
	AddButtonToDialog(dialog,
		" Cancel ", 
		GTK_SIGNAL_FUNC(on_cancel_button));

	gtk_widget_show(dialog);
	gtk_grab_add(dialog);
}

/* end recording_dialog.cpp */

⌨️ 快捷键说明

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