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/*********************************************************************************/
19/*     -------------------------------------------------------------------       */
20/*                       MPEG-4 SampleDescriptionAtom Class                      */
21/*     -------------------------------------------------------------------       */
22/*********************************************************************************/
23/*
24    This SampleDescriptionAtom Class gives detailed information about the coding
25    type used, and any initialization information needed for coding.
26*/
27
28
29#ifndef SAMPLEDESCRIPTIONATOM_H_INCLUDED
30#define SAMPLEDESCRIPTIONATOM_H_INCLUDED
31
32#ifndef OSCL_FILE_IO_H_INCLUDED
33#include "oscl_file_io.h"
34#endif
35
36#ifndef FULLATOM_H_INCLUDED
37#include "fullatom.h"
38#endif
39
40#ifndef SAMPLEENTRY_H_INCLUDED
41#include "sampleentry.h"
42#endif
43
44#ifndef ESDESCRIPTOR_H_INCLUDED
45#include "esdescriptor.h"
46#endif
47
48#ifndef DECODERSPECIFICINFO_H_INCLUDED
49#include "decoderspecificinfo.h"
50#endif
51
52#ifndef AMRSAMPLEENTRY_H_INCLUDED
53#include "amrsampleentry.h"
54#endif
55
56#ifndef H263SAMPLEENTRY_H_INCLUDED
57#include "h263sampleentry.h"
58#endif
59
60#ifndef AVCSAMPLEENTRY_H_INCLUDED
61#include "avcsampleentry.h"
62#endif
63
64#ifndef AVCSUBSEQDESCRIPTIONENTRY_H_INCLUDED
65#include "avcsubseqdescriptionentry.h"
66#endif
67
68#ifndef AVCLAYERDESCRIPTIONENTRY_H_INCLUDED
69#include "avclayerentry.h"
70#endif
71
72
73class ProtectionSchemeInformationBox;
74
75class SampleDescriptionAtom : public FullAtom
76{
77
78    public:
79        SampleDescriptionAtom(MP4_FF_FILE *fp,
80                              uint32 mediaType,
81                              uint32 size,
82                              uint32 type);
83
84        virtual ~SampleDescriptionAtom();
85
86        // Member gets and sets
87        uint32 getEntryCount() const
88        {
89            return _entryCount;
90        }
91        uint32 getHandlerType() const
92        {
93            return _handlerType;
94        }
95
96        const SampleEntry* getSampleEntryAt(int32 index) const;
97        SampleEntry* getMutableSampleEntryAt(int32 index);
98
99        uint32 getNumSampleEntries()
100        {
101            if (_psampleEntryVec != NULL)
102            {
103                return _psampleEntryVec->size();
104            }
105            else
106            {
107                return 0;
108            }
109        }
110
111        // Getting and setting the Mpeg4 VOL header
112        DecoderSpecificInfo *getDecoderSpecificInfo(uint32 index);
113
114        void getMIMEType(OSCL_String& aMimeType);//Move to SampleDescription.cpp
115
116        uint8  getObjectTypeIndication();
117
118        uint32 getMaxBufferSizeDB();    // Get the max size buffer needed to retrieve the media samples
119        int32  getAverageBitrate();
120        int32  getMaxBitrate();
121
122        uint32 getHspacing();
123        uint32 getVspacing();
124
125        // Return the ESID for the track - undefined if a HINT track
126        uint32 getESID(uint32 index);
127
128        // Return the first ESDescriptor for the track - undefined if a HINT track
129        const ESDescriptor *getESDescriptor(uint32 index);
130
131        // Get the type of SampleEntry atom (i.e. MPEG_SAMPLE_ENTRY, ... '<protocol>', etc.)
132        uint32 getSampleProtocol(uint32 index);
133
134        uint32 getMediaType()
135        {
136            return  _pMediaType;
137        }
138
139        AMRSampleEntry *getAMRSampleEntry()
140        {
141            return _pAMRSampleEntryAtom;
142        }
143
144        H263SampleEntry *getH263SampleEntry()
145        {
146            return _pH263SampleEntryAtom;
147        }
148
149        bool Is3GPPAMR()
150        {
151            if (_o3GPPAMR)
152            {
153                return true;
154            }
155            else
156            {
157                return false;
158            }
159        }
160
161        AVCSampleEntry* getAVCSampleEntry(uint32 index)
162        {
163            return (*_pAVCSampleEntryVec)[index];
164        }
165
166        uint32 getNumAVCSampleEntries()
167        {
168            if (_pAVCSampleEntryVec != NULL)
169                return _pAVCSampleEntryVec->size();
170            else
171                return 0;
172        }
173
174        SampleEntry *getTextSampleEntryAt(uint32 index);
175
176        uint32 getAVCNALLengthSize(uint32 index)
177        {
178            if (_oAVC)
179            {
180                return (((*_pAVCSampleEntryVec)[index])->getNALLengthSize());
181            }
182            return 0;
183        }
184
185        uint32 getTrackLevelOMA2DRMInfoSize();
186        uint8* getTrackLevelOMA2DRMInfo();
187
188        int32 getHeight();
189        int32 getWidth();
190    private:
191        uint32 _entryCount;
192        uint32 _handlerType;
193        Oscl_Vector<SampleEntry*, OsclMemAllocator> *_psampleEntryVec;
194
195        uint32 _pMediaType;
196
197        AMRSampleEntry  *_pAMRSampleEntryAtom;
198        H263SampleEntry *_pH263SampleEntryAtom;
199        Oscl_Vector<AVCSampleEntry*, OsclMemAllocator> *_pAVCSampleEntryVec;
200        AVCSubSequenceEntry *_pavcSubSequenceEntry;
201        AVCLayerDescEntry *_pavcLayerDescEntry;
202
203        bool _o3GPPAMR;
204        bool _o3GPPH263;
205        bool _o3GPPWBAMR;
206        bool _oAVC;
207
208        ProtectionSchemeInformationBox* _pProtectionSchemeInformationBox;
209};
210
211
212#endif // SAMPLEDESCRIPTIONATOM_H_INCLUDED
213