annotate Input/aac/libmp4v2/mp4info.cpp @ 2:6efb9e514224 trunk

[svn] Import AAC stuff.
author nenolod
date Mon, 24 Oct 2005 10:44:27 -0700
parents
children
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 * The contents of this file are subject to the Mozilla Public
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
6 *
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
9 * implied. See the License for the specific language governing
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
10 * rights and limitations under the License.
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
11 *
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
12 * The Original Code is MPEG4IP.
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
13 *
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
15 * Portions created by Cisco Systems Inc. are
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
16 * Copyright (C) Cisco Systems Inc. 2001-2002. All Rights Reserved.
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
17 *
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
18 * Contributor(s):
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
19 * Dave Mackie dmackie@cisco.com
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
20 */
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
21
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
22 #include "mp4common.h"
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
23
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
24 static char* PrintAudioInfo(
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
25 MP4FileHandle mp4File,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
26 MP4TrackId trackId)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
27 {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
28 static const char* mpeg4AudioNames[] = {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
29 "MPEG-4 Main @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
30 "MPEG-4 Main @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
31 "MPEG-4 Main @ L3",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
32 "MPEG-4 Main @ L4",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
33 "MPEG-4 Scalable @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
34 "MPEG-4 Scalable @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
35 "MPEG-4 Scalable @ L3",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
36 "MPEG-4 Scalable @ L4",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
37 "MPEG-4 Speech @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
38 "MPEG-4 Speech @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
39 "MPEG-4 Synthesis @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
40 "MPEG-4 Synthesis @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
41 "MPEG-4 Synthesis @ L3",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
42 };
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
43 static u_int8_t numMpeg4AudioTypes =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
44 sizeof(mpeg4AudioNames) / sizeof(char*);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
45
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
46 static u_int8_t mpegAudioTypes[] = {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
47 MP4_MPEG2_AAC_MAIN_AUDIO_TYPE, // 0x66
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
48 MP4_MPEG2_AAC_LC_AUDIO_TYPE, // 0x67
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
49 MP4_MPEG2_AAC_SSR_AUDIO_TYPE, // 0x68
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
50 MP4_MPEG2_AUDIO_TYPE, // 0x69
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
51 MP4_MPEG1_AUDIO_TYPE, // 0x6B
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
52 MP4_PCM16_LITTLE_ENDIAN_AUDIO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
53 MP4_VORBIS_AUDIO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
54 MP4_ALAW_AUDIO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
55 MP4_ULAW_AUDIO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
56 MP4_G723_AUDIO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
57 MP4_PCM16_BIG_ENDIAN_AUDIO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
58 };
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
59 static const char* mpegAudioNames[] = {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
60 "MPEG-2 AAC Main",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
61 "MPEG-2 AAC LC",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
62 "MPEG-2 AAC SSR",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
63 "MPEG-2 (MP3)",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
64 "MPEG-1 (MP3)",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
65 "PCM16 (little endian)",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
66 "OGG VORBIS",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
67 "G.711 aLaw",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
68 "G.711 uLaw",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
69 "G.723.1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
70 "PCM16 (big endian)",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
71 };
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
72 static u_int8_t numMpegAudioTypes =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
73 sizeof(mpegAudioTypes) / sizeof(u_int8_t);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
74
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
75 u_int8_t type =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
76 MP4GetTrackAudioType(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
77 const char* typeName = "Unknown";
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
78
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
79 if (type == MP4_MPEG4_AUDIO_TYPE) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
80 type = MP4GetAudioProfileLevel(mp4File);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
81 if (type > 0 && type <= numMpeg4AudioTypes) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
82 typeName = mpeg4AudioNames[type - 1];
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
83 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
84 typeName = "MPEG-4";
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
85 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
86 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
87 for (u_int8_t i = 0; i < numMpegAudioTypes; i++) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
88 if (type == mpegAudioTypes[i]) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
89 typeName = mpegAudioNames[i];
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
90 break;
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 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
94
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
95 u_int32_t timeScale =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
96 MP4GetTrackTimeScale(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
97
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
98 MP4Duration trackDuration =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
99 MP4GetTrackDuration(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
100
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
101 double msDuration =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
102 #ifdef _WIN32
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
103 (int64_t)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
104 #endif
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
105 MP4ConvertFromTrackDuration(mp4File, trackId,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
106 trackDuration, MP4_MSECS_TIME_SCALE);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
107
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
108 u_int32_t avgBitRate =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
109 MP4GetTrackBitRate(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
110
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
111 char *sInfo = (char*)MP4Malloc(256);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
112
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
113 // type duration avgBitrate samplingFrequency
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
114 sprintf(sInfo,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
115 "%u\taudio\t%s, %.3f secs, %u kbps, %u Hz\n",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
116 trackId,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
117 typeName,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
118 msDuration / 1000.0,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
119 (avgBitRate + 500) / 1000,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
120 timeScale);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
121
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
122 return sInfo;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
123 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
124
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
125 static char* PrintVideoInfo(
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
126 MP4FileHandle mp4File,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
127 MP4TrackId trackId)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
128 {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
129 static const char* mpeg4VideoNames[] = {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
130 "MPEG-4 Simple @ L3",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
131 "MPEG-4 Simple @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
132 "MPEG-4 Simple @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
133 "MPEG-4 Simple Scalable @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
134 "MPEG-4 Simple Scalable @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
135 "MPEG-4 Core @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
136 "MPEG-4 Core @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
137 "MPEG-4 Main @ L4",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
138 "MPEG-4 Main @ L3",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
139 "MPEG-4 Main @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
140 "MPEG-4 Main @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
141 "MPEG-4 N-Bit @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
142 "MPEG-4 Hybrid @ L2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
143 "MPEG-4 Hybrid @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
144 "MPEG-4 Hybrid @ L1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
145 };
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
146 static u_int8_t numMpeg4VideoTypes =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
147 sizeof(mpeg4VideoNames) / sizeof(char*);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
148
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
149 static u_int8_t mpegVideoTypes[] = {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
150 MP4_MPEG2_SIMPLE_VIDEO_TYPE, // 0x60
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
151 MP4_MPEG2_MAIN_VIDEO_TYPE, // 0x61
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
152 MP4_MPEG2_SNR_VIDEO_TYPE, // 0x62
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
153 MP4_MPEG2_SPATIAL_VIDEO_TYPE, // 0x63
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
154 MP4_MPEG2_HIGH_VIDEO_TYPE, // 0x64
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
155 MP4_MPEG2_442_VIDEO_TYPE, // 0x65
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
156 MP4_MPEG1_VIDEO_TYPE, // 0x6A
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
157 MP4_JPEG_VIDEO_TYPE, // 0x6C
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
158 MP4_YUV12_VIDEO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
159 MP4_H264_VIDEO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
160 MP4_H263_VIDEO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
161 MP4_H261_VIDEO_TYPE,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
162 };
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
163 static const char* mpegVideoNames[] = {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
164 "MPEG-2 Simple",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
165 "MPEG-2 Main",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
166 "MPEG-2 SNR",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
167 "MPEG-2 Spatial",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
168 "MPEG-2 High",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
169 "MPEG-2 4:2:2",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
170 "MPEG-1",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
171 "JPEG",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
172 "YUV12",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
173 "H.264",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
174 "H.263",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
175 "H.261",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
176 };
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
177 static u_int8_t numMpegVideoTypes =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
178 sizeof(mpegVideoTypes) / sizeof(u_int8_t);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
179
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
180 u_int8_t type =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
181 MP4GetTrackVideoType(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
182 const char* typeName = "Unknown";
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
183
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
184 if (type == MP4_MPEG4_VIDEO_TYPE) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
185 type = MP4GetVideoProfileLevel(mp4File);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
186 if (type > 0 && type <= numMpeg4VideoTypes) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
187 typeName = mpeg4VideoNames[type - 1];
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
188 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
189 typeName = "MPEG-4";
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
190 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
191 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
192 for (u_int8_t i = 0; i < numMpegVideoTypes; i++) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
193 if (type == mpegVideoTypes[i]) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
194 typeName = mpegVideoNames[i];
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
195 break;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
196 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
197 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
198 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
199
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
200 MP4Duration trackDuration =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
201 MP4GetTrackDuration(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
202
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
203 double msDuration =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
204 #ifdef _WIN32
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
205 (int64_t)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
206 #endif
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
207 MP4ConvertFromTrackDuration(mp4File, trackId,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
208 trackDuration, MP4_MSECS_TIME_SCALE);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
209
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
210 u_int32_t avgBitRate =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
211 MP4GetTrackBitRate(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
212
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
213 // Note not all mp4 implementations set width and height correctly
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
214 // The real answer can be buried inside the ES configuration info
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
215 u_int16_t width = MP4GetTrackVideoWidth(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
216
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
217 u_int16_t height = MP4GetTrackVideoHeight(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
218
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
219 float fps = MP4GetTrackVideoFrameRate(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
220
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
221 char *sInfo = (char*)MP4Malloc(256);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
222
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
223 // type duration avgBitrate frameSize frameRate
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
224 sprintf(sInfo,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
225 "%u\tvideo\t%s, %.3f secs, %u kbps, %ux%u @ %.2f fps\n",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
226 trackId,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
227 typeName,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
228 msDuration / 1000.0,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
229 (avgBitRate + 500) / 1000,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
230 width,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
231 height,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
232 fps
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
233 );
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
234
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
235 return sInfo;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
236 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
237
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
238 static char* PrintHintInfo(
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
239 MP4FileHandle mp4File,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
240 MP4TrackId trackId)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
241 {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
242 MP4TrackId referenceTrackId =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
243 MP4GetHintTrackReferenceTrackId(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
244
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
245 char* payloadName = NULL;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
246 MP4GetHintTrackRtpPayload(mp4File, trackId, &payloadName);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
247
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
248 char *sInfo = (char*)MP4Malloc(256);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
249
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
250 sprintf(sInfo,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
251 "%u\thint\tPayload %s for track %u\n",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
252 trackId,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
253 payloadName,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
254 referenceTrackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
255
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
256 free(payloadName);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
257
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
258 return sInfo;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
259 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
260
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
261 static char* PrintTrackInfo(
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
262 MP4FileHandle mp4File,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
263 MP4TrackId trackId)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
264 {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
265 char* trackInfo = NULL;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
266
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
267 const char* trackType =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
268 MP4GetTrackType(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
269
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
270 if (!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
271 trackInfo = PrintAudioInfo(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
272 } else if (!strcmp(trackType, MP4_VIDEO_TRACK_TYPE)) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
273 trackInfo = PrintVideoInfo(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
274 } else if (!strcmp(trackType, MP4_HINT_TRACK_TYPE)) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
275 trackInfo = PrintHintInfo(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
276 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
277 trackInfo = (char*)MP4Malloc(256);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
278 if (!strcmp(trackType, MP4_OD_TRACK_TYPE)) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
279 sprintf(trackInfo,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
280 "%u\tod\tObject Descriptors\n",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
281 trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
282 } else if (!strcmp(trackType, MP4_SCENE_TRACK_TYPE)) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
283 sprintf(trackInfo,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
284 "%u\tscene\tBIFS\n",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
285 trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
286 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
287 sprintf(trackInfo,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
288 "%u\t%s\n",
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
289 trackId, trackType);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
290 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
291 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
292
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
293 return trackInfo;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
294 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
295
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
296 extern "C" char* MP4Info(
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
297 MP4FileHandle mp4File,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
298 MP4TrackId trackId)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
299 {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
300 char* info = NULL;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
301
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
302 if (MP4_IS_VALID_FILE_HANDLE(mp4File)) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
303 try {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
304 if (trackId == MP4_INVALID_TRACK_ID) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
305 info = (char*)MP4Calloc(4*1024);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
306
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
307 sprintf(info, "Track\tType\tInfo\n");
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
308
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
309 u_int32_t numTracks = MP4GetNumberOfTracks(mp4File);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
310
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
311 for (u_int32_t i = 0; i < numTracks; i++) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
312 trackId = MP4FindTrackId(mp4File, i);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
313 char* trackInfo = PrintTrackInfo(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
314 strcat(info, trackInfo);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
315 MP4Free(trackInfo);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
316 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
317 } else {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
318 info = PrintTrackInfo(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
319 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
320 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
321 catch (MP4Error* e) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
322 delete e;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
323 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
324 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
325
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
326 return info;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
327 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
328
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
329 extern "C" char* MP4FileInfo(
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
330 const char* fileName,
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
331 MP4TrackId trackId)
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
332 {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
333 MP4FileHandle mp4File =
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
334 MP4Read(fileName);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
335
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
336 if (!mp4File) {
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
337 return NULL;
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
338 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
339
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
340 char* info = MP4Info(mp4File, trackId);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
341
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
342 MP4Close(mp4File);
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
343
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
344 return info; // caller should free this
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
345 }
6efb9e514224 [svn] Import AAC stuff.
nenolod
parents:
diff changeset
346