Home | History | Annotate | Download | only in src
      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 
    335