Originally committed as revision 9511 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -28,82 +28,9 @@ | |||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| #include "bitstream.h" | #include "bitstream.h" | ||||
| #include "golomb.h" | #include "golomb.h" | ||||
| #include "mpegvideo.h" | |||||
| #include "cavs.h" | #include "cavs.h" | ||||
| #include "cavsdata.h" | #include "cavsdata.h" | ||||
| typedef struct { | |||||
| MpegEncContext s; | |||||
| Picture picture; ///< currently decoded frame | |||||
| Picture DPB[2]; ///< reference frames | |||||
| int dist[2]; ///< temporal distances from current frame to ref frames | |||||
| int profile, level; | |||||
| int aspect_ratio; | |||||
| int mb_width, mb_height; | |||||
| int pic_type; | |||||
| int progressive; | |||||
| int pic_structure; | |||||
| int skip_mode_flag; ///< select between skip_count or one skip_flag per MB | |||||
| int loop_filter_disable; | |||||
| int alpha_offset, beta_offset; | |||||
| int ref_flag; | |||||
| int mbx, mby; ///< macroblock coordinates | |||||
| int flags; ///< availability flags of neighbouring macroblocks | |||||
| int stc; ///< last start code | |||||
| uint8_t *cy, *cu, *cv; ///< current MB sample pointers | |||||
| int left_qp; | |||||
| uint8_t *top_qp; | |||||
| /** mv motion vector cache | |||||
| 0: D3 B2 B3 C2 | |||||
| 4: A1 X0 X1 - | |||||
| 8: A3 X2 X3 - | |||||
| X are the vectors in the current macroblock (5,6,9,10) | |||||
| A is the macroblock to the left (4,8) | |||||
| B is the macroblock to the top (1,2) | |||||
| C is the macroblock to the top-right (3) | |||||
| D is the macroblock to the top-left (0) | |||||
| the same is repeated for backward motion vectors */ | |||||
| vector_t mv[2*4*3]; | |||||
| vector_t *top_mv[2]; | |||||
| vector_t *col_mv; | |||||
| /** luma pred mode cache | |||||
| 0: -- B2 B3 | |||||
| 3: A1 X0 X1 | |||||
| 6: A3 X2 X3 */ | |||||
| int pred_mode_Y[3*3]; | |||||
| int *top_pred_Y; | |||||
| int l_stride, c_stride; | |||||
| int luma_scan[4]; | |||||
| int qp; | |||||
| int qp_fixed; | |||||
| int cbp; | |||||
| ScanTable scantable; | |||||
| /** intra prediction is done with un-deblocked samples | |||||
| they are saved here before deblocking the MB */ | |||||
| uint8_t *top_border_y, *top_border_u, *top_border_v; | |||||
| uint8_t left_border_y[26], left_border_u[10], left_border_v[10]; | |||||
| uint8_t intern_border_y[26]; | |||||
| uint8_t topleft_border_y, topleft_border_u, topleft_border_v; | |||||
| void (*intra_pred_l[8])(uint8_t *d,uint8_t *top,uint8_t *left,int stride); | |||||
| void (*intra_pred_c[7])(uint8_t *d,uint8_t *top,uint8_t *left,int stride); | |||||
| uint8_t *col_type_base; | |||||
| uint8_t *col_type; | |||||
| /* scaling factors for MV prediction */ | |||||
| int sym_factor; ///< for scaling in symmetrical B block | |||||
| int direct_den[2]; ///< for scaling in direct B block | |||||
| int scale_den[2]; ///< for scaling neighbouring MVs | |||||
| int got_keyframe; | |||||
| DCTELEM *block; | |||||
| } AVSContext; | |||||
| /***************************************************************************** | /***************************************************************************** | ||||
| * | * | ||||
| * in-loop deblocking filter | * in-loop deblocking filter | ||||
| @@ -23,6 +23,7 @@ | |||||
| #define CAVS_H | #define CAVS_H | ||||
| #include "dsputil.h" | #include "dsputil.h" | ||||
| #include "mpegvideo.h" | |||||
| #define SLICE_MIN_START_CODE 0x00000101 | #define SLICE_MIN_START_CODE 0x00000101 | ||||
| #define SLICE_MAX_START_CODE 0x000001af | #define SLICE_MAX_START_CODE 0x000001af | ||||
| @@ -151,4 +152,76 @@ typedef struct residual_vlc_t { | |||||
| int8_t max_run; | int8_t max_run; | ||||
| } residual_vlc_t; | } residual_vlc_t; | ||||
| typedef struct { | |||||
| MpegEncContext s; | |||||
| Picture picture; ///< currently decoded frame | |||||
| Picture DPB[2]; ///< reference frames | |||||
| int dist[2]; ///< temporal distances from current frame to ref frames | |||||
| int profile, level; | |||||
| int aspect_ratio; | |||||
| int mb_width, mb_height; | |||||
| int pic_type; | |||||
| int progressive; | |||||
| int pic_structure; | |||||
| int skip_mode_flag; ///< select between skip_count or one skip_flag per MB | |||||
| int loop_filter_disable; | |||||
| int alpha_offset, beta_offset; | |||||
| int ref_flag; | |||||
| int mbx, mby; ///< macroblock coordinates | |||||
| int flags; ///< availability flags of neighbouring macroblocks | |||||
| int stc; ///< last start code | |||||
| uint8_t *cy, *cu, *cv; ///< current MB sample pointers | |||||
| int left_qp; | |||||
| uint8_t *top_qp; | |||||
| /** mv motion vector cache | |||||
| 0: D3 B2 B3 C2 | |||||
| 4: A1 X0 X1 - | |||||
| 8: A3 X2 X3 - | |||||
| X are the vectors in the current macroblock (5,6,9,10) | |||||
| A is the macroblock to the left (4,8) | |||||
| B is the macroblock to the top (1,2) | |||||
| C is the macroblock to the top-right (3) | |||||
| D is the macroblock to the top-left (0) | |||||
| the same is repeated for backward motion vectors */ | |||||
| vector_t mv[2*4*3]; | |||||
| vector_t *top_mv[2]; | |||||
| vector_t *col_mv; | |||||
| /** luma pred mode cache | |||||
| 0: -- B2 B3 | |||||
| 3: A1 X0 X1 | |||||
| 6: A3 X2 X3 */ | |||||
| int pred_mode_Y[3*3]; | |||||
| int *top_pred_Y; | |||||
| int l_stride, c_stride; | |||||
| int luma_scan[4]; | |||||
| int qp; | |||||
| int qp_fixed; | |||||
| int cbp; | |||||
| ScanTable scantable; | |||||
| /** intra prediction is done with un-deblocked samples | |||||
| they are saved here before deblocking the MB */ | |||||
| uint8_t *top_border_y, *top_border_u, *top_border_v; | |||||
| uint8_t left_border_y[26], left_border_u[10], left_border_v[10]; | |||||
| uint8_t intern_border_y[26]; | |||||
| uint8_t topleft_border_y, topleft_border_u, topleft_border_v; | |||||
| void (*intra_pred_l[8])(uint8_t *d,uint8_t *top,uint8_t *left,int stride); | |||||
| void (*intra_pred_c[7])(uint8_t *d,uint8_t *top,uint8_t *left,int stride); | |||||
| uint8_t *col_type_base; | |||||
| uint8_t *col_type; | |||||
| /* scaling factors for MV prediction */ | |||||
| int sym_factor; ///< for scaling in symmetrical B block | |||||
| int direct_den[2]; ///< for scaling in direct B block | |||||
| int scale_den[2]; ///< for scaling neighbouring MVs | |||||
| int got_keyframe; | |||||
| DCTELEM *block; | |||||
| } AVSContext; | |||||
| #endif /* CAVS_H */ | #endif /* CAVS_H */ | ||||