annotate Plugins/Input/aac/src/mp4_utils.c @ 250:b9e6cdce7219 trunk

[svn] Reduce code duplication and add a return statement.
author chainsaw
date Sat, 03 Dec 2005 09:27:11 -0800
parents 0a2ad94e8607
children e1630c75175b
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 g_print("%s\n", mpeg4AudioNames[audiotype]);
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
60 if(audiotype !=0)
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
61 return(trackID);
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
62 else
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
63 return(-1);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 return(-1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 int getAudioTrack(MP4FileHandle file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 int numTracks = MP4GetNumberOfTracks(file, NULL,0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 int i=0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 for(i=0;i<numTracks;i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 const char *trackType = MP4GetTrackType(file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 return(trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 return(-1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 int getVideoTrack(MP4FileHandle file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 int numTracks = MP4GetNumberOfTracks(file, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 int i=0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 for(i=0;i<numTracks; i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 const char *trackType = MP4GetTrackType(file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 if(!strcmp(trackType, MP4_VIDEO_TRACK_TYPE)){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 return (trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 return(-1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99 void getMP4info(char* file)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101 MP4FileHandle mp4file;
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
102 //MP4Duration trackDuration;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103 int numTracks;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104 int i=0;
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);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111 for(i=0;i<numTracks;i++){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112 MP4TrackId trackID = MP4FindTrackId(mp4file, i, NULL, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113 const char *trackType = MP4GetTrackType(mp4file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 printf("Track %d, %s", trackID, trackType);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){//we found audio track !
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 int j=0;
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
117 u_int8_t audiotype = MP4GetTrackAudioMpeg4Type(mp4file, trackID);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 while(mp4AudioTypes[j]){ // what kind of audio is ?
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 if(mp4AudioTypes[j] == audiotype){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 if(mp4AudioTypes[j] == MP4_MPEG4_AUDIO_TYPE){
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 audiotype = MP4GetTrackAudioMpeg4Type(mp4file, trackID);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 g_print(" %s", mpeg4AudioNames[audiotype]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124 else{
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
125 g_print(" %s", mp4AudioNames[j]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 }
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
127 g_print(" duration : %d",
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
128 (int)MP4ConvertFromTrackDuration(mp4file, trackID,
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
129 MP4GetTrackDuration(mp4file,
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
130 trackID),
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
131 MP4_MSECS_TIME_SCALE));
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 j++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 }
199
0a2ad94e8607 [svn] Synced with bmp-mp4. Build system is fragile, but should work now.
chainsaw
parents: 61
diff changeset
136 g_print("\n");
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 MP4Close(mp4file);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 }