annotate Plugins/Input/aac/libmp4v2/isma.cpp @ 790:8f437afc4f4a trunk

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