📄 vdec_motion.c
字号:
p_mb->pppi_motion_vectors[1][1][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 8, 8, 1 ); \ } \ } \ \ else /* MB_MOTION_BACKWARD */ \ { \ MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[0][1], \ p_mb->b_motion_field, \ p_mb->pppi_motion_vectors[0][1][0], \ p_mb->pppi_motion_vectors[0][1][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 8, 0, 0 ); \ \ MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[1][1], \ p_mb->b_motion_field, \ p_mb->pppi_motion_vectors[1][1][0], \ p_mb->pppi_motion_vectors[1][1][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 8, 8, 0 ); \ } \}void vdec_MotionField16x8420( macroblock_t * p_mb ){ FIELD16X8( Motion420 )}void vdec_MotionField16x8422( macroblock_t * p_mb ){ //FIELD16X8( Motion422 )}void vdec_MotionField16x8444( macroblock_t * p_mb ){ //FIELD16X8( Motion444 )}/***************************************************************************** * vdec_MotionFieldDMVXXX?? : motion compensation for dmv motion type (field) *****************************************************************************/#define FIELDDMV( MOTION ) \{ \ /* This is necessarily a MOTION_FORWARD only macroblock, in a P \ * picture. */ \ picture_t * p_pred; \ \ /* predict from field of same parity */ \ MOTION( p_mb, p_mb->p_forward, \ p_mb->b_motion_field, p_mb->b_motion_field, \ p_mb->pppi_motion_vectors[0][0][0], \ p_mb->pppi_motion_vectors[0][0][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 16, 0, 0 ); \ \ if( p_mb->b_P_second ) \ p_pred = p_mb->p_picture; \ else \ p_pred = p_mb->p_forward; \ \ /* predict from field of opposite parity */ \ MOTION( p_mb, p_pred, !p_mb->b_motion_field, p_mb->b_motion_field, \ p_mb->ppi_dmv[0][0], p_mb->ppi_dmv[0][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 16, 0, 1 ); \} /* FIELDDMV */void vdec_MotionFieldDMV420( macroblock_t * p_mb ){ FIELDDMV( Motion420 )}void vdec_MotionFieldDMV422( macroblock_t * p_mb ){ //FIELDDMV( Motion422 )}void vdec_MotionFieldDMV444( macroblock_t * p_mb ){ //FIELDDMV( Motion444 )}/***************************************************************************** * vdec_MotionFrameFrameXXX?? : motion compensation for frame motion type (frame) *****************************************************************************/#define FRAMEFRAME( MOTION ) \{ \ if( p_mb->i_mb_type & MB_MOTION_FORWARD ) \ { \ MOTION( p_mb, p_mb->p_forward, 0, 0, \ p_mb->pppi_motion_vectors[0][0][0], \ p_mb->pppi_motion_vectors[0][0][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 16, 0, 0 ); \ \ if( p_mb->i_mb_type & MB_MOTION_BACKWARD ) \ { \ MOTION( p_mb, p_mb->p_backward, 0, 0, \ p_mb->pppi_motion_vectors[0][1][0], \ p_mb->pppi_motion_vectors[0][1][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 16, 0, 1 ); \ } \ } \ \ else /* MB_MOTION_BACKWARD */ \ { \ MOTION( p_mb, p_mb->p_backward, 0, 0, \ p_mb->pppi_motion_vectors[0][1][0], \ p_mb->pppi_motion_vectors[0][1][1], \ p_mb->i_l_stride, p_mb->i_c_stride, 16, 0, 0 ); \ } \} /* FRAMEFRAME */void vdec_MotionFrameFrame420( macroblock_t * p_mb ){ FRAMEFRAME( Motion420 )}void vdec_MotionFrameFrame422( macroblock_t * p_mb ){ //FRAMEFRAME( Motion422 )}void vdec_MotionFrameFrame444( macroblock_t * p_mb ){ //FRAMEFRAME( Motion444 )}/***************************************************************************** * vdec_MotionFrameFieldXXX?? : motion compensation for field motion type (frame) *****************************************************************************/#define FRAMEFIELD( MOTION ) \{ \ int i_l_stride = p_mb->i_l_stride << 1; \ int i_c_stride = p_mb->i_c_stride << 1; \ \ if( p_mb->i_mb_type & MB_MOTION_FORWARD ) \ { \ MOTION( p_mb, p_mb->p_forward, p_mb->ppi_field_select[0][0], 0, \ p_mb->pppi_motion_vectors[0][0][0], \ p_mb->pppi_motion_vectors[0][0][1], \ i_l_stride, i_c_stride, 8, 0, 0 ); \ \ MOTION( p_mb, p_mb->p_forward, p_mb->ppi_field_select[1][0], 1, \ p_mb->pppi_motion_vectors[1][0][0], \ p_mb->pppi_motion_vectors[1][0][1], \ i_l_stride, i_c_stride, 8, 0, 0 ); \ \ if( p_mb->i_mb_type & MB_MOTION_BACKWARD ) \ { \ MOTION( p_mb, p_mb->p_backward, \ p_mb->ppi_field_select[0][1], 0, \ p_mb->pppi_motion_vectors[0][1][0], \ p_mb->pppi_motion_vectors[0][1][1], \ i_l_stride, i_c_stride, 8, 0, 1 ); \ \ MOTION( p_mb, p_mb->p_backward, \ p_mb->ppi_field_select[1][1], 1, \ p_mb->pppi_motion_vectors[1][1][0], \ p_mb->pppi_motion_vectors[1][1][1], \ i_l_stride, i_c_stride, 8, 0, 1 ); \ } \ } \ \ else /* MB_MOTION_BACKWARD only */ \ { \ MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[0][1], 0,\ p_mb->pppi_motion_vectors[0][1][0], \ p_mb->pppi_motion_vectors[0][1][1], \ i_l_stride, i_c_stride, 8, 0, 0 ); \ \ MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[1][1], 1,\ p_mb->pppi_motion_vectors[1][1][0], \ p_mb->pppi_motion_vectors[1][1][1], \ i_l_stride, i_c_stride, 8, 0, 0 ); \ } \} /* FRAMEFIELD */void vdec_MotionFrameField420( macroblock_t * p_mb ){ FRAMEFIELD( Motion420 )}void vdec_MotionFrameField422( macroblock_t * p_mb ){ //FRAMEFIELD( Motion422 )}void vdec_MotionFrameField444( macroblock_t * p_mb ){ //FRAMEFIELD( Motion444 )}/***************************************************************************** * vdec_MotionFrameDMVXXX?? : motion compensation for dmv motion type (frame) *****************************************************************************/#define FRAMEDMV( MOTION ) \{ \ /* This is necessarily a MOTION_FORWARD only macroblock, in a P \ * picture. */ \ \ /* predict top field from top field */ \ MOTION( p_mb, p_mb->p_forward, 0, 0, \ p_mb->pppi_motion_vectors[0][0][0], \ p_mb->pppi_motion_vectors[0][0][1], \ /* XXX?? XXX?? >> 1 ? */ \ p_mb->i_l_stride << 1, p_mb->i_c_stride << 1, 8, 0, 0 ); \ \ /* predict and add to top field from bottom field */ \ MOTION( p_mb, p_mb->p_forward, 1, 0, \ p_mb->ppi_dmv[0][0], p_mb->ppi_dmv[0][1], \ p_mb->i_l_stride << 1, p_mb->i_c_stride << 1, 8, 0, 1 ); \ \ /* predict bottom field from bottom field */ \ MOTION( p_mb, p_mb->p_forward, 1, 1, \ p_mb->pppi_motion_vectors[0][0][0], \ p_mb->pppi_motion_vectors[0][0][1], \ /* XXX?? XXX?? >> 1 ? */ \ p_mb->i_l_stride << 1, p_mb->i_c_stride << 1, 8, 0, 0 ); \ \ /* predict and add to bottom field from top field */ \ MOTION( p_mb, p_mb->p_forward, 1, 0, \ p_mb->ppi_dmv[1][0], p_mb->ppi_dmv[1][1], \ p_mb->i_l_stride << 1, p_mb->i_c_stride << 1, 8, 0, 1 ); \} /* FRAMEDMV */void vdec_MotionFrameDMV420( macroblock_t * p_mb ){ FRAMEDMV( Motion420 )}void vdec_MotionFrameDMV422( macroblock_t * p_mb ){ //FRAMEDMV( Motion422 )}void vdec_MotionFrameDMV444( macroblock_t * p_mb ){ //FRAMEDMV( Motion444 )}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -