diff options
author | Alex Converse <aconverse@google.com> | 2015-03-20 14:55:43 -0700 |
---|---|---|
committer | Alex Converse <aconverse@google.com> | 2015-03-24 11:19:47 -0700 |
commit | 4dcb839607efdcff4be3936bc07ab557bc59b7ea (patch) | |
tree | 5197fadc9073a3d48945259dfca78ce6c28f4b3c /vp9/encoder/vp9_encoder.c | |
parent | a1e20ec58f3b562af536be80f8dd061878cbaffd (diff) | |
download | libvpx-4dcb839607efdcff4be3936bc07ab557bc59b7ea.tar libvpx-4dcb839607efdcff4be3936bc07ab557bc59b7ea.tar.gz libvpx-4dcb839607efdcff4be3936bc07ab557bc59b7ea.tar.bz2 libvpx-4dcb839607efdcff4be3936bc07ab557bc59b7ea.zip |
VP9E_GET_ACTIVE_MAP API function.
This is useful when aq mode 3 (cyclic refresh) reactivates segments for refresh.
Change-Id: I3ad1d9410b899ede393d82bb8db14e2da4d84eca
Diffstat (limited to 'vp9/encoder/vp9_encoder.c')
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index fc05811a3..59788eb82 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -183,6 +183,33 @@ int vp9_set_active_map(VP9_COMP* cpi, } } +int vp9_get_active_map(VP9_COMP* cpi, + unsigned char* new_map_16x16, + int rows, + int cols) { + if (rows == cpi->common.mb_rows && cols == cpi->common.mb_cols && + new_map_16x16) { + unsigned char* const seg_map_8x8 = cpi->segmentation_map; + const int mi_rows = cpi->common.mi_rows; + const int mi_cols = cpi->common.mi_cols; + vpx_memset(new_map_16x16, !cpi->active_map.enabled, rows * cols); + if (cpi->active_map.enabled) { + int r, c; + for (r = 0; r < mi_rows; ++r) { + for (c = 0; c < mi_cols; ++c) { + // Cyclic refresh segments are considered active despite not having + // AM_SEGMENT_ID_ACTIVE + new_map_16x16[(r >> 1) * cols + (c >> 1)] |= + seg_map_8x8[r * mi_cols + c] != AM_SEGMENT_ID_INACTIVE; + } + } + } + return 0; + } else { + return -1; + } +} + void vp9_set_high_precision_mv(VP9_COMP *cpi, int allow_high_precision_mv) { MACROBLOCK *const mb = &cpi->td.mb; cpi->common.allow_high_precision_mv = allow_high_precision_mv; |