13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. 23d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 33d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Redistribution and use in source and binary forms, with or without 43d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * modification, are permitted provided that the following conditions are 53d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * met: 63d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Redistributions of source code must retain the above copyright 73d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * notice, this list of conditions and the following disclaimer. 83d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Redistributions in binary form must reproduce the above 93d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * copyright notice, this list of conditions and the following 103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * disclaimer in the documentation and/or other materials provided 113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * with the distribution. 123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * contributors may be used to endorse or promote products derived 143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * from this software without specific prior written permission. 153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel */ 293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// System dependencies 313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <dlfcn.h> 323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdbool.h> 333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdlib.h> 343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <sys/time.h> 353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// Camera dependencies 373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "img_buffer.h" 383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "mm_lib2d.h" 393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ENABLE_OUTPUT_DUMP 1 423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ALIGN4K 4032 433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ALIGN(a, b) (((a) + (b)) & ~(b)) 443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** DUMP_TO_FILE: 473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @filename: file name 483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @p_addr: address of the buffer 493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @len: buffer length 503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * dump the image to the file 523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define DUMP_TO_FILE(filename, p_addr, len) ({ \ 543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel size_t rc = 0; \ 553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel FILE *fp = fopen(filename, "w+"); \ 563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (fp) { \ 573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = fwrite(p_addr, 1, len, fp); \ 583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] written size %zu \n", __LINE__, len); \ 593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fclose(fp); \ 603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { \ 613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] open %s failed \n", __LINE__, filename); \ 623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } \ 633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** DUMP_TO_FILE2: 663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @filename: file name 673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @p_addr: address of the buffer 683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @len: buffer length 693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * dump the image to the file if the memory is non-contiguous 713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define DUMP_TO_FILE2(filename, p_addr1, len1, p_addr2, len2) ({ \ 733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel size_t rc = 0; \ 743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel FILE *fp = fopen(filename, "w+"); \ 753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (fp) { \ 763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = fwrite(p_addr1, 1, len1, fp); \ 773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = fwrite(p_addr2, 1, len2, fp); \ 783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] written %zu %zu \n", __LINE__, len1, len2); \ 793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fclose(fp); \ 803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { \ 813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] open %s failed \n", __LINE__, filename); \ 823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } \ 833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}) 843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** img_lib_buffert 863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @ptr: handle to the imglib library 873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @img_buffer_get: function pointer to img_buffer_get 883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @img_buffer_release: function pointer to img_buffer_release 893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @img_buffer_cacheops: function pointer to img_buffer_cacheops 903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel**/ 913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct { 923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *ptr; 933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int (*img_buffer_get)(img_buf_type_t type, int heapid, int8_t cached, int length, 943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_mem_handle_t *p_handle); 953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int (*img_buffer_release)(img_mem_handle_t *p_handle); 963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int (*img_buffer_cacheops)(img_mem_handle_t *p_handle, img_cache_ops_t ops, 973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_mem_alloc_type_t mem_alloc_type); 983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} img_lib_buffert; 993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** input_yuv_data 1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @filename: input test filename 1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @format: format of the input yuv frame 1033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @wdith: wdith of the input yuv frame 1043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @height: height of the input yuv frame 1053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @stride: stride of the input yuv frame 1063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @offset: offset to the yuv data in the input file 1073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel**/ 1083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct input_yuv_data_t { 1093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char filename[512]; 1103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_format_t format; 1113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t wdith; 1123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t height; 1133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t stride; 1143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t offset; 1153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} input_yuv_data; 1163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelinput_yuv_data input_nv21[] = { 1183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample0_768x512.yuv", CAM_FORMAT_YUV_420_NV21, 768, 512, 768, 0}, 1193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample1_3200x2400.yuv", CAM_FORMAT_YUV_420_NV21, 3200, 2400, 3200, 0}, 1203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample2_1920x1080.yuv", CAM_FORMAT_YUV_420_NV21, 1920, 1080, 1920, 0}, 1213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample3_3200x2400.yuv", CAM_FORMAT_YUV_420_NV21, 3200, 2400, 3200, 0}, 1223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample4_4208x3120.yuv", CAM_FORMAT_YUV_420_NV21, 4208, 3120, 4208, 0}, 1233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample5_1984x2592.yuv", CAM_FORMAT_YUV_420_NV21, 1984, 2592, 1984, 0}, 1243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample6_4000_3000.yuv", CAM_FORMAT_YUV_420_NV21, 4000, 3000, 4000, 0}, 1253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample7_3200_2400.yuv", CAM_FORMAT_YUV_420_NV21, 3200, 2400, 3200, 0}, 1263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample8_3008_4000.yuv", CAM_FORMAT_YUV_420_NV21, 3008, 4000, 3008, 0}, 1273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample9_5312x2988.yuv", CAM_FORMAT_YUV_420_NV21, 5312, 2988, 5312, 0}, 1283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample10_4128x3096.yuv", CAM_FORMAT_YUV_420_NV21, 4128, 3096, 4128, 0}, 1293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample11_4208x3120.yuv", CAM_FORMAT_YUV_420_NV21, 4208, 3120, 4208, 0}, 1303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample12_3200x2400.yuv", CAM_FORMAT_YUV_420_NV21, 3200, 2400, 3200, 0}, 1313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample13_width_1080_height_1440_stride_1088.yuv", CAM_FORMAT_YUV_420_NV21, 1080, 1440, 1088, 0}, 1323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample14_width_1080_height_1920_stride_1088.yuv", CAM_FORMAT_YUV_420_NV21, 1080, 1920, 1088, 0}, 1333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample15_width_1944_height_2592_stride_1984.yuv", CAM_FORMAT_YUV_420_NV21, 1944, 2592, 1984, 0}, 1343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample16_width_3000_height_4000_stride_3008.yuv", CAM_FORMAT_YUV_420_NV21, 3000, 4000, 3008, 0}, 1353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample17_width_3120_height_4208_stride_3136.yuv", CAM_FORMAT_YUV_420_NV21, 3120, 4208, 3136, 0}, 1363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample18_width_3200_height_2400_stride_3200.yuv", CAM_FORMAT_YUV_420_NV21, 3200, 2400, 3200, 0}, 1373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"sample19_width_1944_height_2592_stride_1984.yuv", CAM_FORMAT_YUV_420_NV21, 1944, 2592, 1984, 0}, 1383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// assuming buffer format is always ARGB 1413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid lib2d_dump_tga(void *addr, cam_format_t format, int width, 1423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int height, int stride, char *fname) 1433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int i, j; 1453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel FILE *f; 1463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel unsigned char *pb = (unsigned char *)addr; 1473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel uint32_t *pd = (uint32_t *)addr; 1483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int bpp = 32; 1493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel f = fopen(fname, "wb"); 1513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (f) { 1523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // header 1533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fprintf(f, "%c%c%c%c", 0, 0, 2, 0); 1543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fprintf(f, "%c%c%c%c", 0, 0, 0, 0); 1553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fprintf(f, "%c%c%c%c", 0, 0, 0, 0); 1563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fprintf(f, "%c%c%c%c", width & 0xff, width >> 8, height & 0xff, height >> 8); 1573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fprintf(f, "%c%c", bpp, 32); 1583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (i = 0; i < height; i++) { 1603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (j = 0; j < width; j++) { 1613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fprintf(f, "%c%c%c%c", 1623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pd[(i*stride>>2)+j] & 0xff, // b 1633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (pd[(i*stride>>2)+j] >> 8) & 0xff, // g 1643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (pd[(i*stride>>2)+j] >> 16) & 0xff, // r 1653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (pd[(i*stride>>2)+j] >> 24) & 0xff); // a 1663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fclose(f); 1693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 1703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** 1733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: lib2d_test_client_cb 1743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: Callback that is called on completion of requested job. 1763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 1783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * userdata - App userdata 1793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * jobid - job id that is finished execution 1803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 1823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MM_LIB2D_SUCCESS 1833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MM_LIB2D_ERR_GENERAL 1843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 1863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 1873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudellib2d_error lib2d_test_client_cb(void *userdata, int jobid) 1883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s %d, jobid=%d \n", __LINE__, jobid); 1903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return MM_LIB2D_SUCCESS; 1913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** 1943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: lib2d_test_load_input_yuv_data 1953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: Loads yuv data from input file. 1973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 1993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * fileName - input yuv filename 2003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * offset - offset to the yuv data in the input file 2013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * y_size - y plane size in input yuv file 2023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * crcb_size - crcb plane size in input yuv file 2033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * crcb_offset - crcb offset in the memory at 2043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * which crcb data need to be loaded 2053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * addr - y plane memory address where y plane 2063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * data need to be loaded. 2073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 2093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MM_LIB2D_SUCCESS 2103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MM_LIB2D_ERR_GENERAL 2113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 2133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 2143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudellib2d_error lib2d_test_load_input_yuv_data(char *fileName, int offset, 2153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t y_size, int32_t crcb_size, int32_t crcb_offset, 2163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *addr) 2173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel size_t i; 2193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel FILE *fp = 0; 2203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *y_ptr = addr; 2213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *crcb_ptr = (uint8_t *)addr + crcb_offset; 2223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("y_ptr=%p, crcb_ptr=%p \n", y_ptr, crcb_ptr); 2243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fp = fopen(fileName, "rb"); 2263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(fp) { 2273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(offset) { 2283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fseek(fp, offset, SEEK_SET); 2293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel i = fread(y_ptr, 1, y_size, fp); 2313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel i = fread(crcb_ptr, 1, crcb_size, fp); 2323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fclose( fp ); 2343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 2353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("failed to open file %s \n", fileName); 2363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return MM_LIB2D_ERR_GENERAL; 2373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return MM_LIB2D_SUCCESS; 2403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 2413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** 2433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: lib2d_test_load_input_yuv_data 2443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: Loads yuv data from input file. 2463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 2483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * fileName - input yuv filename 2493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * offset - offset to the yuv data in the input file 2503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * input_yuv_stride - y plane stride in input yuv file 2513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * y_plane_stride - y plane stride in buffer memory 2523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * height - height of yuv image 2533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * crcb_offset - crcb offset in the memory at 2543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * which crcb data need to be loaded 2553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * addr - y plane memory address where y plane 2563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * data need to be loaded. 2573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 2593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MM_LIB2D_SUCCESS 2603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MM_LIB2D_ERR_GENERAL 2613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 2633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 2643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudellib2d_error lib2d_test_load_input_yuv_data_linebyline(char *fileName, 2653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int offset, int32_t input_yuv_stride, int32_t y_plane_stride, 2663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t height, int32_t crcb_offset, void *addr) 2673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel size_t i; 2693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel FILE *fp = 0; 2703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *y_ptr = addr; 2713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *crcb_ptr = (uint8_t *)addr + crcb_offset; 2723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("y_ptr=%p, crcb_ptr=%p \n", y_ptr, crcb_ptr); 2743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fp = fopen(fileName, "rb"); 2763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(fp) { 2773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(offset) { 2783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fseek(fp, offset, SEEK_SET); 2793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (input_yuv_stride == y_plane_stride) { 2813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //load y plane 2823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel i = fread(y_ptr, 1, (input_yuv_stride * height), fp); 2833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // load UV plane 2843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel i = fread(crcb_ptr, 1, (input_yuv_stride * height / 2), fp); 2853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 2863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int line = 0; 2873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // load Y plane 2883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (line = 0;line < height; line++) { 2893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel i = fread(y_ptr, 1, input_yuv_stride, fp); 2903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel y_ptr = (void *)((uint8_t *)y_ptr + y_plane_stride); 2913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (line = 0;line < height; line++) { 2933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel i = fread(crcb_ptr, 1, input_yuv_stride, fp); 2943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel crcb_ptr = (void *)((uint8_t *)crcb_ptr + y_plane_stride); 2953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 2973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel fclose( fp ); 2993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 3003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("failed to open file %s \n", fileName); 3013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return MM_LIB2D_ERR_GENERAL; 3023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return MM_LIB2D_SUCCESS; 3053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** 3083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: main 3093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: main function for execution 3113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 3133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * argc - no.of input arguments 3143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * argv - list of arguments 3153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 3173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 on success 3183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 on failure 3193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 3213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 3223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint main(int32_t argc, const char * argv[]) 3233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel void *lib2d_handle = NULL; 3253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel lib2d_error lib2d_err = MM_LIB2D_SUCCESS; 3263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_lib2d_buffer src_buffer = {0}; 3273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_lib2d_buffer dst_buffer = {0}; 3283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int8_t ret = IMG_SUCCESS; 3293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t width = 0; 3303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t height = 0; 3313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t input_yuv_stride = 0; 3323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t stride = 0; 3333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t y_plane_stride = 0; 3343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t crcb_plane_stride = 0; 3353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t y_plane_size = 0; 3363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t y_plane_size_align = 0; 3373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t crcb_plane_size = 0; 3383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t yuv_size = 0; 3393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t rgb_size = 0; 3403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_mem_handle_t m_yuv_memHandle = { 0 }; 3413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_mem_handle_t m_rgb_memHandle = { 0 }; 3423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char filename_in[512] = { 0 }; 3433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char filename_out[512] = { 0 }; 3443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char filename_raw[512] = { 0 }; 3453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int32_t offset = 0; 3463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel unsigned int total_tests = 1; 3473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel cam_format_t format = CAM_FORMAT_YUV_420_NV21; 3483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel unsigned int index; 3493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const char *filename; 3503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Open Imglib library and get the function pointers for 3523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // buffer allocation, free, cacheops 3533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib_buffert img_lib; 3543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.ptr = dlopen("libmmcamera_imglib.so", RTLD_NOW); 3553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (!img_lib.ptr) { 3563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s ERROR: couldn't dlopen libmmcamera_imglib.so: %s", 3573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dlerror()); 3583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return -1; 3593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* Get function pointer for functions to allocate ion memory */ 3623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *(void **)&img_lib.img_buffer_get = 3633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dlsym(img_lib.ptr, "img_buffer_get"); 3643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *(void **)&img_lib.img_buffer_release = 3653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dlsym(img_lib.ptr, "img_buffer_release"); 3663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *(void **)&img_lib.img_buffer_cacheops = 3673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dlsym(img_lib.ptr, "img_buffer_cacheops"); 3683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* Validate function pointers */ 3703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((img_lib.img_buffer_get == NULL) || 3713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (img_lib.img_buffer_release == NULL) || 3723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (img_lib.img_buffer_cacheops == NULL)) { 3733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ERROR mapping symbols from libmmcamera_imglib.so"); 3743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dlclose(img_lib.ptr); 3753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return -1; 3763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel lib2d_err = mm_lib2d_init(MM_LIB2D_SYNC_MODE, CAM_FORMAT_YUV_420_NV21, 3793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel CAM_FORMAT_8888_ARGB, &lib2d_handle); 3803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((lib2d_err != MM_LIB2D_SUCCESS) || (lib2d_handle == NULL)) { 3813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return -1; 3823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel bool run_default = FALSE; 3853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ( argc == 7) { 3873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel filename = argv[1]; 3883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width = (uint32_t)atoi(argv[2]); 3893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel height = (uint32_t)atoi(argv[3]); 3903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel input_yuv_stride = (uint32_t)atoi(argv[4]); 3913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel offset = (uint32_t)atoi(argv[5]); 3923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel format = (uint32_t)atoi(argv[6]); 3933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel run_default = TRUE; 3943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("Running user provided conversion \n"); 3953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel else { 3973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel total_tests = sizeof(input_nv21)/sizeof(input_yuv_data); 3983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("usage: <binary> <filname> <width> <height> " 3993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel "<stride> <offset> <format> \n"); 4003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (index = 0; index < total_tests; index++) 4033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 4043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(run_default == FALSE) { 4053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel filename = input_nv21[index].filename; 4063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width = input_nv21[index].wdith; 4073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel height = input_nv21[index].height; 4083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel input_yuv_stride = input_nv21[index].stride; 4093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel offset = input_nv21[index].offset; 4103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel format = input_nv21[index].format; 4113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(filename_in, 512, "/data/lib2d/input/%s", filename); 4143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(filename_out, 512, "/data/lib2d/output/%s.tga", filename); 4153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(filename_raw, 512, "/data/lib2d/output/%s.rgba", filename); 4163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("-----------------Running test=%d/%d------------------------- \n", 4183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel index+1, total_tests); 4193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("filename=%s, full path=%s, width=%d, height=%d, stride=%d \n", 4203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel filename, filename_in, width, height, stride); 4213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Allocate NV12 buffer 4233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel y_plane_stride = ALIGN(width, 32); 4243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel y_plane_size = y_plane_stride * height; 4253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel y_plane_size_align = ALIGN(y_plane_size, ALIGN4K); 4263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel crcb_plane_stride = y_plane_stride; 4273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel crcb_plane_size = crcb_plane_stride * height / 2; 4283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel yuv_size = y_plane_size_align + crcb_plane_size; 4293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ret = img_lib.img_buffer_get(IMG_BUFFER_ION_IOMMU, -1, TRUE, 4303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel yuv_size, &m_yuv_memHandle); 4313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (ret != IMG_SUCCESS) { 4323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] Error, img buf get failed \n"); 4333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel goto deinit; 4343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s %d yuv buffer properties : w=%d, h=%d, y_stride=%d, " 4373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel "crcb_stride=%d, y_size=%d, crcb_size=%d, yuv_size=%d, " 4383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel "crcb_offset=%d \n", 4393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __LINE__, 4403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width, height, y_plane_stride, crcb_plane_stride, y_plane_size, 4413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel crcb_plane_size, yuv_size, y_plane_size_align); 4423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s %d yuv buffer properties : fd=%d, ptr=%p, size=%d \n", 4433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __LINE__, m_yuv_memHandle.fd, m_yuv_memHandle.vaddr, 4443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_yuv_memHandle.length); 4453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Allocate ARGB buffer 4473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel stride = width * 4; 4483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel stride = ALIGN(stride, 32); 4493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rgb_size = stride * height; 4503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ret = img_lib.img_buffer_get(IMG_BUFFER_ION_IOMMU, -1, TRUE, 4513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rgb_size, &m_rgb_memHandle); 4523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (ret != IMG_SUCCESS) { 4533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] Error, img buf get failed"); 4543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_release(&m_yuv_memHandle); 4553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel goto deinit; 4563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s %d rgb buffer properties : w=%d, h=%d, stride=%d, size=%d \n", 4593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __LINE__, width, height, stride, rgb_size); 4603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s %d rgb buffer properties : fd=%d, ptr=%p, size=%d \n", 4613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __LINE__, m_rgb_memHandle.fd, m_rgb_memHandle.vaddr, 4623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_rgb_memHandle.length); 4633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#if 0 4653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel lib2d_err = lib2d_test_load_input_yuv_data(filename_in, offset, 4663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (input_yuv_stride * height), (input_yuv_stride * height / 2), y_plane_size_align, 4673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_yuv_memHandle.vaddr); 4683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (lib2d_err != MM_LIB2D_SUCCESS) { 4693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] Error loading the input buffer \n"); 4703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel goto release; 4713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#else 4733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel lib2d_err = lib2d_test_load_input_yuv_data_linebyline(filename_in, offset, 4743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel input_yuv_stride, y_plane_stride,height, y_plane_size_align, 4753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel m_yuv_memHandle.vaddr); 4763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (lib2d_err != MM_LIB2D_SUCCESS) { 4773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] Error loading the input buffer \n"); 4783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel goto release; 4793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 4813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Setup source buffer 4823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.buffer_type = MM_LIB2D_BUFFER_TYPE_YUV; 4833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.fd = m_yuv_memHandle.fd; 4843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.format = format; 4853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.width = width; 4863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.height = height; 4873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.plane0 = m_yuv_memHandle.vaddr; 4883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.stride0 = y_plane_stride; 4893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.plane1 = (int8_t *)m_yuv_memHandle.vaddr + 4903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel y_plane_size_align; 4913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel src_buffer.yuv_buffer.stride1 = crcb_plane_stride; 4923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Setup dst buffer 4943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.buffer_type = MM_LIB2D_BUFFER_TYPE_RGB; 4953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.rgb_buffer.fd = m_rgb_memHandle.fd; 4963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.rgb_buffer.format = CAM_FORMAT_8888_ARGB; 4973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.rgb_buffer.width = width; 4983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.rgb_buffer.height = height; 4993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.rgb_buffer.buffer = m_rgb_memHandle.vaddr; 5003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel dst_buffer.rgb_buffer.stride = stride; 5013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_cacheops(&m_yuv_memHandle, 5033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel IMG_CACHE_CLEAN_INV, IMG_INTERNAL); 5043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel lib2d_err = mm_lib2d_start_job(lib2d_handle, &src_buffer, &dst_buffer, 5063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel index, NULL, lib2d_test_client_cb, 0); 5073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (lib2d_err != MM_LIB2D_SUCCESS) { 5083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf(" ] Error in mm_lib2d_start_job \n"); 5093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel goto release; 5103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_cacheops(&m_rgb_memHandle, 5133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel IMG_CACHE_CLEAN_INV, IMG_INTERNAL); 5143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifdef ENABLE_OUTPUT_DUMP 5163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Dump output files 5173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // snprintf(filename_in, 512, "/data/lib2d/output/%s", filename); 5183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // DUMP_TO_FILE2(filename_in, src_buffer.yuv_buffer.plane0, y_plane_size, src_buffer.yuv_buffer.plane1, crcb_plane_size); 5193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // DUMP_TO_FILE(filename_raw, dst_buffer.rgb_buffer.buffer, rgb_size); 5203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("Dumping output file %s \n", filename_out); 5213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel lib2d_dump_tga(dst_buffer.rgb_buffer.buffer, 1, 5223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width, height, stride, filename_out); 5233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 5243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_release(&m_rgb_memHandle); 5263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_release(&m_yuv_memHandle); 5273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_lib2d_deinit(lib2d_handle); 5303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return 0; 5323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelrelease: 5343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_release(&m_rgb_memHandle); 5353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel img_lib.img_buffer_release(&m_yuv_memHandle); 5363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeldeinit: 5373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_lib2d_deinit(lib2d_handle); 5383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel printf("%s %d some error happened, tests completed = %d/%d \n", 5393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __LINE__, index - 1, total_tests); 5403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return -1; 5413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 5423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 544