Make update_partition_context faster
Use vpx_memset for updating the partition contexts. Thanks to Noah for pointing out the need of refactoring in this part. Change-Id: I67fb78429d632298f1cd8a0be346cc76f79392a6
This commit is contained in:
parent
49dee16879
commit
92479d9526
@ -404,34 +404,15 @@ static INLINE void update_partition_context(MACROBLOCKD *xd,
|
|||||||
int bwl = b_width_log2(sb_type);
|
int bwl = b_width_log2(sb_type);
|
||||||
int bhl = b_height_log2(sb_type);
|
int bhl = b_height_log2(sb_type);
|
||||||
int boffset = b_width_log2(BLOCK_SIZE_SB64X64) - bsl;
|
int boffset = b_width_log2(BLOCK_SIZE_SB64X64) - bsl;
|
||||||
int i;
|
char pcvalue[2] = {~(0xe << boffset), ~(0xf <<boffset)};
|
||||||
|
|
||||||
|
assert(MAX(bwl, bhl) <= bsl);
|
||||||
|
|
||||||
// update the partition context at the end notes. set partition bits
|
// update the partition context at the end notes. set partition bits
|
||||||
// of block sizes larger than the current one to be one, and partition
|
// of block sizes larger than the current one to be one, and partition
|
||||||
// bits of smaller block sizes to be zero.
|
// bits of smaller block sizes to be zero.
|
||||||
if ((bwl == bsl) && (bhl == bsl)) {
|
vpx_memset(xd->above_seg_context, pcvalue[bwl == bsl], bs);
|
||||||
for (i = 0; i < bs; i++)
|
vpx_memset(xd->left_seg_context, pcvalue[bhl == bsl], bs);
|
||||||
xd->left_seg_context[i] = ~(0xf << boffset);
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->above_seg_context[i] = ~(0xf << boffset);
|
|
||||||
} else if ((bwl == bsl) && (bhl < bsl)) {
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->left_seg_context[i] = ~(0xe << boffset);
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->above_seg_context[i] = ~(0xf << boffset);
|
|
||||||
} else if ((bwl < bsl) && (bhl == bsl)) {
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->left_seg_context[i] = ~(0xf << boffset);
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->above_seg_context[i] = ~(0xe << boffset);
|
|
||||||
} else if ((bwl < bsl) && (bhl < bsl)) {
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->left_seg_context[i] = ~(0xe << boffset);
|
|
||||||
for (i = 0; i < bs; i++)
|
|
||||||
xd->above_seg_context[i] = ~(0xe << boffset);
|
|
||||||
} else {
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE int partition_plane_context(MACROBLOCKD *xd,
|
static INLINE int partition_plane_context(MACROBLOCKD *xd,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user