annotate Input/aac/src/mp4_utils.c @ 2:6efb9e514224 trunk

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