【VC开源代码栏目提醒】:本文主要为网学会员提供file_utils.cpp,希望对需要file_utils.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. 2000-2002. All Rights Reserved.
*
* Contributor(s):
* Bill May wmay@cisco.com
* Dave Mackie dmackie@cisco.com
*/
#include "mp4live.h"
#include "mp4live_gui.h"
#include <mp4.h>
#include <libmpeg3.h>
GtkWidget* CreateFileCombo(char* entryText)
{
GList* list = NULL;
list = g_list_append(list, entryText);
for (int i = 0; i < NUM_FILE_HISTORY; i++) {
char* fileName =
MyConfig->GetStringValue(CONFIG_APP_FILE_0 + i);
if (fileName == NULL || fileName[0] == '\0'
|| !strcmp(fileName, entryText)) {
continue;
}
list = g_list_append(list, fileName);
}
GtkWidget* combo = gtk_combo_new();
gtk_combo_set_popdown_strings(GTK_COMBO(combo), list);
gtk_combo_set_use_arrows_always(GTK_COMBO(combo), 1);
GtkWidget* entry = GTK_COMBO(combo)->entry;
gtk_entry_set_text(GTK_ENTRY(entry), entryText);
return combo;
}
static GtkWidget* FileSelection;
static GtkWidget* FileEntry;
static GtkSignalFunc FileOkFunc;
static void on_filename_selected(
GtkFileSelection *widget,
gpointer data)
{
const gchar *name =
gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSelection));
gtk_entry_set_text(GTK_ENTRY(FileEntry), name);
gtk_widget_show(FileEntry);
gtk_grab_remove(FileSelection);
gtk_widget_destroy(FileSelection);
if (FileOkFunc) {
(*FileOkFunc)();
}
}
void FileBrowser(
GtkWidget* fileEntry,
GtkSignalFunc okFunc)
{
FileEntry = fileEntry;
FileOkFunc = okFunc;
FileSelection = gtk_file_selection_new("Select File");
gtk_file_selection_hide_fileop_buttons(
GTK_FILE_SELECTION(FileSelection));
gtk_signal_connect(
GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->ok_button),
"clicked",
GTK_SIGNAL_FUNC(on_filename_selected),
FileSelection);
gtk_signal_connect_object(
GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button),
"clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT(FileSelection));
gtk_widget_show(FileSelection);
gtk_grab_add(FileSelection);
}
bool IsDevice(const char* fileName)
{
// LATER might also want to stat()
return !strncmp(fileName, "/dev/", 5);
}
bool IsUrl(const char* name)
{
return (strchr(name, ':') != NULL);
}
bool IsMp4File(const char* fileName)
{
if (IsUrl(fileName)) {
return false;
}
if (strlen(fileName) <= 4) {
return false;
}
return !strcmp(&fileName[strlen(fileName) - 4], ".mp4");
}
bool IsMpeg2File(const char* fileName)
{
if (IsUrl(fileName)) {
return false;
}
if (strlen(fileName) <= 4) {
return false;
}
const char* ext3 = &fileName[strlen(fileName) - 4];
return !strcmp(ext3, ".mpg")
|| !strcmp(ext3, ".vob");
}
int32_t Mp4FileDefaultAudio(char* fileName)
{
MP4FileHandle mp4File = MP4Read(fileName);
if (mp4File == MP4_INVALID_FILE_HANDLE) {
return -1;
}
MP4TrackId trackId =
MP4FindTrackId(mp4File, 0, MP4_AUDIO_TRACK_TYPE);
MP4Close(mp4File);
if (trackId == MP4_INVALID_TRACK_ID) {
return -1;
}
return trackId;
}
int32_t Mpeg2FileDefaultAudio(char* fileName)
{
mpeg3_t* mpeg2File = mpeg3_open(fil