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 ///////////////////////////////////////////////////////////////////////////////
     19 //
     20 // payload_parser.h
     21 //
     22 // Defines the abstract payload parser type.
     23 //
     24 ///////////////////////////////////////////////////////////////////////////////
     25 
     26 #ifndef PAYLOAD_PARSER_H_INCLUDED
     27 #define PAYLOAD_PARSER_H_INCLUDED
     28 
     29 #ifndef OSCL_VECTOR_H_INCLUDED
     30 #include "oscl_vector.h"
     31 #endif
     32 #ifndef OSCL_REFCOUNTER_MEMFRAG_INCLUDED
     33 #include "oscl_refcounter_memfrag.h"
     34 #endif
     35 #ifndef MEDIAINFO_H_INCLUDED
     36 #include "media_info.h"
     37 #endif
     38 
     39 ///////////////////////////////////////////////////////////////////////////////
     40 //
     41 // enum PayloadParserStatus
     42 //
     43 // Payload parser return codes.
     44 //
     45 ///////////////////////////////////////////////////////////////////////////////
     46 
     47 enum PayloadParserStatus
     48 {
     49     PayloadParserStatus_Failure,
     50     PayloadParserStatus_Success,
     51     PayloadParserStatus_InputNotExhausted,
     52     PayloadParserStatus_MemorAllocFail,
     53     PayloadParserStatus_DataNotReady,
     54     PayloadParserStatus_EmptyQueue
     55 };
     56 
     57 ///////////////////////////////////////////////////////////////////////////////
     58 //
     59 // class IPayloadParser
     60 //
     61 // Abstract payload parser interface.
     62 //
     63 ///////////////////////////////////////////////////////////////////////////////
     64 
     65 class IPayloadParser
     66 {
     67     public:
     68 
     69         virtual ~IPayloadParser() { };
     70 
     71         // Init()
     72         //
     73         // Applies media info data structure to a given payload parser.
     74         OSCL_IMPORT_REF virtual bool Init(mediaInfo* config) = 0;
     75 
     76         // Payload structure
     77         //
     78         // Used to pass information in and out of the payload parser for
     79         // a given stream.
     80         class Payload
     81         {
     82             public:
     83                 Payload() : stream(0), timestamp(0), sequence(0),
     84                         marker(false), randAccessPt(false), incompframe(false), consumed(false), endOfNAL(false) {}
     85                 Payload(uint32 stream, uint32 timestamp, uint32 sequence,
     86                         bool marker, bool randAccessPt, bool consumed, bool incompframe, bool endOfNAL)
     87                 {
     88                     this->stream = stream;
     89                     this->timestamp = timestamp;
     90                     this->sequence = sequence;
     91                     this->marker = marker;
     92                     this->randAccessPt = randAccessPt;
     93                     this->consumed = consumed;
     94                     this->incompframe = incompframe;
     95                     this->endOfNAL = endOfNAL;
     96                 }
     97                 Payload(const Payload& aPayLoad)
     98                 {
     99                     Copy(aPayLoad);
    100                 }
    101                 Payload& operator=(const Payload& aPayLoad)
    102                 {
    103                     if (&aPayLoad != this)
    104                     {
    105                         Copy(aPayLoad);
    106                     }
    107                     return (*this);
    108                 }
    109                 uint32 stream;
    110                 uint32 timestamp;
    111                 uint32 sequence;
    112                 //The marker bit signifies the last packet of an access unit or frame.
    113                 bool marker;
    114                 bool randAccessPt;
    115                 bool incompframe;
    116                 bool consumed;
    117                 //endOfNAL is used by the RFC3984 (H.264 / AVC) parser and decoder.
    118                 //It is set to true for last NAL fragment and whole NALs
    119                 //and set to false for the first and middle fragments.
    120                 bool endOfNAL;
    121                 Oscl_Vector<OsclRefCounterMemFrag, OsclMemAllocator> vfragments;
    122 
    123             private:
    124                 void Copy(const Payload& aPayLoad)
    125                 {
    126                     stream = aPayLoad.stream;
    127                     timestamp = aPayLoad.timestamp;
    128                     sequence = aPayLoad.sequence;
    129                     marker = aPayLoad.marker;
    130                     randAccessPt = aPayLoad.randAccessPt;
    131                     consumed = aPayLoad.consumed;
    132                     vfragments = aPayLoad.vfragments;
    133                     incompframe = aPayLoad.incompframe;
    134                     endOfNAL = aPayLoad.endOfNAL;
    135                 }
    136         };
    137 
    138         // Parse()
    139         //
    140         // Performs parsing of a given input packet consisting of a vector of
    141         // buffers. The parsed output is a vector of parsed payloads where each
    142         // element in the vector corresponds to the stream id.
    143         OSCL_IMPORT_REF virtual PayloadParserStatus Parse(const Payload& inputPacket,
    144                 Oscl_Vector<Payload, OsclMemAllocator>& vParsedPayloads) = 0;
    145 
    146         // Reposition()
    147         //
    148         // Tells the payload parser a repositioning is in effect.
    149         // Change internal seqnum if adjustSequence is enabled
    150         OSCL_IMPORT_REF virtual void Reposition(const bool adjustSequence = false, const uint32 stream = 0, const uint32 seqnum = 0) = 0;
    151 
    152         // GetMinCurrTimestamp()
    153         //
    154         // Returns the smallest current timestamp among all streams managed
    155         // by the payload parser.
    156         OSCL_IMPORT_REF virtual uint32 GetMinCurrTimestamp() = 0;
    157 };
    158 
    159 
    160 
    161 #endif // PAYLOAD_PARSER_H_INCLUDED
    162