summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_encoder.c
diff options
context:
space:
mode:
authorAlex Converse <aconverse@google.com>2015-03-20 14:55:43 -0700
committerAlex Converse <aconverse@google.com>2015-03-24 11:19:47 -0700
commit4dcb839607efdcff4be3936bc07ab557bc59b7ea (patch)
tree5197fadc9073a3d48945259dfca78ce6c28f4b3c /vp9/encoder/vp9_encoder.c
parenta1e20ec58f3b562af536be80f8dd061878cbaffd (diff)
downloadlibvpx-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.c27
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;