• 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 #ifndef AVC_DEC_H_INCLUDED
19 #define AVC_DEC_H_INCLUDED
20 
21 #ifndef OMX_Component_h
22 #include "OMX_Component.h"
23 #endif
24 
25 #ifndef _AVCDEC_API_H_
26 #include "avcdec_api.h"
27 #endif
28 
29 #ifndef OSCL_MEM_H_INCLUDED
30 #include "oscl_mem.h"
31 #endif
32 
33 
34 #define AVC_DEC_TIMESTAMP_ARRAY_SIZE 17
35 
36 class AVCCleanupObject_OMX
37 {
38         AVCHandle* ipavcHandle;
39 
40     public:
41         AVCCleanupObject_OMX(AVCHandle* aAvcHandle = NULL)
42         {
43             ipavcHandle = aAvcHandle;
44         }
45 
46         //! Use destructor to do all the clean up work
47         ~AVCCleanupObject_OMX();
48 };
49 
50 
51 class AvcDecoder_OMX
52 {
53     public:
AvcDecoder_OMX()54         AvcDecoder_OMX()
55         {
56             CurrInputTimestamp = 0;
57             pDpbBuffer = NULL;
58             FrameSize = 0;
59             iAvcActiveFlag = OMX_FALSE;
60             oscl_memset(DisplayTimestampArray, 0, sizeof(OMX_TICKS)*AVC_DEC_TIMESTAMP_ARRAY_SIZE);
61         };
62 
~AvcDecoder_OMX()63         ~AvcDecoder_OMX() { };
64 
65         AVCCleanupObject_OMX*   pCleanObject;
66         AVCHandle       AvcHandle;
67         AVCDecSPSInfo   SeqInfo;
68         uint32          FrameSize;
69         uint8*          pDpbBuffer;
70         OMX_TICKS       DisplayTimestampArray[AVC_DEC_TIMESTAMP_ARRAY_SIZE];
71         OMX_TICKS       CurrInputTimestamp;
72         OMX_U32         InputBytesConsumed;
73         OMX_BOOL        iAvcActiveFlag;
74 
75 
76         OMX_ERRORTYPE AvcDecInit_OMX();
77 
78         OMX_BOOL AvcDecodeVideo_OMX(OMX_U8* aOutBuffer, OMX_U32* aOutputLength,
79                                     OMX_U8** aInputBuf, OMX_U32* aInBufSize,
80                                     OMX_PARAM_PORTDEFINITIONTYPE* aPortParam,
81                                     OMX_S32* iFrameCount, OMX_BOOL aMarkerFlag,
82                                     OMX_TICKS* aOutTimestamp,
83                                     OMX_BOOL *aResizeFlag);
84 
85         OMX_ERRORTYPE AvcDecDeinit_OMX();
86 
87         OMX_BOOL InitializeVideoDecode_OMX();
88 
89         OMX_BOOL FlushOutput_OMX(OMX_U8* aOutBuffer, OMX_U32* aOutputLength, OMX_TICKS* aOutTimestamp, OMX_S32 OldWidth, OMX_S32 OldHeight);
90 
91         AVCDec_Status GetNextFullNAL_OMX(uint8** aNalBuffer, int32* aNalSize, OMX_U8* aInputBuf, OMX_U32* aInBufSize);
92 
93         static int32 AllocateBuffer_OMX(void* aUserData, int32 i, uint8** aYuvBuffer);
94 
95         static int32 ActivateSPS_OMX(void* aUserData, uint aSizeInMbs, uint aNumBuffers);
96 
97         int32 NSAllocateBuffer_OMX(void* aUserData, int32 i, uint8** aYuvBuffer);
98 
99         int32 NSActivateSPS_OMX(void* aUserData, uint aSizeInMbs, uint aNumBuffers);
100 
101         void ResetDecoder(); // for repositioning
102 };
103 
104 typedef class AvcDecoder_OMX AvcDecoder_OMX;
105 
106 #endif  //#ifndef AVC_DEC_H_INCLUDED
107 
108