You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
Merge commit 'ee0d774dfa94655e44707ff3e02f4a4d282c1963'
* commit 'ee0d774dfa94655e44707ff3e02f4a4d282c1963': h264: move dist_scale_factor[_field] into the per-slice context Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -396,6 +396,9 @@ typedef struct H264SliceContext {
|
|||||||
int col_parity;
|
int col_parity;
|
||||||
int col_fieldoff;
|
int col_fieldoff;
|
||||||
|
|
||||||
|
int dist_scale_factor[32];
|
||||||
|
int dist_scale_factor_field[2][32];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* non zero coeff count cache.
|
* non zero coeff count cache.
|
||||||
* is 64 if not available.
|
* is 64 if not available.
|
||||||
@@ -487,8 +490,6 @@ typedef struct H264Context {
|
|||||||
int picture_structure;
|
int picture_structure;
|
||||||
int first_field;
|
int first_field;
|
||||||
|
|
||||||
int dist_scale_factor[32];
|
|
||||||
int dist_scale_factor_field[2][32];
|
|
||||||
int map_col_to_list0[2][16 + 32];
|
int map_col_to_list0[2][16 + 32];
|
||||||
int map_col_to_list0_field[2][2][16 + 32];
|
int map_col_to_list0_field[2][2][16 + 32];
|
||||||
|
|
||||||
@@ -882,7 +883,7 @@ void ff_h264_init_cabac_states(H264Context *h, H264SliceContext *sl);
|
|||||||
|
|
||||||
void ff_h264_init_dequant_tables(H264Context *h);
|
void ff_h264_init_dequant_tables(H264Context *h);
|
||||||
|
|
||||||
void ff_h264_direct_dist_scale_factor(H264Context *const h);
|
void ff_h264_direct_dist_scale_factor(H264Context *const h, H264SliceContext *sl);
|
||||||
void ff_h264_direct_ref_list_init(H264Context *const h, H264SliceContext *sl);
|
void ff_h264_direct_ref_list_init(H264Context *const h, H264SliceContext *sl);
|
||||||
void ff_h264_pred_direct_motion(H264Context *const h, H264SliceContext *sl,
|
void ff_h264_pred_direct_motion(H264Context *const h, H264SliceContext *sl,
|
||||||
int *mb_type);
|
int *mb_type);
|
||||||
|
@@ -47,7 +47,8 @@ static int get_scale_factor(H264Context *const h, int poc, int poc1, int i)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_h264_direct_dist_scale_factor(H264Context *const h)
|
void ff_h264_direct_dist_scale_factor(H264Context *const h,
|
||||||
|
H264SliceContext *sl)
|
||||||
{
|
{
|
||||||
const int poc = FIELD_PICTURE(h) ? h->cur_pic_ptr->field_poc[h->picture_structure == PICT_BOTTOM_FIELD]
|
const int poc = FIELD_PICTURE(h) ? h->cur_pic_ptr->field_poc[h->picture_structure == PICT_BOTTOM_FIELD]
|
||||||
: h->cur_pic_ptr->poc;
|
: h->cur_pic_ptr->poc;
|
||||||
@@ -59,12 +60,12 @@ void ff_h264_direct_dist_scale_factor(H264Context *const h)
|
|||||||
const int poc = h->cur_pic_ptr->field_poc[field];
|
const int poc = h->cur_pic_ptr->field_poc[field];
|
||||||
const int poc1 = h->ref_list[1][0].field_poc[field];
|
const int poc1 = h->ref_list[1][0].field_poc[field];
|
||||||
for (i = 0; i < 2 * h->ref_count[0]; i++)
|
for (i = 0; i < 2 * h->ref_count[0]; i++)
|
||||||
h->dist_scale_factor_field[field][i ^ field] =
|
sl->dist_scale_factor_field[field][i ^ field] =
|
||||||
get_scale_factor(h, poc, poc1, i + 16);
|
get_scale_factor(h, poc, poc1, i + 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < h->ref_count[0]; i++)
|
for (i = 0; i < h->ref_count[0]; i++)
|
||||||
h->dist_scale_factor[i] = get_scale_factor(h, poc, poc1, i);
|
sl->dist_scale_factor[i] = get_scale_factor(h, poc, poc1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_colmap(H264Context *h, int map[2][16 + 32], int list,
|
static void fill_colmap(H264Context *h, int map[2][16 + 32], int list,
|
||||||
@@ -556,13 +557,13 @@ single_col:
|
|||||||
{
|
{
|
||||||
const int *map_col_to_list0[2] = { h->map_col_to_list0[0],
|
const int *map_col_to_list0[2] = { h->map_col_to_list0[0],
|
||||||
h->map_col_to_list0[1] };
|
h->map_col_to_list0[1] };
|
||||||
const int *dist_scale_factor = h->dist_scale_factor;
|
const int *dist_scale_factor = sl->dist_scale_factor;
|
||||||
int ref_offset;
|
int ref_offset;
|
||||||
|
|
||||||
if (FRAME_MBAFF(h) && IS_INTERLACED(*mb_type)) {
|
if (FRAME_MBAFF(h) && IS_INTERLACED(*mb_type)) {
|
||||||
map_col_to_list0[0] = h->map_col_to_list0_field[h->mb_y & 1][0];
|
map_col_to_list0[0] = h->map_col_to_list0_field[h->mb_y & 1][0];
|
||||||
map_col_to_list0[1] = h->map_col_to_list0_field[h->mb_y & 1][1];
|
map_col_to_list0[1] = h->map_col_to_list0_field[h->mb_y & 1][1];
|
||||||
dist_scale_factor = h->dist_scale_factor_field[h->mb_y & 1];
|
dist_scale_factor = sl->dist_scale_factor_field[h->mb_y & 1];
|
||||||
}
|
}
|
||||||
ref_offset = (h->ref_list[1][0].mbaff << 4) & (mb_type_col[0] >> 3);
|
ref_offset = (h->ref_list[1][0].mbaff << 4) & (mb_type_col[0] >> 3);
|
||||||
|
|
||||||
|
@@ -1852,7 +1852,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sl->slice_type_nos == AV_PICTURE_TYPE_B && !sl->direct_spatial_mv_pred)
|
if (sl->slice_type_nos == AV_PICTURE_TYPE_B && !sl->direct_spatial_mv_pred)
|
||||||
ff_h264_direct_dist_scale_factor(h);
|
ff_h264_direct_dist_scale_factor(h, sl);
|
||||||
ff_h264_direct_ref_list_init(h, sl);
|
ff_h264_direct_ref_list_init(h, sl);
|
||||||
|
|
||||||
if (sl->slice_type_nos != AV_PICTURE_TYPE_I && h->pps.cabac) {
|
if (sl->slice_type_nos != AV_PICTURE_TYPE_I && h->pps.cabac) {
|
||||||
|
Reference in New Issue
Block a user