Home | History | Annotate | Download | only in include
      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 #ifndef PV_AVIFILE_PARSER_H_INCLUDED
     19 #define PV_AVIFILE_PARSER_H_INCLUDED
     20 
     21 #ifndef PV_AVIFILE_TYPEDEFS_H_INCLUDED
     22 #include "pv_avifile_typedefs.h"
     23 #endif
     24 
     25 #ifndef PV_AVIFILE_PARSER_UTILS_H_INCLUDED
     26 #include "pv_avifile_parser_utils.h"
     27 #endif
     28 
     29 #ifndef PV_AVIFILE_HEADER_H_INCLUDED
     30 #include "pv_avifile_header.h"
     31 #endif
     32 
     33 #ifndef PV_AVIFILE_INDX_H_INCLUDED
     34 #include "pv_avifile_indx.h"
     35 #endif
     36 
     37 #ifndef PV_AVIFILE_H_INCLUDED
     38 #include "pv_avifile.h"
     39 #endif
     40 
     41 
     42 //class to parse avi file
     43 class PVAviFileParser: public PVAviFile
     44 {
     45 
     46     public:
     47 
     48         //constructor
     49         PVAviFileParser(OSCL_wHeapString<OsclMemAllocator> aFileName, int32& aError, Oscl_FileServer* aFileServer,
     50                         PVMFCPMPluginAccessInterfaceFactory*  aCPM, OsclFileHandle*  aFileHandle);
     51 
     52         //destructor
     53         ~PVAviFileParser();
     54 
     55         PV_AVI_FILE_PARSER_ERROR_TYPE ParseFile();
     56 
     57         //Read Media Sample form the file in order they exist in 'movi' chunk
     58         PV_AVI_FILE_PARSER_ERROR_TYPE
     59         GetNextMediaSample(uint32& arStreamNo, uint8* aBuffer, uint32& arSize,
     60                            uint32& arTimeStamp);
     61 
     62         //read next media samples for a stream with stream number = aStreamNo.
     63         PV_AVI_FILE_PARSER_ERROR_TYPE
     64         GetNextStreamMediaSample(uint32 aStreamNo, uint8* aBuffer, uint32& arSize,
     65                                  uint32& arTimeStamp);
     66 
     67         PV_AVI_FILE_PARSER_ERROR_TYPE
     68         GetNextStreamSampleInfo(uint32 aStreamNo, uint32& arSize, uint32& arOffset);
     69 
     70         //methods to retrieve file properties
     71         PVAviFileMainHeaderStruct GetMainHeaderStruct()
     72         {
     73             return (ipFileHeader->GetMainHeaderStruct());
     74         }
     75 
     76         OSCL_IMPORT_REF uint32 GetFileDuration();
     77 
     78         OSCL_IMPORT_REF void Reset();
     79         OSCL_IMPORT_REF void Reset(uint32 aStreamNo);
     80 
     81         OSCL_IMPORT_REF uint32 GetFrameDuration();
     82 
     83         OSCL_IMPORT_REF uint32 GetNumStreams();
     84 
     85         uint32 GetFileSuggestedBufferSize();
     86 
     87         uint32 GetFileDataRate()
     88         {
     89             return (ipFileHeader->GetFileDataRate());
     90         }
     91 
     92         bool IsCopyrighted()
     93         {
     94             return (ipFileHeader->IsCopyrighted());
     95         }
     96         bool HasIndexTable()
     97         {
     98             return (ipFileHeader->HasIndexTable());
     99         }
    100 
    101         bool IsInterleaved()
    102         {
    103             return (ipFileHeader->IsInterleaved());
    104         }
    105 
    106         bool MustUseIndex()
    107         {
    108             return (ipFileHeader->MustUseIndex());
    109         }
    110 
    111         bool IsCaptureFile()
    112         {
    113             return (ipFileHeader->IsCaptureFile());
    114         }
    115 
    116         uint32 GetTotalFrames()
    117         {
    118             return (ipFileHeader->GetTotalFrames());
    119         }
    120 
    121         uint32 GetInitialFrames()
    122         {
    123             return (ipFileHeader->GetInitialFrames());
    124         }
    125 
    126         OSCL_IMPORT_REF uint32 GetWidth(int32 aStreamNo);
    127 
    128         OSCL_IMPORT_REF uint32 GetHeight(bool& rBottomUp, int32 aStreamNo);
    129 
    130         //methods to retrieve stream properties
    131         OSCL_IMPORT_REF PVAviFileStreamHeaderStruct GetStreamHeaderStruct(uint32 aStreamNum);
    132 
    133         OSCL_IMPORT_REF OSCL_HeapString<OsclMemAllocator>  GetStreamMimeType(uint32 aStreamNum);
    134         OSCL_IMPORT_REF uint32 GetStreamDuration(uint32 aStreamNum);
    135 
    136         bool PalletChangeAvailable(uint32 aStreamNum)
    137         {
    138             return (ipFileHeader->PalletChangeAvailable(aStreamNum));
    139         }
    140 
    141         bool ISDisabledByDefault(uint32 aStreamNum)
    142         {
    143             return (ipFileHeader->ISDisabledByDefault(aStreamNum));
    144         }
    145 
    146         bool GetVideoFormatType(uint8* aHdlr, uint32& arSize, uint32 aStreamNo);
    147 
    148         uint32 GetAudioFormatType(uint32 aStreamNo)
    149         {
    150             return ipFileHeader->GetAudioFormat(aStreamNo);
    151         }
    152 
    153         uint32 GetNumAudioChannels(uint32 aStreamNo)
    154         {
    155             return ipFileHeader->GetNumAudioChannels(aStreamNo);
    156         }
    157 
    158         uint16 GetPriority(uint32 aStreamNum)
    159         {
    160             return (ipFileHeader->GetPriority(aStreamNum));
    161         }
    162 
    163         uint16 GetLanguage(uint32 aStreamNum)
    164         {
    165             return (ipFileHeader->GetLanguage(aStreamNum));
    166         }
    167 
    168         uint32 GetInitalFrames(uint32 aStreamNum)
    169         {
    170             return (ipFileHeader->GetInitalFrames(aStreamNum));
    171         }
    172 
    173         uint32 GetRate(uint32 aStreamNum)
    174         {
    175             return (ipFileHeader->GetRate(aStreamNum));
    176         }
    177 
    178         uint32 GetScale(uint32 aStreamNum)
    179         {
    180             return (ipFileHeader->GetScale(aStreamNum));
    181         }
    182 
    183         OSCL_IMPORT_REF OsclFloat GetFrameRate(uint32 aStreamNum);
    184 
    185         uint32 GetStartTime(uint32 aStreamNum)
    186         {
    187             return (ipFileHeader->GetStartTime(aStreamNum));
    188         }
    189 
    190 
    191         uint32 GetStreamSuggestedBufferSize(uint32 aStreamNum)
    192         {
    193             return (ipFileHeader->GetStreamSuggestedBufferSize(aStreamNum));
    194         }
    195 
    196         uint32 GetBitsPerSample(uint32 aStreamNum)
    197         {
    198             return (ipFileHeader->GetBitsPerSample(aStreamNum));
    199         }
    200 
    201         int32 GetQuality(uint32 aStreamNum)
    202         {
    203             return (ipFileHeader->GetQuality(aStreamNum));
    204         }
    205 
    206         uint32 GetSampleSize(uint32 aStreamNum)
    207         {
    208             return (ipFileHeader->GetSampleSize(aStreamNum));
    209         }
    210 
    211         rcFrameType GetRCFrame(uint32 aStreamNum)
    212         {
    213             return (ipFileHeader->GetRCFrame(aStreamNum));
    214         }
    215 
    216         //method to get codec specific info
    217         OSCL_IMPORT_REF bool GetCodecSpecificData(uint32 aStreamNum, OsclRefCounterMemFrag& arFormatSpecificDataFrag);
    218 
    219         //method to retrieve stream format specific info
    220         OSCL_IMPORT_REF bool GetFormatSpecificInfo(uint32 aStreamNum, OsclRefCounterMemFrag& arFormatSpecificDataFrag);
    221 
    222         Oscl_Vector<uint32, OsclMemAllocator>   GetStreamCountList()
    223         {
    224             return iStreamCount;
    225         }
    226 
    227         OSCL_IMPORT_REF Oscl_Vector<uint32, OsclMemAllocator>   GetAudioStreamCountList();
    228         OSCL_IMPORT_REF Oscl_Vector<uint32, OsclMemAllocator>   GetVideoStreamCountList();
    229 
    230     private:
    231 
    232         PV_AVI_FILE_PARSER_ERROR_TYPE
    233         GetStreamOffsetFromIndexTable(uint32 aStreamNo, uint32& arSize, uint32& aOffset);
    234 
    235         PV_AVI_FILE_PARSER_ERROR_TYPE
    236         GetStreamOffset(uint32 aStreamNo, uint32& aSampleSize, uint32& aOffset);
    237 
    238 
    239         PVAviFileHeader*        ipFileHeader;
    240         PVAviFileIdxChunk*      ipIdxChunk;
    241         bool                    iIdxChunkPresent;
    242         uint32                  iFileSize;
    243         uint32                  iHeaderChunkSize;
    244         uint32                  iMovieChunkSize;
    245 
    246         //store the offset of first sample. used if index table is not present.
    247         uint32                  iMovieChunkStartOffset;
    248         uint32                  iIndxChunkSize;
    249         Oscl_Vector < uint32,
    250         OsclMemAllocator >  iStreamCount;
    251 
    252         Oscl_Vector < uint32,
    253         OsclMemAllocator >      iStreamSampleCount;
    254 
    255         //stores current offset if index table is not present
    256         uint32                  iSampleOffset;
    257 
    258         //store latest sample offset if index table is not present
    259         Oscl_Vector < uint32,
    260         OsclMemAllocator >      iStreamSampleOffset;
    261 
    262         PVFile*                 ipFilePtr;
    263         uint32                  iTimeStampAudio;
    264         uint32                  iTimeStampVideo;
    265 
    266 };
    267 
    268 #endif  //#ifndef PV_AVIFILE_PARSER_H_INCLUDED
    269 
    270