OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / media / libstagefright / codecs / m4v_h263 / dec / src / mp4dec_lib.h
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 _MP4DECLIB_H_
19 #define _MP4DECLIB_H_
20
21 /*----------------------------------------------------------------------------
22 ; INCLUDES
23 ----------------------------------------------------------------------------*/
24 #include "mp4def.h" /* typedef */
25 #include "mp4lib_int.h" /* main video structure */
26
27 /*----------------------------------------------------------------------------
28 ; MACROS
29 ; Define module specific macros here
30 ----------------------------------------------------------------------------*/
31
32 /*----------------------------------------------------------------------------
33 ; DEFINES
34 ; Include all pre-processor statements here.
35 ----------------------------------------------------------------------------*/
36
37 /*----------------------------------------------------------------------------
38 ; EXTERNAL VARIABLES REFERENCES
39 ; Declare variables used in this module but defined elsewhere
40 ----------------------------------------------------------------------------*/
41
42 /*----------------------------------------------------------------------------
43 ; SIMPLE TYPEDEF'S
44 ----------------------------------------------------------------------------*/
45
46 /*----------------------------------------------------------------------------
47 ; ENUMERATED TYPEDEF'S
48 ----------------------------------------------------------------------------*/
49
50 /*----------------------------------------------------------------------------
51 ; STRUCTURES TYPEDEF'S
52 ----------------------------------------------------------------------------*/
53
54 /*----------------------------------------------------------------------------
55 ; GLOBAL FUNCTION DEFINITIONS
56 ; Function Prototype declaration
57 ----------------------------------------------------------------------------*/
58 #ifdef __cplusplus
59 extern "C"
60 {
61 #endif /* __cplusplus */
62
63     /* defined in pvdec_api.c, these function are not supposed to be    */
64     /* exposed to programmers outside PacketVideo.  08/15/2000.    */
65     uint VideoDecoderErrorDetected(VideoDecData *video);
66
67 #ifdef ENABLE_LOG
68     void m4vdec_dprintf(char *format, ...);
69 #define mp4dec_log(message) m4vdec_dprintf(message)
70 #else
71 #define mp4dec_log(message)
72 #endif
73
74     /*--------------------------------------------------------------------------*/
75     /* defined in frame_buffer.c */
76     PV_STATUS FillFrameBufferNew(BitstreamDecVideo *stream);
77     PV_STATUS FillFrameBuffer(BitstreamDecVideo *stream, int short_header);
78
79     /*--------------------------------------------------------------------------*/
80     /* defined in dc_ac_pred.c */
81     int cal_dc_scaler(int QP, int type);
82     PV_STATUS PV_DecodePredictedIntraDC(int compnum, BitstreamDecVideo *stream,
83                                         int16 *IntraDC_delta);
84
85     void    doDCACPrediction(VideoDecData *video, int comp, int16 *q_block,
86                              int *direction);
87
88 #ifdef PV_ANNEX_IJKT_SUPPORT
89     void    doDCACPrediction_I(VideoDecData *video, int comp, int16 *q_block);
90 #endif
91     /*--------------------------------------------------------------------------*/
92     /* defined in block_idct.c */
93     void MBlockIDCTAdd(VideoDecData *video, int nz_coefs[]);
94
95     void BlockIDCT(uint8 *dst, uint8 *pred, int16 *blk, int width, int nzcoefs,
96                    uint8 *bitmapcol, uint8 bitmaprow);
97
98     void MBlockIDCT(VideoDecData *video);
99     void BlockIDCT_intra(MacroBlock *mblock, PIXEL *c_comp, int comp, int width_offset);
100     /*--------------------------------------------------------------------------*/
101     /* defined in combined_decode.c */
102     PV_STATUS DecodeFrameCombinedMode(VideoDecData *video);
103     PV_STATUS GetMBheader(VideoDecData *video, int16 *QP);
104     PV_STATUS GetMBData(VideoDecData *video);
105
106     /*--------------------------------------------------------------------------*/
107     /* defined in datapart_decode.c */
108     PV_STATUS DecodeFrameDataPartMode(VideoDecData *video);
109     PV_STATUS GetMBheaderDataPart_DQUANT_DC(VideoDecData *video, int16 *QP);
110     PV_STATUS GetMBheaderDataPart_P(VideoDecData *video);
111     PV_STATUS DecodeDataPart_I_VideoPacket(VideoDecData *video, int slice_counter);
112     PV_STATUS DecodeDataPart_P_VideoPacket(VideoDecData *video, int slice_counter);
113     PV_STATUS GetMBData_DataPart(VideoDecData *video);
114
115     /*--------------------------------------------------------------------------*/
116     /* defined in packet_util.c */
117     PV_STATUS PV_ReadVideoPacketHeader(VideoDecData *video, int *next_MB);
118     PV_STATUS RecoverPacketError(BitstreamDecVideo *stream, int marker_length, int32 *nextVop);
119     PV_STATUS RecoverGOBError(BitstreamDecVideo *stream, int marker_length, int32 *vopPos);
120     PV_STATUS PV_GobHeader(VideoDecData *video);
121 #ifdef PV_ANNEX_IJKT_SUPPORT
122     PV_STATUS PV_H263SliceHeader(VideoDecData *videoInt, int *next_MB);
123 #endif
124     /*--------------------------------------------------------------------------*/
125     /* defined in motion_comp.c */
126     void MBMotionComp(VideoDecData *video, int CBP);
127     void  SkippedMBMotionComp(VideoDecData *video);
128
129     /*--------------------------------------------------------------------------*/
130     /* defined in chrominance_pred.c */
131     void chrominance_pred(
132         int xpred,          /* i */
133         int ypred,          /* i */
134         uint8 *cu_prev,     /* i */
135         uint8 *cv_prev,     /* i */
136         uint8 *pred_block,  /* i */
137         int width_uv,       /* i */
138         int height_uv,      /* i */
139         int round1
140     );
141
142     /*--------------------------------------------------------------------------*/
143     /* defined in luminance_pred_mode_inter.c */
144     void luminance_pred_mode_inter(
145         int xpred,          /* i */
146         int ypred,          /* i */
147         uint8 *c_prev,      /* i */
148         uint8 *pred_block,  /* i */
149         int width,          /* i */
150         int height,         /* i */
151         int round1
152     );
153
154     /*--------------------------------------------------------------------------*/
155     /* defined in luminance_pred_mode_inter4v.c */
156     void luminance_pred_mode_inter4v(
157         int xpos,           /* i */
158         int ypos,           /* i */
159         MOT *px,            /* i */
160         MOT *py,            /* i */
161         uint8 *c_prev,      /* i */
162         uint8 *pred_block,  /* i */
163         int width,          /* i */
164         int height,         /* i */
165         int round1,         /* i */
166         int mvwidth,            /* i */
167         int *xsum_ptr,          /* i/o */
168         int *ysum_ptr           /* i/o */
169     );
170
171     /*--------------------------------------------------------------------------*/
172     /* defined in pp_semaphore_chroma_inter.c */
173 #ifdef PV_POSTPROC_ON
174     void pp_semaphore_chroma_inter(
175         int xpred,      /* i */
176         int ypred,      /* i */
177         uint8   *pp_dec_u,  /* i/o */
178         uint8   *pstprcTypPrv,  /* i */
179         int dx,     /* i */
180         int dy,     /* i */
181         int mvwidth,    /* i */
182         int height,     /* i */
183         int32   size,       /* i */
184         int mv_loc,     /* i */
185         uint8   msk_deblock /* i */
186     );
187
188     /*--------------------------------------------------------------------------*/
189     /* defined in pp_semaphore_luma.c */
190     uint8 pp_semaphore_luma(
191         int xpred,      /* i */
192         int ypred,      /* i */
193         uint8   *pp_dec_y,  /* i/o */
194         uint8   *pstprcTypPrv,  /* i */
195         int *ll,        /* i */
196         int *mv_loc,    /* i/o */
197         int dx,     /* i */
198         int dy,     /* i */
199         int mvwidth,    /* i */
200         int width,      /* i */
201         int height      /* i */
202     );
203 #endif
204     /*--------------------------------------------------------------------------*/
205     /* defined in get_pred_adv_mb_add.c */
206     int GetPredAdvancedMB(
207         int xpos,
208         int ypos,
209         uint8 *c_prev,
210         uint8 *pred_block,
211         int width,
212         int rnd1
213     );
214
215     /*--------------------------------------------------------------------------*/
216     /* defined in get_pred_adv_b_add.c */
217     int GetPredAdvancedBy0x0(
218         uint8 *c_prev,      /* i */
219         uint8 *pred_block,      /* i */
220         int width,      /* i */
221         int pred_width_rnd /* i */
222     );
223
224     int GetPredAdvancedBy0x1(
225         uint8 *c_prev,      /* i */
226         uint8 *pred_block,      /* i */
227         int width,      /* i */
228         int pred_width_rnd /* i */
229     );
230
231     int GetPredAdvancedBy1x0(
232         uint8 *c_prev,      /* i */
233         uint8 *pred_block,      /* i */
234         int width,      /* i */
235         int pred_width_rnd /* i */
236     );
237
238     int GetPredAdvancedBy1x1(
239         uint8 *c_prev,      /* i */
240         uint8 *pred_block,      /* i */
241         int width,      /* i */
242         int pred_width_rnd /* i */
243     );
244
245     /*--------------------------------------------------------------------------*/
246     /* defined in get_pred_outside.c */
247     int GetPredOutside(
248         int xpos,
249         int ypos,
250         uint8 *c_prev,
251         uint8 *pred_block,
252         int width,
253         int height,
254         int rnd1,
255         int pred_width
256     );
257
258     /*--------------------------------------------------------------------------*/
259     /* defined in find_pmvsErrRes.c */
260     void mv_prediction(VideoDecData *video, int block, MOT *mvx, MOT *mvy);
261
262     /*--------------------------------------------------------------------------*/
263
264     /*--------------------------------------------------------------------------*/
265     /* defined in mb_utils.c */
266     void Copy_MB_into_Vop(uint8 *comp, int yChan[][NCOEFF_BLOCK], int width);
267     void Copy_B_into_Vop(uint8 *comp, int cChan[], int width);
268     void PutSKIPPED_MB(uint8 *comp, uint8 *c_prev, int width);
269     void PutSKIPPED_B(uint8 *comp, uint8 *c_prev, int width);
270
271     /*--------------------------------------------------------------------------*/
272     /* defined in vop.c */
273     PV_STATUS DecodeGOVHeader(BitstreamDecVideo *stream, uint32 *time_base);
274     PV_STATUS DecodeVOLHeader(VideoDecData *video, int layer);
275     PV_STATUS DecodeVOPHeader(VideoDecData *video, Vop *currVop, Bool use_ext_tiemstamp);
276     PV_STATUS DecodeShortHeader(VideoDecData *video, Vop *currVop);
277     PV_STATUS PV_DecodeVop(VideoDecData *video);
278     uint32 CalcVopDisplayTime(Vol *currVol, Vop *currVop, int shortVideoHeader);
279
280     /*--------------------------------------------------------------------------*/
281     /* defined in post_proc.c */
282 #ifdef PV_ANNEX_IJKT_SUPPORT
283     void H263_Deblock(uint8 *rec,   int width, int height, int16 *QP_store, uint8 *mode, int chr, int T);
284 #endif
285     int  PostProcSemaphore(int16 *q_block);
286     void PostFilter(VideoDecData *video, int filer_type, uint8 *output);
287     void FindMaxMin(uint8 *ptr, int *min, int *max, int incr);
288     void DeringAdaptiveSmoothMMX(uint8 *img, int incr, int thres, int mxdf);
289     void AdaptiveSmooth_NoMMX(uint8 *Rec_Y, int v0, int h0, int v_blk, int h_blk,
290                               int thr, int width, int max_diff);
291     void Deringing_Luma(uint8 *Rec_Y, int width, int height, int16 *QP_store,
292                         int Combined, uint8 *pp_mod);
293     void Deringing_Chroma(uint8 *Rec_C, int width, int height, int16 *QP_store,
294                           int Combined, uint8 *pp_mod);
295     void CombinedHorzVertFilter(uint8 *rec, int width, int height, int16 *QP_store,
296                                 int chr, uint8 *pp_mod);
297     void CombinedHorzVertFilter_NoSoftDeblocking(uint8 *rec, int width, int height, int16 *QP_store,
298             int chr, uint8 *pp_mod);
299     void CombinedHorzVertRingFilter(uint8 *rec, int width, int height,
300                                     int16 *QP_store, int chr, uint8 *pp_mod);
301
302     /*--------------------------------------------------------------------------*/
303     /* defined in conceal.c */
304     void ConcealTexture_I(VideoDecData *video, int32 startFirstPartition, int mb_start, int mb_stop,
305                           int slice_counter);
306     void ConcealTexture_P(VideoDecData *video, int mb_start, int mb_stop,
307                           int slice_counter);
308     void ConcealPacket(VideoDecData *video, int mb_start, int mb_stop,
309                        int slice_counter);
310     void CopyVopMB(Vop *curr, uint8 *prev, int mbnum, int width, int height);
311
312     /* define in vlc_dequant.c ,  09/18/2000*/
313 #ifdef PV_SUPPORT_MAIN_PROFILE
314     int VlcDequantMpegIntraBlock(void *video, int comp, int switched,
315                                  uint8 *bitmapcol, uint8 *bitmaprow);
316     int VlcDequantMpegInterBlock(void *video, int comp,
317                                  uint8 *bitmapcol, uint8 *bitmaprow);
318 #endif
319     int VlcDequantH263IntraBlock(VideoDecData *video, int comp, int switched,
320                                  uint8 *bitmapcol, uint8 *bitmaprow);
321     int VlcDequantH263IntraBlock_SH(VideoDecData *video, int comp,
322                                     uint8 *bitmapcol, uint8 *bitmaprow);
323     int VlcDequantH263InterBlock(VideoDecData *video, int comp,
324                                  uint8 *bitmapcol, uint8 *bitmaprow);
325
326 #ifdef __cplusplus
327 }
328 #endif /* __cplusplus */
329
330 /*----------------------------------------------------------------------------
331 ; END
332 ----------------------------------------------------------------------------*/
333 #endif
334