|
|
|
@@ -873,7 +873,8 @@ static inline void pred_pskip_motion(H264Context * const h, int * const mx, int |
|
|
|
} |
|
|
|
|
|
|
|
static inline void direct_dist_scale_factor(H264Context * const h){ |
|
|
|
const int poc = h->s.current_picture_ptr->poc; |
|
|
|
MpegEncContext * const s = &h->s; |
|
|
|
const int poc = h->s.current_picture_ptr->field_poc[ s->picture_structure == PICT_BOTTOM_FIELD ]; |
|
|
|
const int poc1 = h->ref_list[1][0].poc; |
|
|
|
int i; |
|
|
|
for(i=0; i<h->ref_count[0]; i++){ |
|
|
|
@@ -899,20 +900,21 @@ static inline void direct_ref_list_init(H264Context * const h){ |
|
|
|
Picture * const ref1 = &h->ref_list[1][0]; |
|
|
|
Picture * const cur = s->current_picture_ptr; |
|
|
|
int list, i, j; |
|
|
|
int sidx= s->picture_structure&1; |
|
|
|
if(cur->pict_type == FF_I_TYPE) |
|
|
|
cur->ref_count[0] = 0; |
|
|
|
cur->ref_count[sidx][0] = 0; |
|
|
|
if(cur->pict_type != FF_B_TYPE) |
|
|
|
cur->ref_count[1] = 0; |
|
|
|
cur->ref_count[sidx][1] = 0; |
|
|
|
for(list=0; list<2; list++){ |
|
|
|
cur->ref_count[list] = h->ref_count[list]; |
|
|
|
cur->ref_count[sidx][list] = h->ref_count[list]; |
|
|
|
for(j=0; j<h->ref_count[list]; j++) |
|
|
|
cur->ref_poc[list][j] = h->ref_list[list][j].poc; |
|
|
|
cur->ref_poc[sidx][list][j] = h->ref_list[list][j].poc; |
|
|
|
} |
|
|
|
if(cur->pict_type != FF_B_TYPE || h->direct_spatial_mv_pred) |
|
|
|
return; |
|
|
|
for(list=0; list<2; list++){ |
|
|
|
for(i=0; i<ref1->ref_count[list]; i++){ |
|
|
|
const int poc = ref1->ref_poc[list][i]; |
|
|
|
for(i=0; i<ref1->ref_count[sidx][list]; i++){ |
|
|
|
const int poc = ref1->ref_poc[sidx][list][i]; |
|
|
|
h->map_col_to_list0[list][i] = 0; /* bogus; fills in for missing frames */ |
|
|
|
for(j=0; j<h->ref_count[list]; j++) |
|
|
|
if(h->ref_list[list][j].poc == poc){ |
|
|
|
@@ -923,7 +925,7 @@ static inline void direct_ref_list_init(H264Context * const h){ |
|
|
|
} |
|
|
|
if(FRAME_MBAFF){ |
|
|
|
for(list=0; list<2; list++){ |
|
|
|
for(i=0; i<ref1->ref_count[list]; i++){ |
|
|
|
for(i=0; i<ref1->ref_count[sidx][list]; i++){ |
|
|
|
j = h->map_col_to_list0[list][i]; |
|
|
|
h->map_col_to_list0_field[list][2*i] = 2*j; |
|
|
|
h->map_col_to_list0_field[list][2*i+1] = 2*j+1; |
|
|
|
@@ -2723,6 +2725,7 @@ static void pic_as_field(Picture *pic, const int parity){ |
|
|
|
pic->reference = parity; |
|
|
|
pic->linesize[i] *= 2; |
|
|
|
} |
|
|
|
pic->poc= pic->field_poc[parity == PICT_BOTTOM_FIELD]; |
|
|
|
} |
|
|
|
|
|
|
|
static int split_field_copy(Picture *dest, Picture *src, |
|
|
|
|