Home | History | Annotate | Download | only in inc
      1 /* Copyright (c) 2013, 2016, The Linux Foundation. All rights reserved.
      2  *
      3  * Redistribution and use in source and binary forms, with or without
      4  * modification, are permitted provided that the following conditions are
      5  * met:
      6  *     * Redistributions of source code must retain the above copyright
      7  *       notice, this list of conditions and the following disclaimer.
      8  *     * Redistributions in binary form must reproduce the above
      9  *       copyright notice, this list of conditions and the following
     10  *       disclaimer in the documentation and/or other materials provided
     11  *       with the distribution.
     12  *     * Neither the name of The Linux Foundation nor the names of its
     13  *       contributors may be used to endorse or promote products derived
     14  *       from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  *
     28  */
     29 
     30 #ifndef MM_JPEG_INLINES_H_
     31 #define MM_JPEG_INLINES_H_
     32 
     33 // JPEG dependencies
     34 #include "mm_jpeg.h"
     35 
     36 /** mm_jpeg_get_session:
     37  *
     38  *  Arguments:
     39  *    @my_obj: jpeg object
     40  *    @client_idx: client index
     41  *
     42  *  Return:
     43  *       job index
     44  *
     45  *  Description:
     46  *       Get job index by client id
     47  *
     48  **/
     49 static inline mm_jpeg_job_session_t *mm_jpeg_get_session(mm_jpeg_obj *my_obj, uint32_t job_id)
     50 {
     51   mm_jpeg_job_session_t *p_session = NULL;
     52   int client_idx =  GET_CLIENT_IDX(job_id);
     53   int session_idx= GET_SESSION_IDX(job_id);
     54 
     55   LOGD("client_idx %d session_idx %d",
     56     client_idx, session_idx);
     57   if ((session_idx >= MM_JPEG_MAX_SESSION) ||
     58     (client_idx >= MAX_JPEG_CLIENT_NUM)) {
     59     LOGE("invalid job id %x",
     60       job_id);
     61     return NULL;
     62   }
     63   pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock);
     64   p_session = &my_obj->clnt_mgr[client_idx].session[session_idx];
     65   pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
     66   return p_session;
     67 }
     68 
     69 /** mm_jpeg_get_job_idx:
     70  *
     71  *  Arguments:
     72  *    @my_obj: jpeg object
     73  *    @client_idx: client index
     74  *
     75  *  Return:
     76  *       job index
     77  *
     78  *  Description:
     79  *       Get job index by client id
     80  *
     81  **/
     82 static inline int mm_jpeg_get_new_session_idx(mm_jpeg_obj *my_obj, int client_idx,
     83   mm_jpeg_job_session_t **pp_session)
     84 {
     85   int i = 0;
     86   int index = -1;
     87   for (i = 0; i < MM_JPEG_MAX_SESSION; i++) {
     88     pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock);
     89     if (!my_obj->clnt_mgr[client_idx].session[i].active) {
     90       *pp_session = &my_obj->clnt_mgr[client_idx].session[i];
     91       my_obj->clnt_mgr[client_idx].session[i].active = OMX_TRUE;
     92       index = i;
     93       pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
     94       break;
     95     }
     96     pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
     97   }
     98   return index;
     99 }
    100 
    101 /** mm_jpeg_get_job_idx:
    102  *
    103  *  Arguments:
    104  *    @my_obj: jpeg object
    105  *    @client_idx: client index
    106  *
    107  *  Return:
    108  *       job index
    109  *
    110  *  Description:
    111  *       Get job index by client id
    112  *
    113  **/
    114 static inline void mm_jpeg_remove_session_idx(mm_jpeg_obj *my_obj, uint32_t job_id)
    115 {
    116   int client_idx =  GET_CLIENT_IDX(job_id);
    117   int session_idx= GET_SESSION_IDX(job_id);
    118   LOGD("client_idx %d session_idx %d",
    119     client_idx, session_idx);
    120   pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock);
    121   my_obj->clnt_mgr[client_idx].session[session_idx].active = OMX_FALSE;
    122   pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
    123 }
    124 
    125 
    126 
    127 #endif /* MM_JPEG_INLINES_H_ */
    128