16f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Copyright (c) 2013, The Linux Foundation. All rights reserved. 26f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Redistribution and use in source and binary forms, with or without 46f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * modification, are permitted provided that the following conditions are 56f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * met: 66f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * * Redistributions of source code must retain the above copyright 76f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * notice, this list of conditions and the following disclaimer. 86f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * * Redistributions in binary form must reproduce the above 96f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * copyright notice, this list of conditions and the following 106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * disclaimer in the documentation and/or other materials provided 116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * with the distribution. 126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * * Neither the name of The Linux Foundation nor the names of its 136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * contributors may be used to endorse or promote products derived 146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * from this software without specific prior written permission. 156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev */ 296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "mm_jpeg_interface.h" 316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "mm_jpeg_ionbuf.h" 326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <sys/time.h> 336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/** DUMP_TO_FILE: 356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @filename: file name 366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @p_addr: address of the buffer 376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len: buffer length 386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * dump the image to the file 406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev **/ 416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define DUMP_TO_FILE(filename, p_addr, len) ({ \ 426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rc = 0; \ 436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev FILE *fp = fopen(filename, "w+"); \ 446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (fp) { \ 456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = fwrite(p_addr, 1, len, fp); \ 466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fclose(fp); \ 476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { \ 486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] cannot dump image", __func__, __LINE__); \ 496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } \ 506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}) 516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic int g_count = 1, g_i; 536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef struct { 556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *filename; 566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width; 576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int height; 586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *out_filename; 596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} jpeg_test_input_t; 606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic jpeg_test_input_t jpeg_input[] = { 626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {"/data/test.yuv", 1280, 720, "/data/test.jpg"} 636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef struct { 666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *filename; 676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width; 686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int height; 696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *out_filename; 706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_mutex_t lock; 716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_cond_t cond; 726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev buffer_test_t input; 736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev buffer_test_t output; 746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int use_ion; 756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t handle; 766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_ops_t ops; 776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t job_id[5]; 786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_encode_params_t params; 796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_job_t job; 806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t session_id; 816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} mm_jpeg_intf_test_t; 826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic void mm_jpeg_encode_callback(jpeg_job_status_t status, 846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t client_hdl, 856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t jobId, 866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_output_t *p_output, 876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *userData) 886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_intf_test_t *p_obj = (mm_jpeg_intf_test_t *)userData; 906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (status == JPEG_JOB_STATUS_ERROR) { 926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Encode error", __func__, __LINE__); 936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Encode success file%s addr %p len %d", 956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, __LINE__, p_obj->out_filename, 966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_output->buf_vaddr, p_output->buf_filled_len); 976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev DUMP_TO_FILE(p_obj->out_filename, p_output->buf_vaddr, p_output->buf_filled_len); 986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev g_i++; 1006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (g_i >= g_count) { 1016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Signal the thread", __func__, __LINE__); 1026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_cond_signal(&p_obj->cond); 1036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint mm_jpeg_test_alloc(buffer_test_t *p_buffer, int use_pmem) 1076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int ret = 0; 1096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /*Allocate buffers*/ 1106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (use_pmem) { 1116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_buffer->addr = (uint8_t *)buffer_allocate(p_buffer); 1126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == p_buffer->addr) { 1136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 1146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 1156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 1176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* Allocate heap memory */ 1186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_buffer->addr = (uint8_t *)malloc(p_buffer->size); 1196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == p_buffer->addr) { 1206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 1216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 1226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return ret; 1256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid mm_jpeg_test_free(buffer_test_t *p_buffer) 1286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (p_buffer->addr == NULL) 1306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return; 1316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (p_buffer->p_pmem_fd > 0) 1336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev buffer_deallocate(p_buffer); 1346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev else 1356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(p_buffer->addr); 1366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(p_buffer, 0x0, sizeof(buffer_test_t)); 1386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint mm_jpeg_test_read(mm_jpeg_intf_test_t *p_obj) 1416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rc = 0; 1436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev FILE *fp = NULL; 1446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int file_size = 0; 1456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fp = fopen(p_obj->filename, "rb"); 1466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (!fp) { 1476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] error", __func__, __LINE__); 1486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 1496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fseek(fp, 0, SEEK_END); 1516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev file_size = ftell(fp); 1526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fseek(fp, 0, SEEK_SET); 1536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] input file size is %d buf_size %ld", 1546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, __LINE__, file_size, p_obj->input.size); 1556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (p_obj->input.size > file_size) { 1576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] error", __func__, __LINE__); 1586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fclose(fp); 1596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 1606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fread(p_obj->input.addr, 1, p_obj->input.size, fp); 1626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fclose(fp); 1636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return 0; 1646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 1656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic int encode_init(jpeg_test_input_t *p_input, mm_jpeg_intf_test_t *p_obj) 1676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 1686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rc = -1; 1696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int size = p_input->width * p_input->height; 1706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_encode_params_t *p_params = &p_obj->params; 1716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_encode_job_t *p_job_params = &p_obj->job.encode_job; 1726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->filename = p_input->filename; 1746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->width = p_input->width; 1756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->height = p_input->height; 1766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->out_filename = p_input->out_filename; 1776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->use_ion = 1; 1786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_mutex_init(&p_obj->lock, NULL); 1806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_cond_init(&p_obj->cond, NULL); 1816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* allocate buffers */ 1836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->input.size = size * 3/2; 1846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = mm_jpeg_test_alloc(&p_obj->input, p_obj->use_ion); 1856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc) { 1866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 1876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 1886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_obj->output.size = size * 3/2; 1916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = mm_jpeg_test_alloc(&p_obj->output, 0); 1926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc) { 1936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 1946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 1956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 1966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = mm_jpeg_test_read(p_obj); 1986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc) { 1996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 2006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 2016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* set encode parameters */ 2046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->jpeg_cb = mm_jpeg_encode_callback; 2056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->userdata = p_obj; 2066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->color_format = MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2; 2076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* dest buffer config */ 2096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->dest_buf[0].buf_size = p_obj->output.size; 2106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->dest_buf[0].buf_vaddr = p_obj->output.addr; 2116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->dest_buf[0].fd = p_obj->output.p_pmem_fd; 2126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->dest_buf[0].index = 0; 2136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->num_dst_bufs = 1; 2146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* src buffer config*/ 2166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].buf_size = p_obj->input.size; 2176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].buf_vaddr = p_obj->input.addr; 2186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].fd = p_obj->input.p_pmem_fd; 2196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].index = 0; 2206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].format = MM_JPEG_FMT_YUV; 2216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].offset.mp[0].len = size; 2226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->src_main_buf[0].offset.mp[1].len = size >> 1; 2236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->num_src_bufs = 1; 2246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->encode_thumbnail = 1; 2266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->exif_info.numOfEntries = 0; 2276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_params->quality = 80; 2286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->dst_index = 0; 2306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->src_index = 0; 2316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->rotation = 0; 2326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* main dimension */ 2346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.src_dim.width = p_obj->width; 2356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.src_dim.height = p_obj->height; 2366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.dst_dim.width = p_obj->width; 2376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.dst_dim.height = p_obj->height; 2386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.crop.top = 0; 2396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.crop.left = 0; 2406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.crop.width = p_obj->width; 2416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->main_dim.crop.height = p_obj->height; 2426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* thumb dimension */ 2446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.src_dim.width = p_obj->width; 2456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.src_dim.height = p_obj->height; 2466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.dst_dim.width = 512; 2476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.dst_dim.height = 384; 2486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.crop.top = 0; 2496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.crop.left = 0; 2506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.crop.width = p_obj->width; 2516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_job_params->thumb_dim.crop.height = p_obj->height; 2526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return 0; 2536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 2546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic int encode_test(jpeg_test_input_t *p_input) 2566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 2576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rc = 0; 2586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_intf_test_t jpeg_obj; 2596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int i = 0; 2606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&jpeg_obj, 0x0, sizeof(jpeg_obj)); 2626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = encode_init(p_input, &jpeg_obj); 2636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc) { 2646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 2656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 2666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev jpeg_obj.handle = jpeg_open(&jpeg_obj.ops); 2696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (jpeg_obj.handle == 0) { 2706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 2716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto end; 2726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = jpeg_obj.ops.create_session(jpeg_obj.handle, &jpeg_obj.params, 2756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &jpeg_obj.job.encode_job.session_id); 2766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (jpeg_obj.job.encode_job.session_id == 0) { 2776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 2786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto end; 2796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (i = 0; i < g_count; i++) { 2826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev jpeg_obj.job.job_type = JPEG_JOB_TYPE_ENCODE; 2836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = jpeg_obj.ops.start_job(&jpeg_obj.job, &jpeg_obj.job_id[i]); 2846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc) { 2856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CDBG_ERROR("%s:%d] Error",__func__, __LINE__); 2866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto end; 2876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 2896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* 2916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev usleep(5); 2926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev jpeg_obj.ops.abort_job(jpeg_obj.job_id[0]); 2936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev */ 2946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_mutex_lock(&jpeg_obj.lock); 2956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_cond_wait(&jpeg_obj.cond, &jpeg_obj.lock); 2966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pthread_mutex_unlock(&jpeg_obj.lock); 2976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev jpeg_obj.ops.destroy_session(jpeg_obj.job.encode_job.session_id); 2996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev jpeg_obj.ops.close(jpeg_obj.handle); 3016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevend: 3046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_test_free(&jpeg_obj.input); 3056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mm_jpeg_test_free(&jpeg_obj.output); 3066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return 0; 3076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 3086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/** main: 3106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 3116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Arguments: 3126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @argc 3136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @argv 3146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 3156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Return: 3166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 0 or -ve values 3176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 3186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Description: 3196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * main function 3206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 3216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev **/ 3226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint main(int argc, char* argv[]) 3236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 3246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return encode_test(&jpeg_input[0]); 3256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 3266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 328