Browse Source

Merge commit 'be69f0a800903b7573b18d9287d18b2f368b8b11'

* commit 'be69f0a800903b7573b18d9287d18b2f368b8b11':
  h264: move col_{parity,fieldoff} into the per-slice context

Merged-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.7
Michael Niedermayer 11 years ago
parent
commit
20477a4ecb
2 changed files with 15 additions and 15 deletions
  1. +2
    -2
      libavcodec/h264.h
  2. +13
    -13
      libavcodec/h264_direct.c

+ 2
- 2
libavcodec/h264.h View File

@@ -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];


+ 13
- 13
libavcodec/h264_direct.c View File

@@ -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…
Cancel
Save