15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  Copyright (c) 2012 The WebM project authors. All Rights Reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  Use of this source code is governed by a BSD-style license
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  that can be found in the LICENSE file in the root of the source
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  tree. An additional intellectual property rights grant can be found
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  in the file PATENTS.  All contributing project authors may
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  be found in the AUTHORS file in the root of the source tree.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <math.h>
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <stddef.h>
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <stdio.h>
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <stdlib.h>
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <string.h>
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <sys/types.h>
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "third_party/googletest/src/include/gtest/gtest.h"
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "test/acm_random.h"
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "vp8/encoder/onyx_int.h"
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "vpx/vpx_integer.h"
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "vpx_mem/vpx_mem.h"
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using libvpx_test::ACMRandom;
2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)namespace {
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST(VP8RoiMapTest, ParameterCheck) {
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  ACMRandom rnd(ACMRandom::DeterministicSeed());
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  int delta_q[MAX_MB_SEGMENTS] = { -2, -25, 0, 31 };
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  int delta_lf[MAX_MB_SEGMENTS] = { -2, -25, 0, 31 };
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  unsigned int threshold[MAX_MB_SEGMENTS] = { 0, 100, 200, 300 };
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  const int internalq_trans[] = {
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    0,   1,  2,  3,  4,  5,  7,  8,
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    9,  10, 12, 13, 15, 17, 18, 19,
3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    20,  21, 23, 24, 25, 26, 27, 28,
3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    29,  30, 31, 33, 35, 37, 39, 41,
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    43,  45, 47, 49, 51, 53, 55, 57,
4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    59,  61, 64, 67, 70, 73, 76, 79,
4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    82,  85, 88, 91, 94, 97, 100, 103,
4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    106, 109, 112, 115, 118, 121, 124, 127,
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  };
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  // Initialize elements of cpi with valid defaults.
4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  VP8_COMP cpi;
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  cpi.mb.e_mbd.mb_segement_abs_delta = SEGMENT_DELTADATA;
4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  cpi.cyclic_refresh_mode_enabled = 0;
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  cpi.mb.e_mbd.segmentation_enabled = 0;
5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  cpi.mb.e_mbd.update_mb_segmentation_map = 0;
5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  cpi.mb.e_mbd.update_mb_segmentation_data = 0;
5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  cpi.common.mb_rows = 240 >> 4;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  cpi.common.mb_cols = 320 >> 4;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  const int mbs = (cpi.common.mb_rows * cpi.common.mb_cols);
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  vpx_memset(cpi.segment_feature_data, 0, sizeof(cpi.segment_feature_data));
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)  // Segment map
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  cpi.segmentation_map = reinterpret_cast<unsigned char *>(vpx_calloc(mbs, 1));
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Allocate memory for the source memory map.
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  unsigned char *roi_map =
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    reinterpret_cast<unsigned char *>(vpx_calloc(mbs, 1));
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  vpx_memset(&roi_map[mbs >> 2], 1, (mbs >> 2));
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  vpx_memset(&roi_map[mbs >> 1], 2, (mbs >> 2));
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  vpx_memset(&roi_map[mbs -(mbs >> 2)], 3, (mbs >> 2));
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Do a test call with valid parameters.
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  int roi_retval = vp8_set_roimap(&cpi, roi_map, cpi.common.mb_rows,
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                  cpi.common.mb_cols, delta_q, delta_lf,
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                  threshold);
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  EXPECT_EQ(0, roi_retval)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        << "vp8_set_roimap roi failed with default test parameters";
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Check that the values in the cpi structure get set as expected.
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  if (roi_retval == 0) {
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Check that the segment map got set.
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const int mapcompare = memcmp(roi_map, cpi.segmentation_map, mbs);
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(0, mapcompare) << "segment map error";
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Check the q deltas (note the need to translate into
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // the interanl range of 0-127.
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (int i = 0; i < MAX_MB_SEGMENTS; ++i) {
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const int transq = internalq_trans[abs(delta_q[i])];
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (abs(cpi.segment_feature_data[MB_LVL_ALT_Q][i]) != transq) {
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          EXPECT_EQ(transq, cpi.segment_feature_data[MB_LVL_ALT_Q][i])
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    << "segment delta_q  error";
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          break;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Check the loop filter deltas
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (int i = 0; i < MAX_MB_SEGMENTS; ++i) {
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (cpi.segment_feature_data[MB_LVL_ALT_LF][i] != delta_lf[i]) {
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        EXPECT_EQ(delta_lf[i], cpi.segment_feature_data[MB_LVL_ALT_LF][i])
9653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                  << "segment delta_lf error";
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Check the breakout thresholds
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (int i = 0; i < MAX_MB_SEGMENTS; ++i) {
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      unsigned int breakout =
10453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        static_cast<unsigned int>(cpi.segment_encode_breakout[i]);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (threshold[i] != breakout) {
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        EXPECT_EQ(threshold[i], breakout)
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                  << "breakout threshold error";
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Segmentation, and segmentation update flages should be set.
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(1, cpi.mb.e_mbd.segmentation_enabled)
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              << "segmentation_enabled error";
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(1, cpi.mb.e_mbd.update_mb_segmentation_map)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              << "update_mb_segmentation_map error";
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(1, cpi.mb.e_mbd.update_mb_segmentation_data)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              << "update_mb_segmentation_data error";
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Try a range of delta q and lf parameters (some legal, some not)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (int i = 0; i < 1000; ++i) {
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      int rand_deltas[4];
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      int deltas_valid;
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      rand_deltas[0] = rnd(160) - 80;
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      rand_deltas[1] = rnd(160) - 80;
12853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)      rand_deltas[2] = rnd(160) - 80;
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      rand_deltas[3] = rnd(160) - 80;
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      deltas_valid = ((abs(rand_deltas[0]) <= 63) &&
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                      (abs(rand_deltas[1]) <= 63) &&
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                      (abs(rand_deltas[2]) <= 63) &&
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                      (abs(rand_deltas[3]) <= 63)) ? 0 : -1;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      // Test with random delta q values.
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      roi_retval = vp8_set_roimap(&cpi, roi_map, cpi.common.mb_rows,
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                  cpi.common.mb_cols, rand_deltas,
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                  delta_lf, threshold);
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      EXPECT_EQ(deltas_valid, roi_retval) << "dq range check error";
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      // One delta_q error shown at a time
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (deltas_valid != roi_retval)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      // Test with random loop filter values.
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      roi_retval = vp8_set_roimap(&cpi, roi_map, cpi.common.mb_rows,
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                  cpi.common.mb_cols, delta_q,
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                  rand_deltas, threshold);
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      EXPECT_EQ(deltas_valid, roi_retval) << "dlf range check error";
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      // One delta loop filter error shown at a time
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (deltas_valid != roi_retval)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Test that we report and error if cyclic refresh is enabled.
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    cpi.cyclic_refresh_mode_enabled = 1;
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    roi_retval = vp8_set_roimap(&cpi, roi_map, cpi.common.mb_rows,
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                cpi.common.mb_cols, delta_q,
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                delta_lf, threshold);
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(-1, roi_retval) << "cyclic refresh check error";
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    cpi.cyclic_refresh_mode_enabled = 0;
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Test invalid number of rows or colums.
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    roi_retval = vp8_set_roimap(&cpi, roi_map, cpi.common.mb_rows + 1,
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                cpi.common.mb_cols, delta_q,
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                delta_lf, threshold);
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(-1, roi_retval) << "MB rows bounds check error";
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    roi_retval = vp8_set_roimap(&cpi, roi_map, cpi.common.mb_rows,
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                cpi.common.mb_cols - 1, delta_q,
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                delta_lf, threshold);
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    EXPECT_EQ(-1, roi_retval) << "MB cols bounds check error";
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  }
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Free allocated memory
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  if (cpi.segmentation_map)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    vpx_free(cpi.segmentation_map);
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  if (roi_map)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    vpx_free(roi_map);
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}  // namespace
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)