diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-03-21 14:39:45 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-21 14:39:49 +0100 |
commit | bd76a4822f989f30c6dc109a5157d6239a6b1112 (patch) | |
tree | 0d113eea02fe7fa2ad853f8f891470387801a6c9 | |
parent | 20477a4ecbeeb4abe4fe896731312836955435f0 (diff) | |
parent | ee0d774dfa94655e44707ff3e02f4a4d282c1963 (diff) | |
download | ffmpeg-bd76a4822f989f30c6dc109a5157d6239a6b1112.tar.gz |
Merge commit 'ee0d774dfa94655e44707ff3e02f4a4d282c1963'
* commit 'ee0d774dfa94655e44707ff3e02f4a4d282c1963':
h264: move dist_scale_factor[_field] into the per-slice context
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/h264.h | 7 | ||||
-rw-r--r-- | libavcodec/h264_direct.c | 11 | ||||
-rw-r--r-- | libavcodec/h264_slice.c | 2 |
3 files changed, 11 insertions, 9 deletions
diff --git a/libavcodec/h264.h b/libavcodec/h264.h index fd510f5ed7..5c9b91a9ab 100644 --- a/libavcodec/h264.h +++ b/libavcodec/h264.h @@ -396,6 +396,9 @@ typedef struct H264SliceContext { int col_parity; int col_fieldoff; + int dist_scale_factor[32]; + int dist_scale_factor_field[2][32]; + /** * non zero coeff count cache. * is 64 if not available. @@ -487,8 +490,6 @@ typedef struct H264Context { int picture_structure; 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_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_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_pred_direct_motion(H264Context *const h, H264SliceContext *sl, int *mb_type); diff --git a/libavcodec/h264_direct.c b/libavcodec/h264_direct.c index 54d8ee046f..f4eb9036cb 100644 --- a/libavcodec/h264_direct.c +++ b/libavcodec/h264_direct.c @@ -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] : 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 poc1 = h->ref_list[1][0].field_poc[field]; 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); } 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, @@ -556,13 +557,13 @@ single_col: { const int *map_col_to_list0[2] = { h->map_col_to_list0[0], 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; 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[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); diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 3a4e525551..e6ac55e4d6 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -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) - ff_h264_direct_dist_scale_factor(h); + ff_h264_direct_dist_scale_factor(h, sl); ff_h264_direct_ref_list_init(h, sl); if (sl->slice_type_nos != AV_PICTURE_TYPE_I && h->pps.cabac) { |