feat(draw): add sw display rotate implementations
This commit is contained in:
224
tests/src/test_cases/draw/test_draw_sw_rotate.c
Normal file
224
tests/src/test_cases/draw/test_draw_sw_rotate.c
Normal file
@@ -0,0 +1,224 @@
|
||||
#if LV_BUILD_TEST || 1
|
||||
#include "../lvgl.h"
|
||||
|
||||
#include "unity/unity.h"
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
/* Function run before every test */
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
/* Function run after every test */
|
||||
}
|
||||
|
||||
void test_rotate90_RGB565(void)
|
||||
{
|
||||
uint16_t srcArray[3 * 2] = {
|
||||
0x1110, 0x2220, 0x3330,
|
||||
0x4440, 0x5550, 0x6660
|
||||
};
|
||||
uint16_t dstArray[2 * 3] = {0};
|
||||
|
||||
uint16_t expectedArray[2 * 3] = {
|
||||
0x4440, 0x1110,
|
||||
0x5550, 0x2220,
|
||||
0x6660, 0x3330
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * sizeof(uint16_t),
|
||||
2 * sizeof(uint16_t),
|
||||
LV_DISPLAY_ROTATION_90,
|
||||
LV_COLOR_FORMAT_RGB565);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate180_RGB565(void)
|
||||
{
|
||||
uint16_t srcArray[3 * 2] = {
|
||||
0x1110, 0x2220, 0x3330,
|
||||
0x4440, 0x5550, 0x6660
|
||||
};
|
||||
uint16_t dstArray[3 * 2] = {0};
|
||||
uint16_t expectedArray[3 * 2] = {
|
||||
0x6660, 0x5550, 0x4440,
|
||||
0x3330, 0x2220, 0x1110,
|
||||
};
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * sizeof(uint16_t),
|
||||
3 * sizeof(uint16_t),
|
||||
LV_DISPLAY_ROTATION_180,
|
||||
LV_COLOR_FORMAT_RGB565);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate270_RGB565(void)
|
||||
{
|
||||
uint16_t srcArray[3 * 2] = {
|
||||
0x1110, 0x2220, 0x3330,
|
||||
0x4440, 0x5550, 0x6660
|
||||
};
|
||||
|
||||
uint16_t dstArray[2 * 3] = {0};
|
||||
uint16_t expectedArray[2 * 3] = {
|
||||
0x3330, 0x6660,
|
||||
0x2220, 0x5550,
|
||||
0x1110, 0x4440,
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * sizeof(uint16_t),
|
||||
2 * sizeof(uint16_t),
|
||||
LV_DISPLAY_ROTATION_270,
|
||||
LV_COLOR_FORMAT_RGB565);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate90_RGB888(void)
|
||||
{
|
||||
uint8_t srcArray[3 * 2 * 3] = {
|
||||
0x11, 0x1A, 0x1B, 0x22, 0x2A, 0x2B, 0x33, 0x3A, 0x3B,
|
||||
0x44, 0x4A, 0x4B, 0x55, 0x5A, 0x5B, 0x66, 0x6A, 0x6B
|
||||
};
|
||||
uint8_t dstArray[2 * 3 * 3] = {0};
|
||||
uint8_t expectedArray[2 * 3 * 3] = {
|
||||
0x33, 0x3A, 0x3B, 0x66, 0x6A, 0x6B,
|
||||
0x22, 0x2A, 0x2B, 0x55, 0x5A, 0x5B,
|
||||
0x11, 0x1A, 0x1B, 0x44, 0x4A, 0x4B,
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * 3,
|
||||
2 * 3,
|
||||
LV_DISPLAY_ROTATION_90,
|
||||
LV_COLOR_FORMAT_RGB888);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate180_RGB888(void)
|
||||
{
|
||||
uint8_t srcArray[3 * 2 * 3] = {
|
||||
0x11, 0x1A, 0x1B, 0x22, 0x2A, 0x2B, 0x33, 0x3A, 0x3B,
|
||||
0x44, 0x4A, 0x4B, 0x55, 0x5A, 0x5B, 0x66, 0x6A, 0x6B
|
||||
};
|
||||
uint8_t dstArray[3 * 2 * 3] = {0};
|
||||
uint8_t expectedArray[3 * 2 * 3] = {
|
||||
0x66, 0x6A, 0x6B, 0x55, 0x5A, 0x5B, 0x44, 0x4A, 0x4B,
|
||||
0x33, 0x3A, 0x3B, 0x22, 0x2A, 0x2B, 0x11, 0x1A, 0x1B
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
2, 3,
|
||||
2 * 3,
|
||||
2 * 3,
|
||||
LV_DISPLAY_ROTATION_180,
|
||||
LV_COLOR_FORMAT_RGB888);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate270_RGB888(void)
|
||||
{
|
||||
uint8_t srcArray[3 * 2 * 3] = {
|
||||
0x11, 0x1A, 0x1B, 0x22, 0x2A, 0x2B, 0x33, 0x3A, 0x3B,
|
||||
0x44, 0x4A, 0x4B, 0x55, 0x5A, 0x5B, 0x66, 0x6A, 0x6B
|
||||
};
|
||||
uint8_t dstArray[2 * 3 * 3] = {0};
|
||||
uint8_t expectedArray[2 * 3 * 3] = {
|
||||
0x44, 0x4A, 0x4B, 0x11, 0x1A, 0x1B,
|
||||
0x55, 0x5A, 0x5B, 0x22, 0x2A, 0x2B,
|
||||
0x66, 0x6A, 0x6B, 0x33, 0x3A, 0x3B,
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * 3,
|
||||
2 * 3,
|
||||
LV_DISPLAY_ROTATION_270,
|
||||
LV_COLOR_FORMAT_RGB888);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate90_ARGB8888(void)
|
||||
{
|
||||
uint32_t srcArray[3 * 2] = {
|
||||
0x111A1B1C, 0x222A2B2C, 0x333A3B3C,
|
||||
0x444A4B4C, 0x555A5B5C, 0x666A6B6C
|
||||
|
||||
};
|
||||
uint32_t dstArray[2 * 3] = {0};
|
||||
uint32_t expectedArray[2 * 3] = {
|
||||
0x444A4B4C, 0x111A1B1C,
|
||||
0x555A5B5C, 0x222A2B2C,
|
||||
0x666A6B6C, 0x333A3B3C
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * sizeof(uint32_t),
|
||||
2 * sizeof(uint32_t),
|
||||
LV_DISPLAY_ROTATION_90,
|
||||
LV_COLOR_FORMAT_ARGB8888);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate180_ARGB8888(void)
|
||||
{
|
||||
uint32_t srcArray[3 * 2] = {
|
||||
0xFF0000FF, 0xFF00FF00, // Row 1: Red, Green
|
||||
0xFFFF0000, 0xFFFFFFFF, // Row 2: Blue, White
|
||||
0xFF00FFFF, 0xFFFFFF00 // Row 3: Cyan, Yellow
|
||||
};
|
||||
uint32_t dstArray[3 * 2] = {0};
|
||||
uint32_t expectedArray[3 * 2] = {
|
||||
0xFFFFFF00, 0xFF00FFFF, // Rotated Row 1
|
||||
0xFFFFFFFF, 0xFFFF0000, // Rotated Row 2
|
||||
0xFF00FF00, 0xFF0000FF // Rotated Row 3
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
2, 3,
|
||||
2 * sizeof(uint32_t),
|
||||
2 * sizeof(uint32_t),
|
||||
LV_DISPLAY_ROTATION_180,
|
||||
LV_COLOR_FORMAT_ARGB8888);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
void test_rotate270_ARGB8888(void)
|
||||
{
|
||||
uint32_t srcArray[3 * 2] = {
|
||||
0x111A1B1C, 0x222A2B2C, 0x333A3B3C,
|
||||
0x444A4B4C, 0x555A5B5C, 0x666A6B6C
|
||||
};
|
||||
uint32_t dstArray[2 * 3] = {0};
|
||||
uint32_t expectedArray[2 * 3] = {
|
||||
0x333A3B3C, 0x666A6B6C,
|
||||
0x222A2B2C, 0x555A5B5C,
|
||||
0x111A1B1C, 0x444A4B4C,
|
||||
};
|
||||
|
||||
lv_draw_sw_rotate(srcArray, dstArray,
|
||||
3, 2,
|
||||
3 * sizeof(uint32_t),
|
||||
2 * sizeof(uint32_t),
|
||||
LV_DISPLAY_ROTATION_270,
|
||||
LV_COLOR_FORMAT_ARGB8888);
|
||||
|
||||
TEST_ASSERT_EQUAL_UINT8_ARRAY(expectedArray, dstArray, sizeof(dstArray));
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -128,7 +128,7 @@ static uint8_t screen_buf_xrgb8888[800 * 480 * 4];
|
||||
static bool screenhot_compare(const char * fn_ref, const char * mode, uint8_t tolerance)
|
||||
{
|
||||
|
||||
char fn_ref_full[512];
|
||||
char fn_ref_full[256];
|
||||
sprintf(fn_ref_full, "%s%s", REF_IMGS_PATH, fn_ref);
|
||||
|
||||
lv_refr_now(NULL);
|
||||
@@ -186,11 +186,11 @@ static bool screenhot_compare(const char * fn_ref, const char * mode, uint8_t to
|
||||
}
|
||||
|
||||
if(err) {
|
||||
char fn_ref_no_ext[256];
|
||||
char fn_ref_no_ext[128];
|
||||
strcpy(fn_ref_no_ext, fn_ref);
|
||||
fn_ref_no_ext[strlen(fn_ref_no_ext) - 4] = '\0';
|
||||
|
||||
char fn_err_full[512];
|
||||
char fn_err_full[256];
|
||||
sprintf(fn_err_full, "%s%s_err.png", REF_IMGS_PATH, fn_ref_no_ext);
|
||||
|
||||
write_png_file(screen_buf_xrgb8888, 800, 480, fn_err_full);
|
||||
|
||||
Reference in New Issue
Block a user