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 **/
49static 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 **/
82static 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 **/
114static 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