blob: ad84b09d90ce54594983bb9ab9dcd3ec841e34c0 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 2008 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
/*********************************************************************************/
/* ------------------------------------------------------------------- */
/* MPEG-4 SampleDescriptionAtom Class */
/* ------------------------------------------------------------------- */
/*********************************************************************************/
/*
This SampleDescriptionAtom Class gives detailed information about the coding
type used, and any initialization information needed for coding.
*/
#ifndef SAMPLEDESCRIPTIONATOM_H_INCLUDED
#define SAMPLEDESCRIPTIONATOM_H_INCLUDED
#ifndef OSCL_FILE_IO_H_INCLUDED
#include "oscl_file_io.h"
#endif
#ifndef FULLATOM_H_INCLUDED
#include "fullatom.h"
#endif
#ifndef SAMPLEENTRY_H_INCLUDED
#include "sampleentry.h"
#endif
#ifndef ESDESCRIPTOR_H_INCLUDED
#include "esdescriptor.h"
#endif
#ifndef DECODERSPECIFICINFO_H_INCLUDED
#include "decoderspecificinfo.h"
#endif
#ifndef AMRSAMPLEENTRY_H_INCLUDED
#include "amrsampleentry.h"
#endif
#ifndef H263SAMPLEENTRY_H_INCLUDED
#include "h263sampleentry.h"
#endif
#ifndef AVCSAMPLEENTRY_H_INCLUDED
#include "avcsampleentry.h"
#endif
#ifndef AVCSUBSEQDESCRIPTIONENTRY_H_INCLUDED
#include "avcsubseqdescriptionentry.h"
#endif
#ifndef AVCLAYERDESCRIPTIONENTRY_H_INCLUDED
#include "avclayerentry.h"
#endif
class ProtectionSchemeInformationBox;
class SampleDescriptionAtom : public FullAtom
{
public:
SampleDescriptionAtom(MP4_FF_FILE *fp,
uint32 mediaType,
uint32 size,
uint32 type);
virtual ~SampleDescriptionAtom();
// Member gets and sets
uint32 getEntryCount() const
{
return _entryCount;
}
uint32 getHandlerType() const
{
return _handlerType;
}
const SampleEntry* getSampleEntryAt(int32 index) const;
SampleEntry* getMutableSampleEntryAt(int32 index);
uint32 getNumSampleEntries()
{
if (_psampleEntryVec != NULL)
{
return _psampleEntryVec->size();
}
else
{
return 0;
}
}
// Getting and setting the Mpeg4 VOL header
DecoderSpecificInfo *getDecoderSpecificInfo(uint32 index);
OSCL_wHeapString<OsclMemAllocator> getMIMEType();//Move to SampleDescription.cpp
uint8 getObjectTypeIndication();
uint32 getMaxBufferSizeDB(); // Get the max size buffer needed to retrieve the media samples
int32 getAverageBitrate();
int32 getMaxBitrate();
uint32 getHspacing();
uint32 getVspacing();
// Return the ESID for the track - undefined if a HINT track
uint32 getESID(uint32 index);
// Return the first ESDescriptor for the track - undefined if a HINT track
const ESDescriptor *getESDescriptor(uint32 index);
// Get the type of SampleEntry atom (i.e. MPEG_SAMPLE_ENTRY, ... '<protocol>', etc.)
uint32 getSampleProtocol(uint32 index);
uint32 getMediaType()
{
return _pMediaType;
}
AMRSampleEntry *getAMRSampleEntry()
{
return _pAMRSampleEntryAtom;
}
H263SampleEntry *getH263SampleEntry()
{
return _pH263SampleEntryAtom;
}
bool Is3GPPAMR()
{
if (_o3GPPAMR)
{
return true;
}
else
{
return false;
}
}
AVCSampleEntry* getAVCSampleEntry(uint32 index)
{
return (*_pAVCSampleEntryVec)[index];
}
uint32 getNumAVCSampleEntries()
{
if (_pAVCSampleEntryVec != NULL)
return _pAVCSampleEntryVec->size();
else
return 0;
}
SampleEntry *getTextSampleEntryAt(uint32 index);
uint32 getAVCNALLengthSize(uint32 index)
{
if (_oAVC)
{
return (((*_pAVCSampleEntryVec)[index])->getNALLengthSize());
}
return 0;
}
uint32 getTrackLevelOMA2DRMInfoSize();
uint8* getTrackLevelOMA2DRMInfo();
int32 getHeight();
int32 getWidth();
private:
uint32 _entryCount;
uint32 _handlerType;
Oscl_Vector<SampleEntry*, OsclMemAllocator> *_psampleEntryVec;
uint32 _pMediaType;
AMRSampleEntry *_pAMRSampleEntryAtom;
H263SampleEntry *_pH263SampleEntryAtom;
Oscl_Vector<AVCSampleEntry*, OsclMemAllocator> *_pAVCSampleEntryVec;
AVCSubSequenceEntry *_pavcSubSequenceEntry;
AVCLayerDescEntry *_pavcLayerDescEntry;
bool _o3GPPAMR;
bool _o3GPPH263;
bool _o3GPPWBAMR;
bool _oAVC;
ProtectionSchemeInformationBox* _pProtectionSchemeInformationBox;
};
#endif // SAMPLEDESCRIPTIONATOM_H_INCLUDED