Merge commit 'a67f8ae9a2c8529bf6a635e8ca4e3483592708b1'
* commit 'a67f8ae9a2c8529bf6a635e8ca4e3483592708b1': h264: move mvd_table into the per-slice context Conflicts: libavcodec/h264.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
c9841c05be
@ -449,6 +449,9 @@ int ff_h264_alloc_tables(H264Context *h)
|
|||||||
row_mb_num, 16 * sizeof(uint8_t), fail);
|
row_mb_num, 16 * sizeof(uint8_t), fail);
|
||||||
FF_ALLOCZ_ARRAY_OR_GOTO(h->avctx, h->mvd_table[1],
|
FF_ALLOCZ_ARRAY_OR_GOTO(h->avctx, h->mvd_table[1],
|
||||||
row_mb_num, 16 * sizeof(uint8_t), fail);
|
row_mb_num, 16 * sizeof(uint8_t), fail);
|
||||||
|
h->slice_ctx[0].mvd_table[0] = h->mvd_table[0];
|
||||||
|
h->slice_ctx[0].mvd_table[1] = h->mvd_table[1];
|
||||||
|
|
||||||
FF_ALLOCZ_OR_GOTO(h->avctx, h->direct_table,
|
FF_ALLOCZ_OR_GOTO(h->avctx, h->direct_table,
|
||||||
4 * big_mb_num * sizeof(uint8_t), fail);
|
4 * big_mb_num * sizeof(uint8_t), fail);
|
||||||
FF_ALLOCZ_OR_GOTO(h->avctx, h->list_counts,
|
FF_ALLOCZ_OR_GOTO(h->avctx, h->list_counts,
|
||||||
|
@ -439,6 +439,8 @@ typedef struct H264SliceContext {
|
|||||||
///< check that i is not too large or ensure that there is some unused stuff after mb
|
///< check that i is not too large or ensure that there is some unused stuff after mb
|
||||||
int16_t mb_padding[256 * 2];
|
int16_t mb_padding[256 * 2];
|
||||||
|
|
||||||
|
uint8_t (*mvd_table[2])[2];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cabac
|
* Cabac
|
||||||
*/
|
*/
|
||||||
@ -1065,7 +1067,7 @@ static av_always_inline void write_back_motion_list(H264Context *h,
|
|||||||
AV_COPY128(mv_dst + 2 * b_stride, mv_src + 8 * 2);
|
AV_COPY128(mv_dst + 2 * b_stride, mv_src + 8 * 2);
|
||||||
AV_COPY128(mv_dst + 3 * b_stride, mv_src + 8 * 3);
|
AV_COPY128(mv_dst + 3 * b_stride, mv_src + 8 * 3);
|
||||||
if (CABAC(h)) {
|
if (CABAC(h)) {
|
||||||
uint8_t (*mvd_dst)[2] = &h->mvd_table[list][FMO ? 8 * h->mb_xy
|
uint8_t (*mvd_dst)[2] = &sl->mvd_table[list][FMO ? 8 * h->mb_xy
|
||||||
: h->mb2br_xy[h->mb_xy]];
|
: h->mb2br_xy[h->mb_xy]];
|
||||||
uint8_t(*mvd_src)[2] = &h->mvd_cache[list][scan8[0]];
|
uint8_t(*mvd_src)[2] = &h->mvd_cache[list][scan8[0]];
|
||||||
if (IS_SKIP(mb_type)) {
|
if (IS_SKIP(mb_type)) {
|
||||||
|
@ -689,7 +689,7 @@ static void fill_decode_caches(H264Context *h, H264SliceContext *sl, int mb_type
|
|||||||
|
|
||||||
if (!(mb_type & (MB_TYPE_SKIP | MB_TYPE_DIRECT2))) {
|
if (!(mb_type & (MB_TYPE_SKIP | MB_TYPE_DIRECT2))) {
|
||||||
uint8_t(*mvd_cache)[2] = &h->mvd_cache[list][scan8[0]];
|
uint8_t(*mvd_cache)[2] = &h->mvd_cache[list][scan8[0]];
|
||||||
uint8_t(*mvd)[2] = h->mvd_table[list];
|
uint8_t(*mvd)[2] = sl->mvd_table[list];
|
||||||
ref_cache[2 + 8 * 0] =
|
ref_cache[2 + 8 * 0] =
|
||||||
ref_cache[2 + 8 * 2] = PART_NOT_AVAILABLE;
|
ref_cache[2 + 8 * 2] = PART_NOT_AVAILABLE;
|
||||||
AV_ZERO32(mv_cache[2 + 8 * 0]);
|
AV_ZERO32(mv_cache[2 + 8 * 0]);
|
||||||
|
@ -388,6 +388,8 @@ static void clone_tables(H264Context *dst, H264SliceContext *sl,
|
|||||||
H264Context *src, int i)
|
H264Context *src, int i)
|
||||||
{
|
{
|
||||||
sl->intra4x4_pred_mode = src->intra4x4_pred_mode + i * 8 * 2 * src->mb_stride;
|
sl->intra4x4_pred_mode = src->intra4x4_pred_mode + i * 8 * 2 * src->mb_stride;
|
||||||
|
sl->mvd_table[0] = src->mvd_table[0] + i * 8 * 2 * src->mb_stride;
|
||||||
|
sl->mvd_table[1] = src->mvd_table[1] + i * 8 * 2 * src->mb_stride;
|
||||||
|
|
||||||
dst->non_zero_count = src->non_zero_count;
|
dst->non_zero_count = src->non_zero_count;
|
||||||
dst->slice_table = src->slice_table;
|
dst->slice_table = src->slice_table;
|
||||||
@ -395,8 +397,6 @@ static void clone_tables(H264Context *dst, H264SliceContext *sl,
|
|||||||
dst->mb2b_xy = src->mb2b_xy;
|
dst->mb2b_xy = src->mb2b_xy;
|
||||||
dst->mb2br_xy = src->mb2br_xy;
|
dst->mb2br_xy = src->mb2br_xy;
|
||||||
dst->chroma_pred_mode_table = src->chroma_pred_mode_table;
|
dst->chroma_pred_mode_table = src->chroma_pred_mode_table;
|
||||||
dst->mvd_table[0] = src->mvd_table[0] + i * 8 * 2 * src->mb_stride;
|
|
||||||
dst->mvd_table[1] = src->mvd_table[1] + i * 8 * 2 * src->mb_stride;
|
|
||||||
dst->direct_table = src->direct_table;
|
dst->direct_table = src->direct_table;
|
||||||
dst->list_counts = src->list_counts;
|
dst->list_counts = src->list_counts;
|
||||||
dst->DPB = src->DPB;
|
dst->DPB = src->DPB;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user