1 /* Copyright (c) 2013, 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 #include "mm_jpeg.h"
34
35 /** mm_jpeg_get_session:
36 *
37 * Arguments:
38 * @my_obj: jpeg object
39 * @client_idx: client index
40 *
41 * Return:
42 * job index
43 *
44 * Description:
45 * Get job index by client id
46 *
47 **/
mm_jpeg_get_session(mm_jpeg_obj * my_obj,uint32_t job_id)48 static inline mm_jpeg_job_session_t *mm_jpeg_get_session(mm_jpeg_obj *my_obj, uint32_t job_id)
49 {
50 mm_jpeg_job_session_t *p_session = NULL;
51 int client_idx = GET_CLIENT_IDX(job_id);
52 int session_idx= GET_SESSION_IDX(job_id);
53
54 CDBG("%s:%d] client_idx %d session_idx %d", __func__, __LINE__,
55 client_idx, session_idx);
56 if ((session_idx >= MM_JPEG_MAX_SESSION) ||
57 (client_idx >= MAX_JPEG_CLIENT_NUM)) {
58 CDBG_ERROR("%s:%d] invalid job id %x", __func__, __LINE__,
59 job_id);
60 return NULL;
61 }
62 pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock);
63 p_session = &my_obj->clnt_mgr[client_idx].session[session_idx];
64 pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
65 return p_session;
66 }
67
68 /** mm_jpeg_get_job_idx:
69 *
70 * Arguments:
71 * @my_obj: jpeg object
72 * @client_idx: client index
73 *
74 * Return:
75 * job index
76 *
77 * Description:
78 * Get job index by client id
79 *
80 **/
mm_jpeg_get_new_session_idx(mm_jpeg_obj * my_obj,int client_idx,mm_jpeg_job_session_t ** pp_session)81 static inline int mm_jpeg_get_new_session_idx(mm_jpeg_obj *my_obj, int client_idx,
82 mm_jpeg_job_session_t **pp_session)
83 {
84 int i = 0;
85 int index = -1;
86 for (i = 0; i < MM_JPEG_MAX_SESSION; i++) {
87 pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock);
88 if (!my_obj->clnt_mgr[client_idx].session[i].active) {
89 *pp_session = &my_obj->clnt_mgr[client_idx].session[i];
90 my_obj->clnt_mgr[client_idx].session[i].active = OMX_TRUE;
91 index = i;
92 pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
93 break;
94 }
95 pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
96 }
97 return index;
98 }
99
100 /** mm_jpeg_get_job_idx:
101 *
102 * Arguments:
103 * @my_obj: jpeg object
104 * @client_idx: client index
105 *
106 * Return:
107 * job index
108 *
109 * Description:
110 * Get job index by client id
111 *
112 **/
mm_jpeg_remove_session_idx(mm_jpeg_obj * my_obj,uint32_t job_id)113 static inline void mm_jpeg_remove_session_idx(mm_jpeg_obj *my_obj, uint32_t job_id)
114 {
115 int client_idx = GET_CLIENT_IDX(job_id);
116 int session_idx= GET_SESSION_IDX(job_id);
117 CDBG("%s:%d] client_idx %d session_idx %d", __func__, __LINE__,
118 client_idx, session_idx);
119 pthread_mutex_lock(&my_obj->clnt_mgr[client_idx].lock);
120 my_obj->clnt_mgr[client_idx].session[session_idx].active = OMX_FALSE;
121 pthread_mutex_unlock(&my_obj->clnt_mgr[client_idx].lock);
122 }
123
124
125
126 #endif /* MM_JPEG_INLINES_H_ */
127