[FFmpeg-cvslog] r21677 - trunk/libavcodec/h264_direct.c

Alexander Strange astrange
Sun Feb 7 23:49:13 CET 2010


On Feb 7, 2010, at 4:09 PM, michael wrote:

> Author: michael
> Date: Sun Feb  7 22:09:09 2010
> New Revision: 21677
> 
> Log:
> Precalculate a few variables for direct mv prediction for interlaced MBs.

You didn't commit h264.h.

> Modified:
>   trunk/libavcodec/h264_direct.c
> 
> Modified: trunk/libavcodec/h264_direct.c
> ==============================================================================
> --- trunk/libavcodec/h264_direct.c	Sun Feb  7 20:10:04 2010	(r21676)
> +++ trunk/libavcodec/h264_direct.c	Sun Feb  7 22:09:09 2010	(r21677)
> @@ -120,15 +120,19 @@ void ff_h264_direct_ref_list_init(H264Co
> 
>     cur->mbaff= FRAME_MBAFF;
> 
> -    if(cur->pict_type != FF_B_TYPE || h->direct_spatial_mv_pred)
> -        return;
> -
> +    h->col_fieldoff= 0;
>     if(s->picture_structure == PICT_FRAME){
>         int cur_poc = s->current_picture_ptr->poc;
>         int *col_poc = h->ref_list[1]->field_poc;
> -        ref1sidx=sidx= (FFABS(col_poc[0] - cur_poc) >= FFABS(col_poc[1] - cur_poc));
> +        h->col_parity= (FFABS(col_poc[0] - cur_poc) >= FFABS(col_poc[1] - cur_poc));
> +        ref1sidx=sidx= h->col_parity;
> +    }else if(!(s->picture_structure & h->ref_list[1][0].reference) && !h->ref_list[1][0].mbaff){ // FL -> FL & differ parity
> +        h->col_fieldoff= s->mb_stride*(2*(h->ref_list[1][0].reference) - 3);
>     }
> 
> +    if(cur->pict_type != FF_B_TYPE || h->direct_spatial_mv_pred)
> +        return;
> +
>     for(list=0; list<2; list++){
>         fill_colmap(h, h->map_col_to_list0, list, sidx, ref1sidx, 0);
>         if(FRAME_MBAFF)
> @@ -155,14 +159,10 @@ void ff_h264_pred_direct_motion(H264Cont
> 
>     if(IS_INTERLACED(h->ref_list[1][0].mb_type[mb_xy])){ // AFL/AFR/FR/FL -> AFL/FL
>         if(!IS_INTERLACED(*mb_type)){                    //     AFR/FR    -> AFL/FL
> -            int cur_poc = s->current_picture_ptr->poc;
> -            int *col_poc = h->ref_list[1]->field_poc;
> -            int col_parity = FFABS(col_poc[0] - cur_poc) >= FFABS(col_poc[1] - cur_poc);
> -            mb_xy= s->mb_x + ((s->mb_y&~1) + col_parity)*s->mb_stride;
> +            mb_xy= s->mb_x + ((s->mb_y&~1) + h->col_parity)*s->mb_stride;
>             b8_stride = 0;
> -        }else if(!(s->picture_structure & h->ref_list[1][0].reference) && !h->ref_list[1][0].mbaff){// FL -> FL & differ parity
> -            int fieldoff= 2*(h->ref_list[1][0].reference)-3;
> -            mb_xy += s->mb_stride*fieldoff;
> +        }else{
> +            mb_xy += h->col_fieldoff; // non zero for FL -> FL & differ parity
>         }
>         goto single_col;
>     }else{                                               // AFL/AFR/FR/FL -> AFR/FR
> _______________________________________________
> ffmpeg-cvslog mailing list
> ffmpeg-cvslog at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-cvslog




More information about the ffmpeg-cvslog mailing list