annotate Input/aac/libmp4v2/isma.cpp @ 38:4e0397865a31 trunk

[svn] Regenerate a bunch of stuff :)
author nenolod
date Wed, 26 Oct 2005 10:57:27 -0700
parents 6a86fdd4dea4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
1 /*
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
2 * The contents of this file are subject to the Mozilla Public
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
6 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
9 * implied. See the License for the specific language governing
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
10 * rights and limitations under the License.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
11 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
12 * The Original Code is MPEG4IP.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
13 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
15 * Portions created by Cisco Systems Inc. are
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
16 * Copyright (C) Cisco Systems Inc. 2001 - 2004. All Rights Reserved.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
17 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
18 * 3GPP features implementation is based on 3GPP's TS26.234-v5.60,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
19 * and was contributed by Ximpo Group Ltd.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
20 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
21 * Portions created by Ximpo Group Ltd. are
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
22 * Copyright (C) Ximpo Group Ltd. 2003, 2004. All Rights Reserved.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
23 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
24 * Contributor(s):
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
25 * Dave Mackie dmackie@cisco.com
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
26 * Alix Marchandise-Franquet alix@cisco.com
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
27 * Ximpo Group Ltd. mp4v2@ximpo.com
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
28 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
29
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
30 #include "mp4common.h"
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
31
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
32 static const u_int8_t BifsV2Config[3] = {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
33 0x00, 0x00, 0x60 // IsCommandStream = 1, PixelMetric = 1
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
34 };
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
35
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
36 void MP4File::MakeIsmaCompliant(bool addIsmaComplianceSdp)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
37 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
38 ProtectWriteOperation("MP4MakeIsmaCompliant");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
39
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
40 if (m_useIsma) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
41 // already done
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
42 return;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
43 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
44
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
45 // find first audio and/or video tracks
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
46
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
47 MP4TrackId audioTrackId = MP4_INVALID_TRACK_ID;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
48 try {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
49 audioTrackId = FindTrackId(0, MP4_AUDIO_TRACK_TYPE);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
50 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
51 catch (MP4Error* e) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
52 delete e;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
53 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
54
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
55 MP4TrackId videoTrackId = MP4_INVALID_TRACK_ID;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
56 try {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
57 videoTrackId = FindTrackId(0, MP4_VIDEO_TRACK_TYPE);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
58 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
59 catch (MP4Error* e) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
60 delete e;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
61 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
62 if (audioTrackId == MP4_INVALID_TRACK_ID &&
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
63 videoTrackId == MP4_INVALID_TRACK_ID) return;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
64
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
65 const char *audio_media_data_name, *video_media_data_name;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
66 if (audioTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
67 audio_media_data_name = MP4GetTrackMediaDataName(this, audioTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
68 if (!(ATOMID(audio_media_data_name) == ATOMID("mp4a") ||
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
69 ATOMID(audio_media_data_name) == ATOMID("enca"))) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
70 VERBOSE_ERROR(m_verbosity,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
71 printf("MakeIsmaCompliant:can't make ISMA compliant when file contains an %s track\n", audio_media_data_name);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
72 );
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
73 return;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
74 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
75 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
76 //
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
77 // Note - might have to check for avc1 here...
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
78 if (videoTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
79 video_media_data_name = MP4GetTrackMediaDataName(this, videoTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
80 if (!(ATOMID(video_media_data_name) == ATOMID("mp4v") ||
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
81 ATOMID(video_media_data_name) == ATOMID("encv"))) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
82 VERBOSE_ERROR(m_verbosity,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
83 printf("MakeIsmaCompliant:can't make ISMA compliant when file contains an %s track\n", video_media_data_name);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
84 );
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
85 return;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
86 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
87 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
88
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
89 m_useIsma = true;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
90
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
91 u_int64_t fileMsDuration =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
92 ConvertFromMovieDuration(GetDuration(), MP4_MSECS_TIME_SCALE);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
93
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
94 // delete any existing OD track
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
95 if (m_odTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
96 DeleteTrack(m_odTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
97 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
98
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
99 AddODTrack();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
100 SetODProfileLevel(0xFF);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
101
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
102 if (audioTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
103 AddTrackToOd(audioTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
104 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
105
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
106 if (videoTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
107 AddTrackToOd(videoTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
108 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
109
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
110 // delete any existing scene track
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
111 MP4TrackId sceneTrackId = MP4_INVALID_TRACK_ID;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
112 try {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
113 sceneTrackId = FindTrackId(0, MP4_SCENE_TRACK_TYPE);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
114 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
115 catch (MP4Error *e) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
116 delete e;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
117 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
118 if (sceneTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
119 DeleteTrack(sceneTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
120 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
121
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
122 // add scene track
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
123 sceneTrackId = AddSceneTrack();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
124 SetSceneProfileLevel(0xFF);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
125 SetGraphicsProfileLevel(0xFF);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
126 SetTrackIntegerProperty(sceneTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
127 "mdia.minf.stbl.stsd.mp4s.esds.decConfigDescr.objectTypeId",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
128 MP4SystemsV2ObjectType);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
129
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
130 SetTrackESConfiguration(sceneTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
131 BifsV2Config, sizeof(BifsV2Config));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
132
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
133 u_int8_t* pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
134 u_int64_t numBytes = 0;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
135
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
136 // write OD Update Command
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
137 CreateIsmaODUpdateCommandFromFileForFile(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
138 m_odTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
139 audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
140 videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
141 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
142 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
143
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
144 WriteSample(m_odTrackId, pBytes, numBytes, fileMsDuration);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
145
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
146 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
147 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
148
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
149 // write BIFS Scene Replace Command
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
150 CreateIsmaSceneCommand(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
151 MP4_IS_VALID_TRACK_ID(audioTrackId),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
152 MP4_IS_VALID_TRACK_ID(videoTrackId),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
153 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
154 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
155
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
156 WriteSample(sceneTrackId, pBytes, numBytes, fileMsDuration);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
157
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
158 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
159 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
160
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
161 // add session level sdp
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
162 CreateIsmaIodFromFile(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
163 m_odTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
164 sceneTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
165 audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
166 videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
167 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
168 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
169
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
170 char* iodBase64 = MP4ToBase64(pBytes, numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
171
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
172 char* sdpBuf = (char*)MP4Calloc(strlen(iodBase64) + 256);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
173
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
174 if (addIsmaComplianceSdp) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
175 strcpy(sdpBuf, "a=isma-compliance:1,1.0,1\015\012");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
176 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
177
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
178 sprintf(&sdpBuf[strlen(sdpBuf)],
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
179 "a=mpeg4-iod: \042data:application/mpeg4-iod;base64,%s\042\015\012",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
180 iodBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
181
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
182 SetSessionSdp(sdpBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
183
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
184 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
185 printf("IOD SDP = %s\n", sdpBuf));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
186
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
187 MP4Free(iodBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
188 iodBase64 = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
189 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
190 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
191 MP4Free(sdpBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
192 sdpBuf = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
193 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
194
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
195 static void CloneIntegerProperty(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
196 MP4Descriptor* pDest,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
197 MP4DescriptorProperty* pSrc,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
198 const char* name)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
199 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
200 MP4IntegerProperty* pGetProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
201 MP4IntegerProperty* pSetProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
202
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
203 pSrc->FindProperty(name, (MP4Property**)&pGetProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
204 pDest->FindProperty(name, (MP4Property**)&pSetProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
205
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
206 pSetProperty->SetValue(pGetProperty->GetValue());
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
207 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
208
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
209 void MP4File::CreateIsmaIodFromFile(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
210 MP4TrackId odTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
211 MP4TrackId sceneTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
212 MP4TrackId audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
213 MP4TrackId videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
214 u_int8_t** ppBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
215 u_int64_t* pNumBytes)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
216 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
217 MP4Descriptor* pIod = new MP4IODescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
218 pIod->SetTag(MP4IODescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
219 pIod->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
220
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
221 MP4Atom* pIodsAtom = FindAtom("moov.iods");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
222 ASSERT(pIodsAtom);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
223 MP4DescriptorProperty* pSrcIod =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
224 (MP4DescriptorProperty*)pIodsAtom->GetProperty(2);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
225
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
226 CloneIntegerProperty(pIod, pSrcIod, "objectDescriptorId");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
227 CloneIntegerProperty(pIod, pSrcIod, "ODProfileLevelId");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
228 CloneIntegerProperty(pIod, pSrcIod, "sceneProfileLevelId");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
229 CloneIntegerProperty(pIod, pSrcIod, "audioProfileLevelId");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
230 CloneIntegerProperty(pIod, pSrcIod, "visualProfileLevelId");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
231 CloneIntegerProperty(pIod, pSrcIod, "graphicsProfileLevelId");
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
232
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
233 // mutate esIds from MP4ESIDIncDescrTag to MP4ESDescrTag
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
234 MP4DescriptorProperty* pEsProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
235 pIod->FindProperty("esIds", (MP4Property**)&pEsProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
236 pEsProperty->SetTags(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
237
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
238 MP4IntegerProperty* pSetProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
239 MP4IntegerProperty* pSceneESID;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
240 MP4IntegerProperty* pOdESID;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
241
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
242 // OD
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
243 MP4Descriptor* pOdEsd =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
244 pEsProperty->AddDescriptor(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
245 pOdEsd->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
246
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
247 pOdEsd->FindProperty("ESID",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
248 (MP4Property**)&pOdESID);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
249
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
250 // we set the OD ESID to a non-zero unique value
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
251 pOdESID->SetValue(m_odTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
252
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
253 pOdEsd->FindProperty("URLFlag",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
254 (MP4Property**)&pSetProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
255 pSetProperty->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
256
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
257 u_int8_t* pBytes;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
258 u_int64_t numBytes;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
259
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
260 CreateIsmaODUpdateCommandFromFileForStream(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
261 audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
262 videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
263 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
264 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
265
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
266 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
267 printf("OD data =\n"); MP4HexDump(pBytes, numBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
268
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
269 char* odCmdBase64 = MP4ToBase64(pBytes, numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
270
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
271 char* urlBuf = (char*)MP4Malloc(strlen(odCmdBase64) + 64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
272
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
273 sprintf(urlBuf,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
274 "data:application/mpeg4-od-au;base64,%s",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
275 odCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
276
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
277 MP4StringProperty* pUrlProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
278 pOdEsd->FindProperty("URL",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
279 (MP4Property**)&pUrlProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
280 pUrlProperty->SetValue(urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
281
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
282 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
283 printf("OD data URL = \042%s\042\n", urlBuf));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
284
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
285 MP4Free(odCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
286 odCmdBase64 = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
287 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
288 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
289 MP4Free(urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
290 urlBuf = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
291
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
292 MP4DescriptorProperty* pSrcDcd = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
293
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
294 // HACK temporarily point to scene decoder config
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
295 FindProperty(MakeTrackName(odTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
296 "mdia.minf.stbl.stsd.mp4s.esds.decConfigDescr"),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
297 (MP4Property**)&pSrcDcd);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
298 ASSERT(pSrcDcd);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
299 MP4Property* pOrgOdEsdProperty =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
300 pOdEsd->GetProperty(8);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
301 pOdEsd->SetProperty(8, pSrcDcd);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
302
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
303 // bufferSizeDB needs to be set appropriately
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
304 MP4BitfieldProperty* pBufferSizeProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
305 pOdEsd->FindProperty("decConfigDescr.bufferSizeDB",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
306 (MP4Property**)&pBufferSizeProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
307 ASSERT(pBufferSizeProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
308 pBufferSizeProperty->SetValue(numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
309
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
310 // SL config needs to change from 2 (file) to 1 (null)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
311 pOdEsd->FindProperty("slConfigDescr.predefined",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
312 (MP4Property**)&pSetProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
313 pSetProperty->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
314
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
315
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
316 // Scene
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
317 MP4Descriptor* pSceneEsd =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
318 pEsProperty->AddDescriptor(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
319 pSceneEsd->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
320
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
321 pSceneEsd->FindProperty("ESID",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
322 (MP4Property**)&pSceneESID);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
323 // we set the Scene ESID to a non-zero unique value
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
324 pSceneESID->SetValue(sceneTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
325
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
326 pSceneEsd->FindProperty("URLFlag",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
327 (MP4Property**)&pSetProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
328 pSetProperty->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
329
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
330 CreateIsmaSceneCommand(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
331 MP4_IS_VALID_TRACK_ID(audioTrackId),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
332 MP4_IS_VALID_TRACK_ID(videoTrackId),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
333 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
334 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
335
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
336 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
337 printf("Scene data =\n"); MP4HexDump(pBytes, numBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
338
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
339 char *sceneCmdBase64 = MP4ToBase64(pBytes, numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
340
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
341 urlBuf = (char*)MP4Malloc(strlen(sceneCmdBase64) + 64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
342 sprintf(urlBuf,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
343 "data:application/mpeg4-bifs-au;base64,%s",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
344 sceneCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
345
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
346 pSceneEsd->FindProperty("URL",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
347 (MP4Property**)&pUrlProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
348 pUrlProperty->SetValue(urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
349
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
350 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
351 printf("Scene data URL = \042%s\042\n", urlBuf));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
352
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
353 MP4Free(sceneCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
354 sceneCmdBase64 = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
355 MP4Free(urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
356 urlBuf = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
357 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
358 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
359
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
360 // HACK temporarily point to scene decoder config
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
361 FindProperty(MakeTrackName(sceneTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
362 "mdia.minf.stbl.stsd.mp4s.esds.decConfigDescr"),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
363 (MP4Property**)&pSrcDcd);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
364 ASSERT(pSrcDcd);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
365 MP4Property* pOrgSceneEsdProperty =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
366 pSceneEsd->GetProperty(8);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
367 pSceneEsd->SetProperty(8, pSrcDcd);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
368
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
369 // bufferSizeDB needs to be set
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
370 pBufferSizeProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
371 pSceneEsd->FindProperty("decConfigDescr.bufferSizeDB",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
372 (MP4Property**)&pBufferSizeProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
373 ASSERT(pBufferSizeProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
374 pBufferSizeProperty->SetValue(numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
375
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
376 // SL config needs to change from 2 (file) to 1 (null)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
377 pSceneEsd->FindProperty("slConfigDescr.predefined",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
378 (MP4Property**)&pSetProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
379 pSetProperty->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
380
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
381
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
382 // finally get the whole thing written to a memory
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
383 pIod->WriteToMemory(this, ppBytes, pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
384
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
385
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
386 // now carefully replace esd properties before destroying
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
387 pOdEsd->SetProperty(8, pOrgOdEsdProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
388 pSceneEsd->SetProperty(8, pOrgSceneEsdProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
389 pSceneESID->SetValue(0); // restore 0 value
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
390 pOdESID->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
391
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
392 delete pIod;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
393
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
394 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
395 printf("IOD data =\n"); MP4HexDump(*ppBytes, *pNumBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
396 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
397
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
398 void MP4File::CreateIsmaIodFromParams(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
399 u_int8_t videoProfile,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
400 u_int32_t videoBitrate,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
401 u_int8_t* videoConfig,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
402 u_int32_t videoConfigLength,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
403 u_int8_t audioProfile,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
404 u_int32_t audioBitrate,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
405 u_int8_t* audioConfig,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
406 u_int32_t audioConfigLength,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
407 u_int8_t** ppIodBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
408 u_int64_t* pIodNumBytes)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
409 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
410 MP4IntegerProperty* pInt;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
411 u_int8_t* pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
412 u_int64_t numBytes;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
413
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
414 // Create the IOD
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
415 MP4Descriptor* pIod = new MP4IODescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
416 pIod->SetTag(MP4IODescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
417 pIod->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
418
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
419 // Set audio and video profileLevels
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
420 pIod->FindProperty("audioProfileLevelId",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
421 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
422 pInt->SetValue(audioProfile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
423
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
424 pIod->FindProperty("visualProfileLevelId",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
425 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
426 pInt->SetValue(videoProfile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
427
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
428 // Mutate esIds from MP4ESIDIncDescrTag to MP4ESDescrTag
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
429 MP4DescriptorProperty* pEsProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
430 pIod->FindProperty("esIds", (MP4Property**)&pEsProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
431 pEsProperty->SetTags(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
432
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
433 // Add ES Descriptors
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
434
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
435 // Scene
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
436 CreateIsmaSceneCommand(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
437 (audioProfile != 0xFF),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
438 (videoProfile != 0xFF),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
439 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
440 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
441
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
442 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
443 printf("Scene data =\n"); MP4HexDump(pBytes, numBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
444
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
445 char* sceneCmdBase64 = MP4ToBase64(pBytes, numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
446
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
447 char* urlBuf =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
448 (char*)MP4Malloc(strlen(sceneCmdBase64) + 64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
449 sprintf(urlBuf,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
450 "data:application/mpeg4-bifs-au;base64,%s",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
451 sceneCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
452
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
453 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
454 printf("Scene data URL = \042%s\042\n", urlBuf));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
455
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
456 /* MP4Descriptor* pSceneEsd = */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
457 CreateESD(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
458 pEsProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
459 201, // esid
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
460 MP4SystemsV2ObjectType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
461 MP4SceneDescriptionStreamType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
462 numBytes, // bufferSize
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
463 numBytes * 8, // bitrate
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
464 BifsV2Config,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
465 sizeof(BifsV2Config),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
466 urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
467
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
468 MP4Free(sceneCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
469 sceneCmdBase64 = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
470 MP4Free(urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
471 urlBuf = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
472 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
473 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
474
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
475 // OD
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
476
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
477 // Video
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
478 MP4DescriptorProperty* pVideoEsdProperty =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
479 new MP4DescriptorProperty();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
480 pVideoEsdProperty->SetTags(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
481
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
482 /* MP4Descriptor* pVideoEsd = */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
483 CreateESD(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
484 pVideoEsdProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
485 20, // esid
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
486 MP4_MPEG4_VIDEO_TYPE,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
487 MP4VisualStreamType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
488 videoBitrate / 8, // bufferSize
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
489 videoBitrate,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
490 videoConfig,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
491 videoConfigLength,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
492 NULL);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
493
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
494 // Audio
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
495 MP4DescriptorProperty* pAudioEsdProperty =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
496 new MP4DescriptorProperty();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
497 pAudioEsdProperty->SetTags(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
498
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
499 /* MP4Descriptor* pAudioEsd = */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
500 CreateESD(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
501 pAudioEsdProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
502 10, // esid
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
503 MP4_MPEG4_AUDIO_TYPE,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
504 MP4AudioStreamType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
505 audioBitrate / 8, // bufferSize
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
506 audioBitrate,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
507 audioConfig,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
508 audioConfigLength,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
509 NULL);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
510
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
511 CreateIsmaODUpdateCommandForStream(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
512 pAudioEsdProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
513 pVideoEsdProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
514 &pBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
515 &numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
516
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
517 // cleanup temporary descriptor properties
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
518 delete pAudioEsdProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
519 delete pVideoEsdProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
520
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
521 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
522 printf("OD data = %llu bytes\n", numBytes); MP4HexDump(pBytes, numBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
523
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
524 char* odCmdBase64 = MP4ToBase64(pBytes, numBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
525
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
526 urlBuf = (char*)MP4Malloc(strlen(odCmdBase64) + 64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
527
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
528 sprintf(urlBuf,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
529 "data:application/mpeg4-od-au;base64,%s",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
530 odCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
531
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
532 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
533 printf("OD data URL = \042%s\042\n", urlBuf));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
534
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
535 /* MP4Descriptor* pOdEsd = */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
536 CreateESD(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
537 pEsProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
538 101,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
539 MP4SystemsV1ObjectType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
540 MP4ObjectDescriptionStreamType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
541 numBytes, // bufferSize
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
542 numBytes * 8, // bitrate
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
543 NULL, // config
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
544 0, // configLength
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
545 urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
546
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
547 MP4Free(odCmdBase64);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
548 odCmdBase64 = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
549 MP4Free(pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
550 pBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
551 MP4Free(urlBuf);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
552 urlBuf = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
553
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
554 // finally get the whole thing written to a memory
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
555 pIod->WriteToMemory(this, ppIodBytes, pIodNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
556
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
557 delete pIod;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
558
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
559 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
560 printf("IOD data =\n"); MP4HexDump(*ppIodBytes, *pIodNumBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
561 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
562
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
563 MP4Descriptor* MP4File::CreateESD(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
564 MP4DescriptorProperty* pEsProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
565 u_int32_t esid,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
566 u_int8_t objectType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
567 u_int8_t streamType,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
568 u_int32_t bufferSize,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
569 u_int32_t bitrate,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
570 const u_int8_t* pConfig,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
571 u_int32_t configLength,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
572 char* url)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
573 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
574 MP4IntegerProperty* pInt;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
575 MP4StringProperty* pString;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
576 MP4BytesProperty* pBytes;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
577 MP4BitfieldProperty* pBits;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
578
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
579 MP4Descriptor* pEsd =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
580 pEsProperty->AddDescriptor(MP4ESDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
581 pEsd->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
582
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
583 pEsd->FindProperty("ESID",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
584 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
585 pInt->SetValue(esid);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
586
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
587 pEsd->FindProperty("decConfigDescr.objectTypeId",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
588 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
589 pInt->SetValue(objectType);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
590
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
591 pEsd->FindProperty("decConfigDescr.streamType",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
592 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
593 pInt->SetValue(streamType);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
594
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
595 pEsd->FindProperty("decConfigDescr.bufferSizeDB",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
596 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
597 pInt->SetValue(bufferSize);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
598
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
599 pEsd->FindProperty("decConfigDescr.maxBitrate",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
600 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
601 pInt->SetValue(bitrate);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
602
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
603 pEsd->FindProperty("decConfigDescr.avgBitrate",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
604 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
605 pInt->SetValue(bitrate);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
606
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
607 MP4DescriptorProperty* pConfigDescrProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
608 pEsd->FindProperty("decConfigDescr.decSpecificInfo",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
609 (MP4Property**)&pConfigDescrProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
610
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
611 MP4Descriptor* pConfigDescr =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
612 pConfigDescrProperty->AddDescriptor(MP4DecSpecificDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
613 pConfigDescr->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
614
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
615 pConfigDescrProperty->FindProperty("decSpecificInfo[0].info",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
616 (MP4Property**)&pBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
617 pBytes->SetValue(pConfig, configLength);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
618
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
619 pEsd->FindProperty("slConfigDescr.predefined",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
620 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
621 // changed 12/5/02 from plugfest to value 0
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
622 pInt->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
623
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
624 pEsd->FindProperty("slConfig.useAccessUnitEndFlag",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
625 (MP4Property **)&pBits);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
626 pBits->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
627
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
628 if (url) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
629 pEsd->FindProperty("URLFlag",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
630 (MP4Property**)&pInt);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
631 pInt->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
632
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
633 pEsd->FindProperty("URL",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
634 (MP4Property**)&pString);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
635 pString->SetValue(url);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
636 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
637
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
638 return pEsd;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
639 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
640
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
641 void MP4File::CreateIsmaODUpdateCommandFromFileForFile(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
642 MP4TrackId odTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
643 MP4TrackId audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
644 MP4TrackId videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
645 u_int8_t** ppBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
646 u_int64_t* pNumBytes)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
647 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
648 MP4Descriptor* pCommand = CreateODCommand(MP4ODUpdateODCommandTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
649 pCommand->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
650
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
651 for (u_int8_t i = 0; i < 2; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
652 MP4TrackId trackId;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
653 u_int16_t odId;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
654
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
655 if (i == 0) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
656 trackId = audioTrackId;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
657 odId = 10;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
658 } else {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
659 trackId = videoTrackId;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
660 odId = 20;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
661 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
662
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
663 if (trackId == MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
664 continue;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
665 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
666
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
667 MP4DescriptorProperty* pOdDescrProperty =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
668 (MP4DescriptorProperty*)(pCommand->GetProperty(0));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
669
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
670 pOdDescrProperty->SetTags(MP4FileODescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
671
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
672 MP4Descriptor* pOd =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
673 pOdDescrProperty->AddDescriptor(MP4FileODescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
674
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
675 pOd->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
676
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
677 MP4BitfieldProperty* pOdIdProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
678 pOd->FindProperty("objectDescriptorId",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
679 (MP4Property**)&pOdIdProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
680 pOdIdProperty->SetValue(odId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
681
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
682 MP4DescriptorProperty* pEsIdsDescriptorProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
683 pOd->FindProperty("esIds",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
684 (MP4Property**)&pEsIdsDescriptorProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
685 ASSERT(pEsIdsDescriptorProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
686
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
687 pEsIdsDescriptorProperty->SetTags(MP4ESIDRefDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
688
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
689 MP4Descriptor *pRefDescriptor =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
690 pEsIdsDescriptorProperty->AddDescriptor(MP4ESIDRefDescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
691 pRefDescriptor->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
692
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
693 MP4Integer16Property* pRefIndexProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
694 pRefDescriptor->FindProperty("refIndex",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
695 (MP4Property**)&pRefIndexProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
696 ASSERT(pRefIndexProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
697
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
698 u_int32_t mpodIndex = FindTrackReference(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
699 MakeTrackName(odTrackId, "tref.mpod"), trackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
700 ASSERT(mpodIndex != 0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
701
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
702 pRefIndexProperty->SetValue(mpodIndex);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
703 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
704
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
705 pCommand->WriteToMemory(this, ppBytes, pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
706
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
707 delete pCommand;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
708 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
709
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
710 void MP4File::CreateIsmaODUpdateCommandFromFileForStream(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
711 MP4TrackId audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
712 MP4TrackId videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
713 u_int8_t** ppBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
714 u_int64_t* pNumBytes)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
715 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
716 MP4DescriptorProperty* pAudioEsd = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
717 MP4Integer8Property* pAudioSLConfigPredef = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
718 MP4BitfieldProperty* pAudioAccessUnitEndFlag = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
719 int oldAudioUnitEndFlagValue = 0;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
720 MP4DescriptorProperty* pVideoEsd = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
721 MP4Integer8Property* pVideoSLConfigPredef = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
722 MP4BitfieldProperty* pVideoAccessUnitEndFlag = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
723 int oldVideoUnitEndFlagValue = 0;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
724 MP4IntegerProperty* pAudioEsdId = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
725 MP4IntegerProperty* pVideoEsdId = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
726
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
727 if (audioTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
728 // changed mp4a to * to handle enca case
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
729 MP4Atom* pEsdsAtom =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
730 FindAtom(MakeTrackName(audioTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
731 "mdia.minf.stbl.stsd.*.esds"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
732 ASSERT(pEsdsAtom);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
733
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
734 pAudioEsd = (MP4DescriptorProperty*)(pEsdsAtom->GetProperty(2));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
735 // ESID is 0 for file, stream needs to be non-ze
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
736 pAudioEsd->FindProperty("ESID",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
737 (MP4Property**)&pAudioEsdId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
738
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
739 ASSERT(pAudioEsdId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
740 pAudioEsdId->SetValue(audioTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
741
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
742 // SL config needs to change from 2 (file) to 1 (null)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
743 pAudioEsd->FindProperty("slConfigDescr.predefined",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
744 (MP4Property**)&pAudioSLConfigPredef);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
745 ASSERT(pAudioSLConfigPredef);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
746 pAudioSLConfigPredef->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
747
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
748 pAudioEsd->FindProperty("slConfigDescr.useAccessUnitEndFlag",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
749 (MP4Property **)&pAudioAccessUnitEndFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
750 oldAudioUnitEndFlagValue =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
751 pAudioAccessUnitEndFlag->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
752 pAudioAccessUnitEndFlag->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
753 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
754
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
755 if (videoTrackId != MP4_INVALID_TRACK_ID) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
756 // changed mp4v to * to handle encv case
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
757 MP4Atom* pEsdsAtom =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
758 FindAtom(MakeTrackName(videoTrackId,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
759 "mdia.minf.stbl.stsd.*.esds"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
760 ASSERT(pEsdsAtom);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
761
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
762 pVideoEsd = (MP4DescriptorProperty*)(pEsdsAtom->GetProperty(2));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
763 pVideoEsd->FindProperty("ESID",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
764 (MP4Property**)&pVideoEsdId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
765
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
766 ASSERT(pVideoEsdId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
767 pVideoEsdId->SetValue(videoTrackId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
768
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
769 // SL config needs to change from 2 (file) to 1 (null)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
770 pVideoEsd->FindProperty("slConfigDescr.predefined",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
771 (MP4Property**)&pVideoSLConfigPredef);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
772 ASSERT(pVideoSLConfigPredef);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
773 pVideoSLConfigPredef->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
774
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
775 pVideoEsd->FindProperty("slConfigDescr.useAccessUnitEndFlag",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
776 (MP4Property **)&pVideoAccessUnitEndFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
777 oldVideoUnitEndFlagValue =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
778 pVideoAccessUnitEndFlag->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
779 pVideoAccessUnitEndFlag->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
780 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
781
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
782 CreateIsmaODUpdateCommandForStream(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
783 pAudioEsd, pVideoEsd, ppBytes, pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
784 VERBOSE_ISMA(GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
785 printf("After CreateImsaODUpdateCommandForStream len %llu =\n", *pNumBytes); MP4HexDump(*ppBytes, *pNumBytes));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
786 // return SL config values to 2 (file)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
787 // return ESID values to 0
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
788 if (pAudioSLConfigPredef) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
789 pAudioSLConfigPredef->SetValue(2);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
790 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
791 if (pAudioEsdId) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
792 pAudioEsdId->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
793 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
794 if (pAudioAccessUnitEndFlag) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
795 pAudioAccessUnitEndFlag->SetValue(oldAudioUnitEndFlagValue );
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
796 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
797 if (pVideoEsdId) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
798 pVideoEsdId->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
799 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
800 if (pVideoSLConfigPredef) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
801 pVideoSLConfigPredef->SetValue(2);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
802 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
803 if (pVideoAccessUnitEndFlag) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
804 pVideoAccessUnitEndFlag->SetValue(oldVideoUnitEndFlagValue );
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
805 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
806 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
807
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
808 void MP4File::CreateIsmaODUpdateCommandForStream(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
809 MP4DescriptorProperty* pAudioEsdProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
810 MP4DescriptorProperty* pVideoEsdProperty,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
811 u_int8_t** ppBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
812 u_int64_t* pNumBytes)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
813 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
814 MP4Descriptor* pAudioOd = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
815 MP4Descriptor* pVideoOd = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
816
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
817 MP4Descriptor* pCommand =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
818 CreateODCommand(MP4ODUpdateODCommandTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
819 pCommand->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
820
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
821 for (u_int8_t i = 0; i < 2; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
822 u_int16_t odId;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
823 MP4DescriptorProperty* pEsdProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
824
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
825 if (i == 0) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
826 odId = 10;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
827 pEsdProperty = pAudioEsdProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
828 } else {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
829 odId = 20;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
830 pEsdProperty = pVideoEsdProperty;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
831 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
832
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
833 if (pEsdProperty == NULL) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
834 continue;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
835 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
836
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
837 MP4DescriptorProperty* pOdDescrProperty =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
838 (MP4DescriptorProperty*)(pCommand->GetProperty(0));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
839
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
840 pOdDescrProperty->SetTags(MP4ODescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
841
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
842 MP4Descriptor* pOd =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
843 pOdDescrProperty->AddDescriptor(MP4ODescrTag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
844 pOd->Generate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
845
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
846 if (i == 0) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
847 pAudioOd = pOd;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
848 } else {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
849 pVideoOd = pOd;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
850 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
851
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
852 MP4BitfieldProperty* pOdIdProperty = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
853 pOd->FindProperty("objectDescriptorId",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
854 (MP4Property**)&pOdIdProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
855 pOdIdProperty->SetValue(odId);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
856
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
857 delete (MP4DescriptorProperty*)pOd->GetProperty(4);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
858 pOd->SetProperty(4, pEsdProperty);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
859 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
860
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
861 // serialize OD command
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
862 pCommand->WriteToMemory(this, ppBytes, pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
863
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
864 // detach from esd descriptor params
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
865 if (pAudioOd) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
866 pAudioOd->SetProperty(4, NULL);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
867 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
868 if (pVideoOd) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
869 pVideoOd->SetProperty(4, NULL);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
870 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
871
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
872 // then destroy
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
873 delete pCommand;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
874 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
875
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
876 void MP4File::CreateIsmaSceneCommand(
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
877 bool hasAudio,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
878 bool hasVideo,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
879 u_int8_t** ppBytes,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
880 u_int64_t* pNumBytes)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
881 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
882 // from ISMA 1.0 Tech Spec Appendix E
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
883 static const u_int8_t bifsAudioOnly[] = {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
884 0xC0, 0x10, 0x12,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
885 0x81, 0x30, 0x2A, 0x05, 0x6D, 0xC0
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
886 };
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
887 static const u_int8_t bifsVideoOnly[] = {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
888 0xC0, 0x10, 0x12,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
889 0x61, 0x04,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
890 0x1F, 0xC0, 0x00, 0x00,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
891 0x1F, 0xC0, 0x00, 0x00,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
892 0x44, 0x28, 0x22, 0x82, 0x9F, 0x80
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
893 };
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
894 static const u_int8_t bifsAudioVideo[] = {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
895 0xC0, 0x10, 0x12,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
896 0x81, 0x30, 0x2A, 0x05, 0x6D, 0x26,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
897 0x10, 0x41, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
898 0x04, 0x42, 0x82, 0x28, 0x29, 0xF8
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
899 };
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
900
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
901 if (hasAudio && hasVideo) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
902 *pNumBytes = sizeof(bifsAudioVideo);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
903 *ppBytes = (u_int8_t*)MP4Malloc(*pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
904 memcpy(*ppBytes, bifsAudioVideo, sizeof(bifsAudioVideo));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
905
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
906 } else if (hasAudio) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
907 *pNumBytes = sizeof(bifsAudioOnly);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
908 *ppBytes = (u_int8_t*)MP4Malloc(*pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
909 memcpy(*ppBytes, bifsAudioOnly, sizeof(bifsAudioOnly));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
910
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
911 } else if (hasVideo) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
912 *pNumBytes = sizeof(bifsVideoOnly);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
913 *ppBytes = (u_int8_t*)MP4Malloc(*pNumBytes);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
914 memcpy(*ppBytes, bifsVideoOnly, sizeof(bifsVideoOnly));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
915 } else {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
916 *pNumBytes = 0;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
917 *ppBytes = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
918 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
919 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
920