mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
Merge commit 'be69f0a800903b7573b18d9287d18b2f368b8b11'
* commit 'be69f0a800903b7573b18d9287d18b2f368b8b11': h264: move col_{parity,fieldoff} into the per-slice context Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
20477a4ecb
@ -393,6 +393,8 @@ typedef struct H264SliceContext {
|
||||
int neighbor_transform_size;
|
||||
|
||||
int direct_spatial_mv_pred;
|
||||
int col_parity;
|
||||
int col_fieldoff;
|
||||
|
||||
/**
|
||||
* non zero coeff count cache.
|
||||
@ -485,8 +487,6 @@ typedef struct H264Context {
|
||||
int picture_structure;
|
||||
int first_field;
|
||||
|
||||
int col_parity;
|
||||
int col_fieldoff;
|
||||
int dist_scale_factor[32];
|
||||
int dist_scale_factor_field[2][32];
|
||||
int map_col_to_list0[2][16 + 32];
|
||||
|
@ -126,18 +126,18 @@ void ff_h264_direct_ref_list_init(H264Context *const h, H264SliceContext *sl)
|
||||
|
||||
cur->mbaff = FRAME_MBAFF(h);
|
||||
|
||||
h->col_fieldoff = 0;
|
||||
sl->col_fieldoff = 0;
|
||||
if (h->picture_structure == PICT_FRAME) {
|
||||
int cur_poc = h->cur_pic_ptr->poc;
|
||||
int *col_poc = h->ref_list[1]->field_poc;
|
||||
h->col_parity = (FFABS(col_poc[0] - cur_poc) >=
|
||||
FFABS(col_poc[1] - cur_poc));
|
||||
sl->col_parity = (FFABS(col_poc[0] - cur_poc) >=
|
||||
FFABS(col_poc[1] - cur_poc));
|
||||
ref1sidx =
|
||||
sidx = h->col_parity;
|
||||
sidx = sl->col_parity;
|
||||
// FL -> FL & differ parity
|
||||
} else if (!(h->picture_structure & h->ref_list[1][0].reference) &&
|
||||
!h->ref_list[1][0].mbaff) {
|
||||
h->col_fieldoff = 2 * h->ref_list[1][0].reference - 3;
|
||||
sl->col_fieldoff = 2 * h->ref_list[1][0].reference - 3;
|
||||
}
|
||||
|
||||
if (sl->slice_type_nos != AV_PICTURE_TYPE_B || sl->direct_spatial_mv_pred)
|
||||
@ -260,13 +260,13 @@ static void pred_spatial_direct_motion(H264Context *const h, H264SliceContext *s
|
||||
|
||||
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
|
||||
mb_y = (h->mb_y & ~1) + h->col_parity;
|
||||
mb_y = (h->mb_y & ~1) + sl->col_parity;
|
||||
mb_xy = h->mb_x +
|
||||
((h->mb_y & ~1) + h->col_parity) * h->mb_stride;
|
||||
((h->mb_y & ~1) + sl->col_parity) * h->mb_stride;
|
||||
b8_stride = 0;
|
||||
} else {
|
||||
mb_y += h->col_fieldoff;
|
||||
mb_xy += h->mb_stride * h->col_fieldoff; // non-zero for FL -> FL & differ parity
|
||||
mb_y += sl->col_fieldoff;
|
||||
mb_xy += h->mb_stride * sl->col_fieldoff; // non-zero for FL -> FL & differ parity
|
||||
}
|
||||
goto single_col;
|
||||
} else { // AFL/AFR/FR/FL -> AFR/FR
|
||||
@ -478,13 +478,13 @@ static void pred_temp_direct_motion(H264Context *const h, H264SliceContext *sl,
|
||||
|
||||
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
|
||||
mb_y = (h->mb_y & ~1) + h->col_parity;
|
||||
mb_y = (h->mb_y & ~1) + sl->col_parity;
|
||||
mb_xy = h->mb_x +
|
||||
((h->mb_y & ~1) + h->col_parity) * h->mb_stride;
|
||||
((h->mb_y & ~1) + sl->col_parity) * h->mb_stride;
|
||||
b8_stride = 0;
|
||||
} else {
|
||||
mb_y += h->col_fieldoff;
|
||||
mb_xy += h->mb_stride * h->col_fieldoff; // non-zero for FL -> FL & differ parity
|
||||
mb_y += sl->col_fieldoff;
|
||||
mb_xy += h->mb_stride * sl->col_fieldoff; // non-zero for FL -> FL & differ parity
|
||||
}
|
||||
goto single_col;
|
||||
} else { // AFL/AFR/FR/FL -> AFR/FR
|
||||
|
Loading…
Reference in New Issue
Block a user