13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Copyright (c) 2013, 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#ifndef MM_JPEG_INLINES_H_ 313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define MM_JPEG_INLINES_H_ 323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// JPEG dependencies 343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "mm_jpeg.h" 353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** mm_jpeg_get_session: 373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Arguments: 393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @my_obj: jpeg object 403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @client_idx: client index 413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return: 433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * job index 443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: 463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Get job index by client id 473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic inline mm_jpeg_job_session_t *mm_jpeg_get_session(mm_jpeg_obj *my_obj, uint32_t job_id) 503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_jpeg_job_session_t *p_session = NULL; 523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int client_idx = GET_CLIENT_IDX(job_id); 533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int session_idx= GET_SESSION_IDX(job_id); 543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("client_idx %d session_idx %d", 563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel client_idx, session_idx); 573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if ((session_idx >= MM_JPEG_MAX_SESSION) || 583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel (client_idx >= MAX_JPEG_CLIENT_NUM)) { 593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGE("invalid job id %x", 603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel job_id); 613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return NULL; 623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock); 643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel p_session = &my_obj->clnt_mgr[client_idx].session[session_idx]; 653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock); 663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return p_session; 673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** mm_jpeg_get_job_idx: 703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Arguments: 723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @my_obj: jpeg object 733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @client_idx: client index 743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return: 763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * job index 773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: 793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Get job index by client id 803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic inline int mm_jpeg_get_new_session_idx(mm_jpeg_obj *my_obj, int client_idx, 833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel mm_jpeg_job_session_t **pp_session) 843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int i = 0; 863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int index = -1; 873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (i = 0; i < MM_JPEG_MAX_SESSION; i++) { 883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock); 893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (!my_obj->clnt_mgr[client_idx].session[i].active) { 903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *pp_session = &my_obj->clnt_mgr[client_idx].session[i]; 913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel my_obj->clnt_mgr[client_idx].session[i].active = OMX_TRUE; 923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel index = i; 933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock); 943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel break; 953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock); 973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return index; 993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/** mm_jpeg_get_job_idx: 1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Arguments: 1043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @my_obj: jpeg object 1053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * @client_idx: client index 1063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return: 1083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * job index 1093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: 1113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Get job index by client id 1123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel **/ 1143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic inline void mm_jpeg_remove_session_idx(mm_jpeg_obj *my_obj, uint32_t job_id) 1153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int client_idx = GET_CLIENT_IDX(job_id); 1173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int session_idx= GET_SESSION_IDX(job_id); 1183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel LOGD("client_idx %d session_idx %d", 1193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel client_idx, session_idx); 1203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock); 1213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel my_obj->clnt_mgr[client_idx].session[session_idx].active = OMX_FALSE; 1223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock); 1233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 1243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif /* MM_JPEG_INLINES_H_ */ 128