• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 #define IMPLEMENT__AVCLayerDescEntry
19 
20 #include "avcsubseqdescriptionentry.h"
21 #include "atomutils.h"
22 #include "atomdefs.h"
23 
AVCSubSequenceEntry(MP4_FF_FILE * fp,uint32 size,uint32 type)24 AVCSubSequenceEntry::AVCSubSequenceEntry(MP4_FF_FILE *fp, uint32 size, uint32 type)
25         : Atom(fp, size, type)
26 {
27     if (_success)
28     {
29         if (!AtomUtils::read16(fp, _subSequenceIdentifier))
30         {
31             _success = false;
32         }
33         if (!AtomUtils::read8(fp, _layerNumber))
34         {
35             _success = false;
36         }
37 
38         if (!AtomUtils::read8(fp, _reserved))
39         {
40             _success = false;
41         }
42 
43         _durationFlag = (uint8)(_reserved & ~0x7F);
44         _avgRateFlag = (uint8)(_reserved & ~0xBF);
45 
46         if (_durationFlag)
47         {
48             if (!AtomUtils::read32(fp, _duration))
49             {
50                 _success = false;
51             }
52         }
53         if (_avgRateFlag)
54         {
55             if (!AtomUtils::read8(fp, _accurateStatisticsFlag))
56             {
57                 _success = false;
58             }
59             if (!AtomUtils::read16(fp, _avgBitRate))
60             {
61                 _success = false;
62             }
63             if (!AtomUtils::read16(fp, _avgFrameRate))
64             {
65                 _success = false;
66             }
67         }
68         if (!AtomUtils::read8(fp, numReferences))
69         {
70             _success = false;
71         }
72 
73         PV_MP4_FF_NEW(fp->auditCB, DependencyInfo, (fp), dependencyinfo);
74 
75         if (dependencyinfo == NULL)
76         {
77             _success = false;
78         }
79     }
80     if (!_success)
81     {
82         _mp4ErrorCode = READ_AVC_SUBSEQUENCE_DESCRIPTION_BOX_FAILED;
83     }
84 }
85 
DependencyInfo(MP4_FF_FILE * fp)86 DependencyInfo::DependencyInfo(MP4_FF_FILE *fp)
87 {
88     _subSeqCount = 0;
89     _layerNumber = 0;
90     _subSequenceIdentifier = 0;
91 
92     if (!AtomUtils::read8(fp, _subSeqCount))
93     {
94         return;
95     }
96     if (!AtomUtils::read8(fp, _layerNumber))
97     {
98         return;
99     }
100     if (!AtomUtils::read16(fp, _subSequenceIdentifier))
101     {
102         return;
103     }
104 }
105 
106 // Destructor
~AVCSubSequenceEntry()107 AVCSubSequenceEntry::~AVCSubSequenceEntry()
108 {
109     if (dependencyinfo)
110         PV_MP4_FF_DELETE(NULL, DependencyInfo, dependencyinfo);
111 }
112