91 lines
3.7 KiB
C
91 lines
3.7 KiB
C
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||
│ │
|
||
│ This program is free software; you can redistribute it and/or modify │
|
||
│ it under the terms of the GNU General Public License as published by │
|
||
│ the Free Software Foundation; version 2 of the License. │
|
||
│ │
|
||
│ This program is distributed in the hope that it will be useful, but │
|
||
│ WITHOUT ANY WARRANTY; without even the implied warranty of │
|
||
│ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU │
|
||
│ General Public License for more details. │
|
||
│ │
|
||
│ You should have received a copy of the GNU General Public License │
|
||
│ along with this program; if not, write to the Free Software │
|
||
│ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA │
|
||
│ 02110-1301 USA │
|
||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||
#include "dsp/mpeg/mpeg.h"
|
||
#include "libc/macros.h"
|
||
#include "libc/rand/rand.h"
|
||
#include "libc/stdio/stdio.h"
|
||
#include "libc/str/str.h"
|
||
#include "libc/testlib/ezbench.h"
|
||
#include "libc/testlib/testlib.h"
|
||
#include "libc/time/time.h"
|
||
#include "tool/viz/lib/graphic.h"
|
||
#include "tool/viz/lib/ycbcr.h"
|
||
|
||
#if 0
|
||
__v4sf fRGBA[4][3];
|
||
unsigned char iRGB[3][8][8];
|
||
unsigned char uRGB[4][4][3];
|
||
|
||
unsigned char kY[16][16] = {
|
||
{16, 43, 16, 43},
|
||
{70, 97, 70, 97},
|
||
{16, 43, 16, 43},
|
||
{70, 97, 70, 97},
|
||
};
|
||
|
||
unsigned char kCb[8][8] = {
|
||
{240, 240},
|
||
{240, 240},
|
||
};
|
||
|
||
unsigned char kCr[8][8] = {
|
||
{35, 35},
|
||
{35, 35},
|
||
};
|
||
|
||
plm_frame_t kFrame = {
|
||
.width = 4,
|
||
.height = 4,
|
||
.y = {.width = 16, .height = 16, .data = (void *)kY},
|
||
.cb = {.width = 8, .height = 8, .data = (void *)kCb},
|
||
.cr = {.width = 8, .height = 8, .data = (void *)kCr},
|
||
};
|
||
|
||
TEST(ycbcr2rgb, testMyImpl) {
|
||
memset(iRGB, 0, sizeof(iRGB));
|
||
YCbCr2RGB(1, iRGB, kY, kCb, kCr);
|
||
EXPECT_EQ(0, iRGB[0][0][0]);
|
||
EXPECT_BINEQ(u" "
|
||
u" ",
|
||
iRGB[1]);
|
||
}
|
||
|
||
TEST(ycbcr2rgb, testReferenceImpl) {
|
||
memset(uRGB, 0, sizeof(uRGB));
|
||
plm_frame_to_rgb(&kFrame, (void *)uRGB);
|
||
EXPECT_BINEQ(u" :╓", uRGB[0][0]);
|
||
EXPECT_BINEQ(u" U±", uRGB[0][1]);
|
||
EXPECT_BINEQ(u" :╓", uRGB[0][2]);
|
||
EXPECT_BINEQ(u" U±", uRGB[0][3]);
|
||
EXPECT_BINEQ(u" pλ", uRGB[1][0]);
|
||
EXPECT_BINEQ(u" ïλ", uRGB[1][1]);
|
||
EXPECT_BINEQ(u" pλ", uRGB[1][2]);
|
||
EXPECT_BINEQ(u" ïλ", uRGB[1][3]);
|
||
EXPECT_BINEQ(u" :╓", uRGB[2][0]);
|
||
EXPECT_BINEQ(u" U±", uRGB[2][1]);
|
||
EXPECT_BINEQ(u" :╓", uRGB[2][2]);
|
||
EXPECT_BINEQ(u" U±", uRGB[2][3]);
|
||
EXPECT_BINEQ(u" pλ", uRGB[3][0]);
|
||
EXPECT_BINEQ(u" ïλ", uRGB[3][1]);
|
||
EXPECT_BINEQ(u" pλ", uRGB[3][2]);
|
||
EXPECT_BINEQ(u" ïλ", uRGB[3][3]);
|
||
}
|
||
#endif
|