61
|
1 /*
|
|
2 * The contents of this file are subject to the Mozilla Public
|
|
3 * License Version 1.1 (the "License"); you may not use this file
|
|
4 * except in compliance with the License. You may obtain a copy of
|
|
5 * the License at http://www.mozilla.org/MPL/
|
|
6 *
|
|
7 * Software distributed under the License is distributed on an "AS
|
|
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
9 * implied. See the License for the specific language governing
|
|
10 * rights and limitations under the License.
|
|
11 *
|
|
12 * The Original Code is MPEG4IP.
|
|
13 *
|
|
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
|
|
15 * Portions created by Cisco Systems Inc. are
|
|
16 * Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
|
|
17 *
|
|
18 * 3GPP features implementation is based on 3GPP's TS26.234-v5.60,
|
|
19 * and was contributed by Ximpo Group Ltd.
|
|
20 *
|
|
21 * Portions created by Ximpo Group Ltd. are
|
|
22 * Copyright (C) Ximpo Group Ltd. 2003, 2004. All Rights Reserved.
|
|
23 *
|
|
24 * Contributor(s):
|
|
25 * Ximpo Group Ltd. mp4v2@ximpo.com
|
|
26 */
|
|
27
|
|
28 #include "mp4common.h"
|
|
29
|
|
30 #define H263_VENDOR 0x6d346970
|
|
31
|
|
32 MP4D263Atom::MP4D263Atom()
|
|
33 : MP4Atom("d263")
|
|
34 {
|
|
35 AddProperty( /* 0 */
|
|
36 new MP4Integer32Property("vendor"));
|
|
37
|
|
38 AddProperty( /* 1 */
|
|
39 new MP4Integer8Property("decoderVersion"));
|
|
40
|
|
41 AddProperty( /* 2 */
|
|
42 new MP4Integer8Property("h263Level"));
|
|
43
|
|
44 AddProperty( /* 3 */
|
|
45 new MP4Integer8Property("h263Profile"));
|
|
46
|
|
47 ExpectChildAtom("bitr", Optional, OnlyOne);
|
|
48
|
|
49 }
|
|
50
|
|
51 void MP4D263Atom::Generate()
|
|
52 {
|
|
53 MP4Atom::Generate();
|
|
54
|
|
55 ((MP4Integer32Property*)m_pProperties[0])->SetValue(H263_VENDOR);
|
|
56 ((MP4Integer8Property*)m_pProperties[1])->SetValue(1);
|
|
57
|
|
58 }
|
|
59
|
|
60 void MP4D263Atom::Write()
|
|
61 {
|
|
62 // Check whether we have valid values in the bitr atom
|
|
63 // (if it exists, of course)
|
|
64 MP4Atom* bitrAtom = FindAtom("d263.bitr");
|
|
65 if (bitrAtom) {
|
|
66 u_int32_t avgBitrate;
|
|
67 u_int32_t maxBitrate;
|
|
68
|
|
69 MP4Integer32Property* pProp;
|
|
70 bitrAtom->FindProperty("bitr.avgBitrate",
|
|
71 (MP4Property**)&pProp,
|
|
72 NULL);
|
|
73 ASSERT(pProp);
|
|
74 avgBitrate = pProp->GetValue();
|
|
75
|
|
76 bitrAtom->FindProperty("bitr.maxBitrate",
|
|
77 (MP4Property**)&pProp,
|
|
78 NULL);
|
|
79 ASSERT(pProp);
|
|
80 maxBitrate = pProp->GetValue();
|
|
81
|
|
82 if(!maxBitrate && !avgBitrate) {
|
|
83 DeleteChildAtom(bitrAtom);
|
|
84 }
|
|
85 }
|
|
86
|
|
87 MP4Atom::Write();
|
|
88 }
|