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

📄 mp4_utils.c

📁 aac解码器源程序在Visual C++下的实现
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * some functions for MP4 files*/#include "mp4ff.h"#include "faad.h"#include <gtk/gtk.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <xmms/plugin.h>#include <xmms/titlestring.h>#include <xmms/util.h>const char *mp4AudioNames[]=  {    "MPEG-1 Audio Layers 1,2 or 3",    "MPEG-2 low biterate (MPEG-1 extension) - MP3",    "MPEG-2 AAC Main Profile",    "MPEG-2 AAC Low Complexity profile",    "MPEG-2 AAC SSR profile",    "MPEG-4 audio (MPEG-4 AAC)",    0  };/* MPEG-4 Audio types from 14496-3 Table 1.5.1 (from mp4.h)*/const char *mpeg4AudioNames[]=  {    "!!!!MPEG-4 Audio track Invalid !!!!!!!",    "MPEG-4 AAC Main profile",    "MPEG-4 AAC Low Complexity profile",    "MPEG-4 AAC SSR profile",    "MPEG-4 AAC Long Term Prediction profile",    "MPEG-4 AAC Scalable",    "MPEG-4 CELP",    "MPEG-4 HVXC",    "MPEG-4 Text To Speech",    "MPEG-4 Main Synthetic profile",    "MPEG-4 Wavetable Synthesis profile",    "MPEG-4 MIDI Profile",    "MPEG-4 Algorithmic Synthesis and Audio FX profile"  };static GtkWidget *mp4_info_dialog = NULL;/* * find AAC track*/int getAACTrack(mp4ff_t *infile){  int i, rc;  int numTracks = mp4ff_total_tracks(infile);  printf("total-tracks: %d\n", numTracks);  for(i=0; i<numTracks; i++){    unsigned char*	buff = 0;    int			buff_size = 0;    mp4AudioSpecificConfig mp4ASC;    printf("testing-track: %d\n", i);    mp4ff_get_decoder_config(infile, i, &buff, &buff_size);    if(buff){      rc = NeAACDecAudioSpecificConfig(buff, buff_size, &mp4ASC);      g_free(buff);      if(rc < 0)	continue;      return(i);    }  }  return(-1);}uint32_t read_callback(void *user_data, void *buffer, uint32_t length){  return fread(buffer, 1, length, (FILE*)user_data);}uint32_t seek_callback(void *user_data, uint64_t position){  return fseek((FILE*)user_data, position, SEEK_SET);}mp4ff_callback_t *getMP4FF_cb(FILE *mp4file){  mp4ff_callback_t* mp4cb = malloc(sizeof(mp4ff_callback_t));  mp4cb->read = read_callback;  mp4cb->seek = seek_callback;  mp4cb->user_data = mp4file;  return mp4cb;}/* * Function to display an info box for an mp4 file. * This code is based heavily on fileinfo.c from the xmms mpg123 * plugin, and the info box layout mimics that plugin.*/void create_mp4_info_dialog (char *filename, FILE *mp4file, mp4ff_t *infile, gint mp4track){  char *window_title, *value, *value2;  static GtkWidget *filename_entry, *title_entry, *artist_entry, *album_entry;  static GtkWidget *genre_entry, *year_entry, *track_entry, *comment_entry;  static GtkWidget *mp4_info_label;  if (!mp4_info_dialog)  {    GtkWidget *dialog_vbox1, *vbox1, *hbox2, *hbox3, *hbox4;    GtkWidget *frame2, *frame3, *table1, *dialog_action_area1;    GtkWidget *filename_label, *title_label, *artist_label, *album_label;    GtkWidget *genre_label, *year_label, *track_label, *comment_label;    GtkWidget *close_button;    mp4_info_dialog = gtk_dialog_new ();    gtk_object_set_data (GTK_OBJECT (mp4_info_dialog), "mp4_info_dialog", mp4_info_dialog);    gtk_window_set_policy (GTK_WINDOW (mp4_info_dialog), TRUE, TRUE, FALSE);    gtk_signal_connect(GTK_OBJECT (mp4_info_dialog), "destroy",                                   gtk_widget_destroyed, &mp4_info_dialog);    dialog_vbox1 = GTK_DIALOG (mp4_info_dialog)->vbox;    gtk_object_set_data (GTK_OBJECT (mp4_info_dialog), "dialog_vbox1", dialog_vbox1);    gtk_container_set_border_width (GTK_CONTAINER (dialog_vbox1), 3);    hbox2 = gtk_hbox_new (FALSE, 0);    gtk_widget_ref (hbox2);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "hbox2", hbox2,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox2, FALSE, TRUE, 0);    gtk_container_set_border_width (GTK_CONTAINER (hbox2), 3);    filename_label = gtk_label_new ("Filename: ");    gtk_widget_ref (filename_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "filename_label", filename_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox2), filename_label, FALSE, FALSE, 0);    filename_entry = gtk_entry_new ();    gtk_widget_ref (filename_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "filename_entry", filename_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox2), filename_entry, TRUE, TRUE, 0);    gtk_entry_set_editable (GTK_ENTRY (filename_entry), FALSE);    hbox3 = gtk_hbox_new (FALSE, 0);    gtk_widget_ref (hbox3);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "hbox3", hbox3,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox3, TRUE, TRUE, 0);    gtk_container_set_border_width (GTK_CONTAINER (hbox3), 3);    frame2 = gtk_frame_new ("Tag Info: ");    gtk_widget_ref (frame2);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "frame2", frame2,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox3), frame2, TRUE, TRUE, 0);    table1 = gtk_table_new (6, 2, FALSE);    gtk_widget_ref (table1);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "table1", table1,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_container_add (GTK_CONTAINER (frame2), table1);    gtk_container_set_border_width (GTK_CONTAINER (table1), 5);    comment_label = gtk_label_new ("Comment: ");    gtk_widget_ref (comment_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "comment_label", comment_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), comment_label, 0, 1, 5, 6,                      (GtkAttachOptions) (GTK_FILL),                      (GtkAttachOptions) (GTK_EXPAND), 0, 0);    gtk_misc_set_alignment (GTK_MISC (comment_label), 1, 0.5);    genre_label = gtk_label_new ("Genre: ");    gtk_widget_ref (genre_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "genre_label", genre_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), genre_label, 0, 1, 4, 5,                      (GtkAttachOptions) (GTK_FILL),                      (GtkAttachOptions) (GTK_EXPAND), 0, 0);    gtk_misc_set_alignment (GTK_MISC (genre_label), 1, 0.5);    album_label = gtk_label_new ("Album: ");    gtk_widget_ref (album_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "album_label", album_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), album_label, 0, 1, 2, 3,                      (GtkAttachOptions) (GTK_FILL),                      (GtkAttachOptions) (GTK_EXPAND), 0, 0);    gtk_misc_set_alignment (GTK_MISC (album_label), 1, 0.5);    title_label = gtk_label_new ("Title: ");    gtk_widget_ref (title_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "title_label", title_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), title_label, 0, 1, 0, 1,                      (GtkAttachOptions) (GTK_FILL),                      (GtkAttachOptions) (GTK_EXPAND), 0, 0);    gtk_misc_set_alignment (GTK_MISC (title_label), 1, 0.5);    artist_label = gtk_label_new ("Artist: ");    gtk_widget_ref (artist_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "artist_label", artist_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), artist_label, 0, 1, 1, 2,                      (GtkAttachOptions) (GTK_FILL),                      (GtkAttachOptions) (GTK_EXPAND), 0, 0);    gtk_misc_set_alignment (GTK_MISC (artist_label), 1, 0.5);    year_label = gtk_label_new ("Year: ");    gtk_widget_ref (year_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "year_label", year_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), year_label, 0, 1, 3, 4,                      (GtkAttachOptions) (GTK_FILL),                      (GtkAttachOptions) (GTK_EXPAND), 0, 0);    gtk_misc_set_alignment (GTK_MISC (year_label), 1, 0.5);    hbox4 = gtk_hbox_new (FALSE, 0);    gtk_widget_ref (hbox4);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "hbox4", hbox4,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), hbox4, 1, 2, 3, 4,                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),                      (GtkAttachOptions) (GTK_FILL), 0, 0);    year_entry = gtk_entry_new ();    gtk_widget_ref (year_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "year_entry", year_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox4), year_entry, FALSE, FALSE, 0);    gtk_widget_set_usize (year_entry, 60, -2);    gtk_entry_set_editable (GTK_ENTRY (year_entry), FALSE);    track_label = gtk_label_new ("     Track: ");    gtk_widget_ref (track_label);

⌨️ 快捷键说明

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