From 8f618c363d696421de3f881376fba7a29129f1a4 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Fri, 24 Jun 2022 20:15:44 +0900 Subject: [PATCH] tdm_test_client: Use tbm api for dump buffer for removing duplicate code Change-Id: I83e666c2e450c7bb884e1befee9620fd5f9c6cc1 --- tools/tdm_test_client.c | 168 ++---------------------------------------------- 1 file changed, 7 insertions(+), 161 deletions(-) diff --git a/tools/tdm_test_client.c b/tools/tdm_test_client.c index 14feed9..a3f9cb2 100644 --- a/tools/tdm_test_client.c +++ b/tools/tdm_test_client.c @@ -40,7 +40,6 @@ #include #include #include -#include #include "tdm_client.h" #include "tdm_macro.h" @@ -384,179 +383,26 @@ done: tdm_client_vblank_destroy(vblank); } -#define PNG_DEPTH 8 - -void -_tdm_client_get_buffer_full_size(tbm_surface_h buffer, int *buffer_w, int *buffer_h) -{ - tbm_surface_info_s info; - int ret; - - TDM_RETURN_IF_FAIL(buffer != NULL); - - ret = tbm_surface_get_info(buffer, &info); - TDM_RETURN_IF_FAIL(ret == TBM_SURFACE_ERROR_NONE); - - if (buffer_w) { - if (IS_RGB(info.format)) - *buffer_w = info.planes[0].stride >> 2; - else - *buffer_w = info.planes[0].stride; - } - - if (buffer_h) - *buffer_h = info.planes[0].size / info.planes[0].stride; -} - static void -_tdm_client_dump_png(const char *file, const void *data, int width, - int height) -{ - FILE *fp; - - fp = fopen(file, "wb"); - TDM_RETURN_IF_FAIL(fp != NULL); - - png_structp pPngStruct = - png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!pPngStruct) { - fclose(fp); - return; - } - - png_infop pPngInfo = png_create_info_struct(pPngStruct); - if (!pPngInfo) { - png_destroy_write_struct(&pPngStruct, NULL); - fclose(fp); - return; - } - - png_init_io(pPngStruct, fp); - png_set_IHDR(pPngStruct, - pPngInfo, - width, - height, - PNG_DEPTH, - PNG_COLOR_TYPE_RGBA, - PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - - png_set_bgr(pPngStruct); - png_write_info(pPngStruct, pPngInfo); - - const int pixel_size = 4; // RGBA - png_bytep *row_pointers = - png_malloc(pPngStruct, height * sizeof(png_byte *)); - if (!row_pointers) { - png_destroy_write_struct(&pPngStruct, &pPngInfo); - fclose(fp); - return; - } - - unsigned int *blocks = (unsigned int *)data; - int y = 0; - int x = 0; - - for (; y < height; ++y) { - png_bytep row = - png_malloc(pPngStruct, sizeof(png_byte) * width * pixel_size); - if (!row) { - for (x = 0; x < y; x++) - png_free(pPngStruct, row_pointers[x]); - png_free(pPngStruct, row_pointers); - png_destroy_write_struct(&pPngStruct, &pPngInfo); - fclose(fp); - return; - } - - row_pointers[y] = (png_bytep)row; - for (x = 0; x < width; ++x) { - unsigned int curBlock = blocks[y * width + x]; - row[x * pixel_size] = (curBlock & 0xFF); - row[1 + x * pixel_size] = (curBlock >> 8) & 0xFF; - row[2 + x * pixel_size] = (curBlock >> 16) & 0xFF; - row[3 + x * pixel_size] = (curBlock >> 24) & 0xFF; - } - } - - png_write_image(pPngStruct, row_pointers); - png_write_end(pPngStruct, pPngInfo); - - for (y = 0; y < height; y++) - png_free(pPngStruct, row_pointers[y]); - png_free(pPngStruct, row_pointers); - - png_destroy_write_struct(&pPngStruct, &pPngInfo); - - fclose(fp); -} - -void -_tdm_client_dump_buffer(tbm_surface_h buffer, const char *file) +_dump_buffer(tbm_surface_h buffer, int count) { char temp[TDM_PATH_LEN] = {0,}; - tbm_surface_info_s info; - int len, ret; - const char *ext; - int bo_cnt; - int bw, bh; - char *dot, *p = temp; - const char *file_exts[2] = {"png", "raw"}; - - TDM_RETURN_IF_FAIL(buffer != NULL); - TDM_RETURN_IF_FAIL(file != NULL); + tbm_format tformat; + const char *ext, *file_exts[2] = {"png", "yuv"}; - ret = tbm_surface_map(buffer, TBM_OPTION_READ, &info); - TDM_RETURN_IF_FAIL(ret == TBM_SURFACE_ERROR_NONE); + tformat = tbm_surface_get_format(buffer); - if (IS_RGB(info.format)) + if (IS_RGB(tformat)) ext = file_exts[0]; else ext = file_exts[1]; - dot = strrchr(file, '.'); - if (!dot || strlen(dot + 1) != 3 || strncmp(dot + 1, ext, 3)) { - len = strnlen(file, TDM_PATH_LEN - 5); - strncat(p, file, len); - p += len; - *(p++) = '.'; - strncat(p, ext, 4); - p += 3; - *p = '\0'; - } else { - len = strnlen(file, TDM_PATH_LEN - 1); - strncat(p, file, len); - p += len; - *p = '\0'; - } - - _tdm_client_get_buffer_full_size(buffer, &bw, &bh); - - bo_cnt = tbm_surface_internal_get_num_bos(buffer); - TDM_DBG("buffer: bo_cnt(%d) %dx%d(%dx%d) %c%c%c%c, plane: (%p+%d, %d,%d) (%p+%d, %d,%d) (%p+%d, %d,%d)", - bo_cnt, bw, bh, info.width, info.height, FOURCC_STR(info.format), - info.planes[0].ptr, info.planes[0].offset, info.planes[0].stride, info.planes[0].size, - info.planes[1].ptr, info.planes[1].offset, info.planes[1].stride, info.planes[1].size, - info.planes[2].ptr, info.planes[2].offset, info.planes[2].stride, info.planes[2].size); - - _tdm_client_dump_png(temp, info.planes[0].ptr, bw, bh); - - tbm_surface_unmap(buffer); - - printf("dump %s\n", temp); -} - -static void -_dump_buffer(tbm_surface_h buffer, int count) -{ - char temp[TDM_PATH_LEN] = {0,}; - - snprintf(temp, TDM_PATH_LEN, "/tmp/%c%c%c%c_%dx%d_%d", + snprintf(temp, TDM_PATH_LEN, "%c%c%c%c_%dx%d_%d", FOURCC_STR(tbm_surface_get_format(buffer)), tbm_surface_get_width(buffer), tbm_surface_get_height(buffer), count); - _tdm_client_dump_buffer(buffer, temp); + tbm_surface_internal_capture_buffer(buffer, "/tmp", temp, ext); } static void -- 2.7.4