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