Move image matching functions to common location.
Exact same functions were present in two encoder binaries.
BUG=aomedia:442
Change-Id: Ib169c29cee8ae40cbd71c26099a3339ec7143315
diff --git a/examples/aom_cx_set_ref.c b/examples/aom_cx_set_ref.c
index d1aec99..ff24fa1 100644
--- a/examples/aom_cx_set_ref.c
+++ b/examples/aom_cx_set_ref.c
@@ -54,7 +54,7 @@
#include "aom/aomcx.h"
#include "aom/aom_decoder.h"
#include "aom/aom_encoder.h"
-
+#include "examples/encoder_util.h"
#include "./tools_common.h"
#include "./video_writer.h"
@@ -68,128 +68,6 @@
exit(EXIT_FAILURE);
}
-static int compare_img(const aom_image_t *const img1,
- const aom_image_t *const img2) {
- uint32_t l_w = img1->d_w;
- uint32_t c_w = (img1->d_w + img1->x_chroma_shift) >> img1->x_chroma_shift;
- const uint32_t c_h =
- (img1->d_h + img1->y_chroma_shift) >> img1->y_chroma_shift;
- uint32_t i;
- int match = 1;
-
- match &= (img1->fmt == img2->fmt);
- match &= (img1->d_w == img2->d_w);
- match &= (img1->d_h == img2->d_h);
-
- for (i = 0; i < img1->d_h; ++i)
- match &= (memcmp(img1->planes[AOM_PLANE_Y] + i * img1->stride[AOM_PLANE_Y],
- img2->planes[AOM_PLANE_Y] + i * img2->stride[AOM_PLANE_Y],
- l_w) == 0);
-
- for (i = 0; i < c_h; ++i)
- match &= (memcmp(img1->planes[AOM_PLANE_U] + i * img1->stride[AOM_PLANE_U],
- img2->planes[AOM_PLANE_U] + i * img2->stride[AOM_PLANE_U],
- c_w) == 0);
-
- for (i = 0; i < c_h; ++i)
- match &= (memcmp(img1->planes[AOM_PLANE_V] + i * img1->stride[AOM_PLANE_V],
- img2->planes[AOM_PLANE_V] + i * img2->stride[AOM_PLANE_V],
- c_w) == 0);
-
- return match;
-}
-
-#define mmin(a, b) ((a) < (b) ? (a) : (b))
-static void find_mismatch(const aom_image_t *const img1,
- const aom_image_t *const img2, int yloc[4],
- int uloc[4], int vloc[4]) {
- const uint32_t bsize = 64;
- const uint32_t bsizey = bsize >> img1->y_chroma_shift;
- const uint32_t bsizex = bsize >> img1->x_chroma_shift;
- const uint32_t c_w =
- (img1->d_w + img1->x_chroma_shift) >> img1->x_chroma_shift;
- const uint32_t c_h =
- (img1->d_h + img1->y_chroma_shift) >> img1->y_chroma_shift;
- int match = 1;
- uint32_t i, j;
- yloc[0] = yloc[1] = yloc[2] = yloc[3] = -1;
- for (i = 0, match = 1; match && i < img1->d_h; i += bsize) {
- for (j = 0; match && j < img1->d_w; j += bsize) {
- int k, l;
- const int si = mmin(i + bsize, img1->d_h) - i;
- const int sj = mmin(j + bsize, img1->d_w) - j;
- for (k = 0; match && k < si; ++k) {
- for (l = 0; match && l < sj; ++l) {
- if (*(img1->planes[AOM_PLANE_Y] +
- (i + k) * img1->stride[AOM_PLANE_Y] + j + l) !=
- *(img2->planes[AOM_PLANE_Y] +
- (i + k) * img2->stride[AOM_PLANE_Y] + j + l)) {
- yloc[0] = i + k;
- yloc[1] = j + l;
- yloc[2] = *(img1->planes[AOM_PLANE_Y] +
- (i + k) * img1->stride[AOM_PLANE_Y] + j + l);
- yloc[3] = *(img2->planes[AOM_PLANE_Y] +
- (i + k) * img2->stride[AOM_PLANE_Y] + j + l);
- match = 0;
- break;
- }
- }
- }
- }
- }
-
- uloc[0] = uloc[1] = uloc[2] = uloc[3] = -1;
- for (i = 0, match = 1; match && i < c_h; i += bsizey) {
- for (j = 0; match && j < c_w; j += bsizex) {
- int k, l;
- const int si = mmin(i + bsizey, c_h - i);
- const int sj = mmin(j + bsizex, c_w - j);
- for (k = 0; match && k < si; ++k) {
- for (l = 0; match && l < sj; ++l) {
- if (*(img1->planes[AOM_PLANE_U] +
- (i + k) * img1->stride[AOM_PLANE_U] + j + l) !=
- *(img2->planes[AOM_PLANE_U] +
- (i + k) * img2->stride[AOM_PLANE_U] + j + l)) {
- uloc[0] = i + k;
- uloc[1] = j + l;
- uloc[2] = *(img1->planes[AOM_PLANE_U] +
- (i + k) * img1->stride[AOM_PLANE_U] + j + l);
- uloc[3] = *(img2->planes[AOM_PLANE_U] +
- (i + k) * img2->stride[AOM_PLANE_U] + j + l);
- match = 0;
- break;
- }
- }
- }
- }
- }
- vloc[0] = vloc[1] = vloc[2] = vloc[3] = -1;
- for (i = 0, match = 1; match && i < c_h; i += bsizey) {
- for (j = 0; match && j < c_w; j += bsizex) {
- int k, l;
- const int si = mmin(i + bsizey, c_h - i);
- const int sj = mmin(j + bsizex, c_w - j);
- for (k = 0; match && k < si; ++k) {
- for (l = 0; match && l < sj; ++l) {
- if (*(img1->planes[AOM_PLANE_V] +
- (i + k) * img1->stride[AOM_PLANE_V] + j + l) !=
- *(img2->planes[AOM_PLANE_V] +
- (i + k) * img2->stride[AOM_PLANE_V] + j + l)) {
- vloc[0] = i + k;
- vloc[1] = j + l;
- vloc[2] = *(img1->planes[AOM_PLANE_V] +
- (i + k) * img1->stride[AOM_PLANE_V] + j + l);
- vloc[3] = *(img2->planes[AOM_PLANE_V] +
- (i + k) * img2->stride[AOM_PLANE_V] + j + l);
- match = 0;
- break;
- }
- }
- }
- }
- }
-}
-
static void testing_decode(aom_codec_ctx_t *encoder, aom_codec_ctx_t *decoder,
unsigned int frame_out, int *mismatch_seen) {
aom_image_t enc_img, dec_img;
@@ -206,12 +84,12 @@
die_codec(decoder, "Failed to get decoder reference frame");
dec_img = ref_dec.img;
- if (!compare_img(&enc_img, &dec_img)) {
+ if (!aom_compare_img(&enc_img, &dec_img)) {
int y[4], u[4], v[4];
*mismatch_seen = 1;
- find_mismatch(&enc_img, &dec_img, y, u, v);
+ aom_find_mismatch(&enc_img, &dec_img, y, u, v);
printf(
"Encode/decode mismatch on frame %d at"
" Y[%d, %d] {%d/%d},"