annotate Plugins/Input/aac/src/mp4_utils.c @ 559:6bed83df3d3b trunk

[svn] ChangeLog
author nenolod
date Wed, 01 Feb 2006 14:01:16 -0800
parents e1630c75175b
children e88b60d2fdf0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
2 ** some function for MP4 file based on libmp4v2 from mpeg4ip project
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 */
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
4 #include <gtk/gtk.h>
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
5 #include "mp4.h"
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
6 #include "faad.h"
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 const char *mp4AudioNames[]=
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
10 "MPEG-1 Audio Layers 1,2 or 3",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
11 "MPEG-2 low biterate (MPEG-1 extension) - MP3",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
12 "MPEG-2 AAC Main Profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
13 "MPEG-2 AAC Low Complexity profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
14 "MPEG-2 AAC SSR profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
15 "MPEG-4 audio (MPEG-4 AAC)",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
16 0
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
17 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
18
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19 const u_int8_t mp4AudioTypes[] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21 MP4_MPEG1_AUDIO_TYPE, // 0x6B
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 MP4_MPEG2_AUDIO_TYPE, // 0x69
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23 MP4_MPEG2_AAC_MAIN_AUDIO_TYPE, // 0x66
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24 MP4_MPEG2_AAC_LC_AUDIO_TYPE, // 0x67
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 MP4_MPEG2_AAC_SSR_AUDIO_TYPE, // 0x68
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 MP4_MPEG4_AUDIO_TYPE, // 0x40
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 0
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 /* MPEG-4 Audio types from 14496-3 Table 1.5.1 (from mp4.h)*/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31 const char *mpeg4AudioNames[]=
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33 "!!!!MPEG-4 Audio track Invalid !!!!!!!",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 "MPEG-4 AAC Main profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 "MPEG-4 AAC Low Complexity profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 "MPEG-4 AAC SSR profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 "MPEG-4 AAC Long Term Prediction profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38 "MPEG-4 AAC Scalable",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 "MPEG-4 CELP",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 "MPEG-4 HVXC",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 "MPEG-4 Text To Speech",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 "MPEG-4 Main Synthetic profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43 "MPEG-4 Wavetable Synthesis profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 "MPEG-4 MIDI Profile",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 "MPEG-4 Algorithmic Synthesis and Audio FX profile"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 int getAACTrack(MP4FileHandle file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 int numTracks = MP4GetNumberOfTracks(file, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 int i=0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 for(i=0;i<numTracks;i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54 MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 const char *trackType = MP4GetTrackType(file, trackID);
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
56
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){//we found audio track !
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
58 u_int8_t audiotype = MP4GetTrackAudioMpeg4Type(file, trackID);
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
59 if(audiotype !=0)
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
60 return(trackID);
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
61 else
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
62 return(-1);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 return(-1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 int getAudioTrack(MP4FileHandle file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 int numTracks = MP4GetNumberOfTracks(file, NULL,0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 int i=0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73 for(i=0;i<numTracks;i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 const char *trackType = MP4GetTrackType(file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 return(trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 return(-1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 int getVideoTrack(MP4FileHandle file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 int numTracks = MP4GetNumberOfTracks(file, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 int i=0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 for(i=0;i<numTracks; i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 const char *trackType = MP4GetTrackType(file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 if(!strcmp(trackType, MP4_VIDEO_TRACK_TYPE)){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 return (trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 return(-1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 void getMP4info(char* file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 MP4FileHandle mp4file;
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
101 //MP4Duration trackDuration;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 int numTracks;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103 int i=0;
339
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
104 char *value;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106 if(!(mp4file = MP4Read(file,0)))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 //MP4Dump(mp4file, 0, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 numTracks = MP4GetNumberOfTracks(mp4file, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 g_print("there are %d track(s)\n", numTracks);
339
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
111
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
112 MP4GetMetadataName(mp4file, &value);
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
113 g_print(" name : %s\n", value);
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
114
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
115 MP4GetMetadataArtist(mp4file, &value);
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
116 g_print(" artist : %s\n", value);
e1630c75175b [svn] MP4 metadata retrieval support.
nenolod
parents: 199
diff changeset
117
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 for(i=0;i<numTracks;i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 MP4TrackId trackID = MP4FindTrackId(mp4file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 const char *trackType = MP4GetTrackType(mp4file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 printf("Track %d, %s", trackID, trackType);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){//we found audio track !
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 int j=0;
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
124 u_int8_t audiotype = MP4GetTrackAudioMpeg4Type(mp4file, trackID);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 while(mp4AudioTypes[j]){ // what kind of audio is ?
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 if(mp4AudioTypes[j] == audiotype){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127 if(mp4AudioTypes[j] == MP4_MPEG4_AUDIO_TYPE){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 audiotype = MP4GetTrackAudioMpeg4Type(mp4file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 g_print(" %s", mpeg4AudioNames[audiotype]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 else{
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
132 g_print(" %s", mp4AudioNames[j]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 }
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
134 g_print(" duration : %d",
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
135 (int)MP4ConvertFromTrackDuration(mp4file, trackID,
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
136 MP4GetTrackDuration(mp4file,
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
137 trackID),
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
138 MP4_MSECS_TIME_SCALE));
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 j++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 }
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
143 g_print("\n");
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 MP4Close(mp4file);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 }