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

📄 mp4_utils.c

📁 aac解码器源程序在Visual C++下的实现
💻 C
📖 第 1 页 / 共 2 页
字号:
    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "track_label", track_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox4), track_label, FALSE, FALSE, 0);    gtk_misc_set_alignment (GTK_MISC (track_label), 1, 0.5);    track_entry = gtk_entry_new ();    gtk_widget_ref (track_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "track_entry", track_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox4), track_entry, FALSE, FALSE, 0);    gtk_widget_set_usize (track_entry, 60, -2);    gtk_entry_set_editable (GTK_ENTRY (track_entry), FALSE);    title_entry = gtk_entry_new ();    gtk_widget_ref (title_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "title_entry", title_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), title_entry, 1, 2, 0, 1,                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),                      (GtkAttachOptions) (0), 0, 0);    gtk_entry_set_editable (GTK_ENTRY (title_entry), FALSE);    artist_entry = gtk_entry_new ();    gtk_widget_ref (artist_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "artist_entry", artist_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), artist_entry, 1, 2, 1, 2,                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),                      (GtkAttachOptions) (0), 0, 0);    gtk_entry_set_editable (GTK_ENTRY (artist_entry), FALSE);    album_entry = gtk_entry_new ();    gtk_widget_ref (album_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "album_entry", album_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), album_entry, 1, 2, 2, 3,                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),                      (GtkAttachOptions) (0), 0, 0);    gtk_entry_set_editable (GTK_ENTRY (album_entry), FALSE);    genre_entry = gtk_entry_new ();    gtk_widget_ref (genre_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "genre_entry", genre_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), genre_entry, 1, 2, 4, 5,                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),                      (GtkAttachOptions) (0), 0, 0);    gtk_entry_set_editable (GTK_ENTRY (genre_entry), FALSE);    comment_entry = gtk_entry_new ();    gtk_widget_ref (comment_entry);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "comment_entry", comment_entry,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_table_attach (GTK_TABLE (table1), comment_entry, 1, 2, 5, 6,                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),                      (GtkAttachOptions) (0), 0, 0);    gtk_entry_set_editable (GTK_ENTRY (comment_entry), FALSE);    frame3 = gtk_frame_new ("MP4 Info: ");    gtk_widget_ref (frame3);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "frame3", frame3,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (hbox3), frame3, FALSE, TRUE, 0);    vbox1 = gtk_vbox_new (FALSE, 0);    gtk_widget_ref (vbox1);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "vbox1", vbox1,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_container_add (GTK_CONTAINER (frame3), vbox1);    gtk_container_set_border_width (GTK_CONTAINER (vbox1), 5);    mp4_info_label = gtk_label_new ("");    gtk_widget_ref (mp4_info_label);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "mp4_info_label", mp4_info_label,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (vbox1), mp4_info_label, TRUE, TRUE, 0);    gtk_label_set_justify (GTK_LABEL (mp4_info_label), GTK_JUSTIFY_LEFT);    gtk_misc_set_alignment (GTK_MISC (mp4_info_label), 0, 0);    dialog_action_area1 = GTK_DIALOG (mp4_info_dialog)->action_area;    gtk_object_set_data (GTK_OBJECT (mp4_info_dialog), "dialog_action_area1", dialog_action_area1);    gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 4);    close_button = gtk_button_new_with_label ("Close");    gtk_widget_ref (close_button);    gtk_object_set_data_full (GTK_OBJECT (mp4_info_dialog), "close_button", close_button,                              (GtkDestroyNotify) gtk_widget_unref);    gtk_box_pack_start (GTK_BOX (dialog_action_area1), close_button, FALSE, FALSE, 0);    gtk_signal_connect_object (GTK_OBJECT (close_button), "clicked",                               GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (mp4_info_dialog));  }  window_title = g_strdup_printf("File Info - %s", g_basename(filename));  gtk_window_set_title (GTK_WINDOW (mp4_info_dialog), window_title);  g_free(window_title);  gtk_entry_set_text (GTK_ENTRY (filename_entry), filename);  gtk_entry_set_text (GTK_ENTRY (title_entry), "");  gtk_entry_set_text (GTK_ENTRY (artist_entry), "");  gtk_entry_set_text (GTK_ENTRY (album_entry), "");  gtk_entry_set_text (GTK_ENTRY (year_entry), "");  gtk_entry_set_text (GTK_ENTRY (track_entry), "");  gtk_entry_set_text (GTK_ENTRY (genre_entry), "");  gtk_entry_set_text (GTK_ENTRY (comment_entry), "");  if ((mp4ff_meta_get_title(infile, &value)) && value != NULL) {    gtk_entry_set_text (GTK_ENTRY(title_entry), value);    g_free(value);  }  if ((mp4ff_meta_get_artist(infile, &value)) && value != NULL) {    gtk_entry_set_text (GTK_ENTRY(artist_entry), value);    g_free(value);  }  if ((mp4ff_meta_get_album(infile, &value)) && value != NULL) {    gtk_entry_set_text (GTK_ENTRY(album_entry), value);    g_free(value);  }  if ((mp4ff_meta_get_date(infile, &value)) && value != NULL) {    gtk_entry_set_text (GTK_ENTRY(year_entry), value);    g_free(value);  }  if ((mp4ff_meta_get_track(infile, &value)) && value != NULL) {    if ((mp4ff_meta_get_totaltracks(infile, &value2)) && value2 != NULL) {      char *tmp = g_strdup_printf("%s of %s", value, value2);      g_free(value2);      g_free(value);      value = tmp;    }    gtk_entry_set_text (GTK_ENTRY(track_entry), value);    g_free(value);  }  if ((mp4ff_meta_get_genre(infile, &value)) && value != NULL) {    gtk_entry_set_text (GTK_ENTRY(genre_entry), value);    g_free(value);  }  if ((mp4ff_meta_get_comment(infile, &value)) && value != NULL) {    gtk_entry_set_text (GTK_ENTRY(comment_entry), value);    g_free(value);  }  // Get the length of the track.  double track_duration = mp4ff_get_track_duration(infile, mp4track);  unsigned long time_scale = mp4ff_time_scale(infile, mp4track);  unsigned long length = (track_duration / time_scale);  int min = length / 60;  int sec = length % 60;  // Get other info about the track.  unsigned long bitrate = mp4ff_get_avg_bitrate(infile, mp4track) / 1000;  unsigned long samplerate = mp4ff_get_sample_rate(infile, mp4track);  unsigned long channels = mp4ff_get_channel_count(infile, mp4track);  unsigned long audio_type = mp4ff_get_audio_type(infile, mp4track);  fseek(mp4file, 0, SEEK_END);  int filesize = ftell(mp4file) / 1024;  value = g_strdup_printf("Length: %d:%d\nAvg. Bitrate: %ld kbps\nSample Rate: %ld Hz\nChannels: %ld\nAudio Type: %ld\nFile Size: %d KB", min, sec, bitrate, samplerate, channels, audio_type, filesize);  gtk_label_set_text (GTK_LABEL(mp4_info_label), value);  g_free(value);  gtk_widget_show_all(mp4_info_dialog);}void getMP4info(char* filename, FILE* mp4file){  mp4ff_callback_t*	mp4cb;  mp4ff_t*		infile;  gint			mp4track;  mp4cb = getMP4FF_cb(mp4file);  if ((infile = mp4ff_open_read_metaonly(mp4cb)) &&      ((mp4track = getAACTrack(infile)) >= 0)){    create_mp4_info_dialog (filename, mp4file, infile, mp4track);  }  if(infile) mp4ff_close(infile);  if(mp4cb) g_free(mp4cb);}/* Get the xmms titlestring for the file based on metadata.The following code was adapted from the gtkpod project, specificallymp4file.c (C) Jorg Schuler, but written to use the mp4ff library.  Thempg123 input plugin for xmms was used as a guide for this function.	--Jason Arroyo, 2004 */char *getMP4title(mp4ff_t *infile, char *filename) {	char *ret=NULL;	gchar *value, *path, *temp;	TitleInput *input;	XMMS_NEW_TITLEINPUT(input);	// Fill in the TitleInput with the relevant data	// from the mp4 file that can be used to display the title.	mp4ff_meta_get_title(infile, &input->track_name);        mp4ff_meta_get_artist(infile, &input->performer);	mp4ff_meta_get_album(infile, &input->album_name);	if (mp4ff_meta_get_track(infile, &value) && value != NULL) {		input->track_number = atoi(value);		g_free(value);	}	if (mp4ff_meta_get_date(infile, &value) && value != NULL) {		input->year = atoi(value);		g_free(value);	}	mp4ff_meta_get_genre(infile, &input->genre);	mp4ff_meta_get_comment(infile, &input->comment);	input->file_name = g_strdup(g_basename(filename));	path = g_strdup(filename);	temp = strrchr(path, '.');	if (temp != NULL) {++temp;}	input->file_ext = g_strdup_printf("%s", temp);	temp = strrchr(path, '/');	if (temp) {*temp = '\0';}	input->file_path = g_strdup_printf("%s/", path);	// Use the default xmms title format to format the	// title from the above info.	ret = xmms_get_titlestring(xmms_get_gentitle_format(), input);        g_free(input->track_name);        g_free(input->performer);        g_free(input->album_name);        g_free(input->genre);        g_free(input->comment);        g_free(input->file_name);        g_free(input->file_ext);        g_free(input->file_path);	g_free(input);	g_free(path);	return ret;}

⌨️ 快捷键说明

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