/src/libhevc/encoder/osal_cond_var.c
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * |
3 | | * Copyright (C) 2018 The Android Open Source Project |
4 | | * |
5 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | | * you may not use this file except in compliance with the License. |
7 | | * You may obtain a copy of the License at: |
8 | | * |
9 | | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | | * |
11 | | * Unless required by applicable law or agreed to in writing, software |
12 | | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | | * See the License for the specific language governing permissions and |
15 | | * limitations under the License. |
16 | | * |
17 | | ***************************************************************************** |
18 | | * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
19 | | */ |
20 | | |
21 | | /*****************************************************************************/ |
22 | | /* */ |
23 | | /* File Name : osal_cond_var.c */ |
24 | | /* */ |
25 | | /* Description : This file contains all the necessary function */ |
26 | | /* definitions required to operate on Conditional */ |
27 | | /* Variable. */ |
28 | | /* */ |
29 | | /* List of Functions : osal_cond_var_create */ |
30 | | /* osal_cond_var_destroy */ |
31 | | /* osal_cond_var_wait */ |
32 | | /* osal_cond_var_wait_timed */ |
33 | | /* osal_cond_var_signal */ |
34 | | /* */ |
35 | | /* Issues / Problems : None */ |
36 | | /* */ |
37 | | /* Revision History : */ |
38 | | /* */ |
39 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
40 | | /* 05 09 2006 Ittiam Draft */ |
41 | | /* */ |
42 | | /*****************************************************************************/ |
43 | | |
44 | | /*****************************************************************************/ |
45 | | /* File Includes */ |
46 | | /*****************************************************************************/ |
47 | | |
48 | | /* System include files */ |
49 | | #include <stdio.h> |
50 | | |
51 | | #include <errno.h> |
52 | | #include <pthread.h> |
53 | | #include <stdlib.h> |
54 | | #include <unistd.h> |
55 | | #include <time.h> |
56 | | |
57 | | /* User include files */ |
58 | | #include "cast_types.h" |
59 | | #include "osal.h" |
60 | | #include "osal_handle.h" |
61 | | #include "osal_mutex.h" |
62 | | #include "osal_cond_var.h" |
63 | | |
64 | | /*****************************************************************************/ |
65 | | /* */ |
66 | | /* Function Name : osal_cond_var_create */ |
67 | | /* */ |
68 | | /* Description : This function initializes the conditional variable and */ |
69 | | /* returns the handle to it. */ |
70 | | /* */ |
71 | | /* Inputs : OSAL handle */ |
72 | | /* Memory manager handle */ |
73 | | /* */ |
74 | | /* Globals : None */ |
75 | | /* */ |
76 | | /* Processing : Calls system specific API and returns handle to the */ |
77 | | /* conditional variable. */ |
78 | | /* */ |
79 | | /* Outputs : Handle to Condtional Variable */ |
80 | | /* */ |
81 | | /* Returns : On SUCCESS - Handle to Conditional Varaible */ |
82 | | /* On FAILURE - NULL */ |
83 | | /* */ |
84 | | /* Issues : None */ |
85 | | /* */ |
86 | | /* Revision History: */ |
87 | | /* */ |
88 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
89 | | /* 05 09 2006 Ittiam Draft */ |
90 | | /* */ |
91 | | /*****************************************************************************/ |
92 | | |
93 | | void *osal_cond_var_create(IN void *osal_handle) |
94 | 8.21k | { |
95 | 8.21k | if(0 == osal_handle) |
96 | 0 | return 0; |
97 | | |
98 | 8.21k | { |
99 | 8.21k | osal_t *handle = osal_handle; |
100 | 8.21k | cond_var_handle_t *cond_var_handle = 0; |
101 | 8.21k | void *mmr_handle = 0; |
102 | | |
103 | 8.21k | if(0 == handle || 0 == handle->alloc || 0 == handle->free) |
104 | 0 | return 0; |
105 | | |
106 | | /* Initialize MMR handle */ |
107 | 8.21k | mmr_handle = handle->mmr_handle; |
108 | | |
109 | | /* Allocate memory for the Handle */ |
110 | 8.21k | cond_var_handle = handle->alloc(mmr_handle, sizeof(cond_var_handle_t)); |
111 | | |
112 | | /* Error in memory allocation */ |
113 | 8.21k | if(0 == cond_var_handle) |
114 | 0 | return 0; |
115 | | |
116 | 8.21k | cond_var_handle->mmr_handle = mmr_handle; |
117 | 8.21k | cond_var_handle->hdl = handle; |
118 | | |
119 | | /* Create semaphore */ |
120 | 8.21k | if(0 != pthread_cond_init(&(cond_var_handle->cond_var), 0)) |
121 | 0 | { |
122 | 0 | handle->free(mmr_handle, cond_var_handle); |
123 | 0 | return 0; |
124 | 0 | } |
125 | | |
126 | 8.21k | return cond_var_handle; |
127 | 8.21k | } |
128 | 8.21k | } |
129 | | |
130 | | /*****************************************************************************/ |
131 | | /* */ |
132 | | /* Function Name : osal_cond_var_destroy */ |
133 | | /* */ |
134 | | /* Description : This function destroys all the OS resources allocated by */ |
135 | | /* 'osal_cond_var_create' API. */ |
136 | | /* */ |
137 | | /* Inputs : Conditional Variable handle */ |
138 | | /* */ |
139 | | /* Globals : None */ |
140 | | /* */ |
141 | | /* Processing : Validates the input and destroys all the OS allocated */ |
142 | | /* resources. */ |
143 | | /* */ |
144 | | /* Outputs : Status of closure */ |
145 | | /* */ |
146 | | /* Returns : On SUCCESS - OSAL_SUCCESS */ |
147 | | /* On FAILURE - OSAL_ERROR */ |
148 | | /* */ |
149 | | /* Issues : None */ |
150 | | /* */ |
151 | | /* Revision History: */ |
152 | | /* */ |
153 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
154 | | /* 10 05 2006 Ittiam Draft */ |
155 | | /* */ |
156 | | /*****************************************************************************/ |
157 | | |
158 | | WORD32 osal_cond_var_destroy(IN void *cond_var_handle) |
159 | 8.21k | { |
160 | 8.21k | if(0 == cond_var_handle) |
161 | 0 | return OSAL_ERROR; |
162 | | |
163 | 8.21k | { |
164 | 8.21k | cond_var_handle_t *handle = (cond_var_handle_t *)cond_var_handle; |
165 | 8.21k | WORD32 status = 0; |
166 | | |
167 | 8.21k | if(0 == handle->hdl || 0 == handle->hdl->free) |
168 | 0 | return OSAL_ERROR; |
169 | | |
170 | | /* Destroy the mutex */ |
171 | 8.21k | status = pthread_cond_destroy(&(handle->cond_var)); |
172 | | |
173 | 8.21k | if(0 != status) |
174 | 0 | return OSAL_ERROR; |
175 | | |
176 | | /* Free the handle */ |
177 | 8.21k | handle->hdl->free(handle->mmr_handle, handle); |
178 | 8.21k | return OSAL_SUCCESS; |
179 | 8.21k | } |
180 | 8.21k | } |
181 | | |
182 | | /*****************************************************************************/ |
183 | | /* */ |
184 | | /* Function Name : osal_cond_var_wait */ |
185 | | /* */ |
186 | | /* Description : This function waits infinitely on conditional varaiable. */ |
187 | | /* */ |
188 | | /* Inputs : Conditional Variable handle */ |
189 | | /* Mutex handle for lock */ |
190 | | /* */ |
191 | | /* Globals : None */ |
192 | | /* */ |
193 | | /* Processing : This function waits on Conditional variable signal. Till */ |
194 | | /* signal is not, lock on mutex is relinquished. */ |
195 | | /* */ |
196 | | /* Outputs : Status of wait on conditional variable */ |
197 | | /* */ |
198 | | /* Returns : On SUCCESS - OSAL_SUCCESS */ |
199 | | /* On FAILURE - OSAL_ERROR */ |
200 | | /* */ |
201 | | /* Issues : None */ |
202 | | /* */ |
203 | | /* Revision History: */ |
204 | | /* */ |
205 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
206 | | /* 10 05 2006 Ittiam Draft */ |
207 | | /* */ |
208 | | /*****************************************************************************/ |
209 | | |
210 | | WORD32 osal_cond_var_wait(IN void *cond_var_handle, IN void *mutex_handle) |
211 | 145k | { |
212 | 145k | if(0 == cond_var_handle || 0 == mutex_handle) |
213 | 0 | return OSAL_ERROR; |
214 | | |
215 | 145k | { |
216 | 145k | mutex_handle_t *mutex = (mutex_handle_t *)mutex_handle; |
217 | 145k | cond_var_handle_t *cond_var = (cond_var_handle_t *)cond_var_handle; |
218 | | |
219 | 145k | return pthread_cond_wait(&(cond_var->cond_var), &(mutex->mutex_handle)); |
220 | 145k | } |
221 | 145k | } |
222 | | |
223 | | /*****************************************************************************/ |
224 | | /* */ |
225 | | /* Function Name : osal_cond_var_signal */ |
226 | | /* */ |
227 | | /* Description : This function signals on a conditional variable. */ |
228 | | /* */ |
229 | | /* Inputs : Conditional Variable handle */ |
230 | | /* */ |
231 | | /* Globals : None */ |
232 | | /* */ |
233 | | /* Processing : Calls the underlaying API to signal on a conditional */ |
234 | | /* variable. */ |
235 | | /* */ |
236 | | /* Outputs : Status of signalling */ |
237 | | /* */ |
238 | | /* Returns : On SUCCESS - OSAL_SUCCESS */ |
239 | | /* On FAILURE - OSAL_ERROR */ |
240 | | /* */ |
241 | | /* Issues : None */ |
242 | | /* */ |
243 | | /* Revision History: */ |
244 | | /* */ |
245 | | /* DD MM YYYY Author(s) Changes (Describe the changes made) */ |
246 | | /* 10 05 2006 Ittiam Draft */ |
247 | | /* */ |
248 | | /*****************************************************************************/ |
249 | | |
250 | | WORD32 osal_cond_var_signal(IN void *cond_var_handle) |
251 | 166k | { |
252 | 166k | if(0 == cond_var_handle) |
253 | 0 | return OSAL_ERROR; |
254 | | |
255 | 166k | { |
256 | 166k | cond_var_handle_t *cond_var = (cond_var_handle_t *)cond_var_handle; |
257 | 166k | return pthread_cond_signal(&(cond_var->cond_var)); |
258 | 166k | } |
259 | 166k | } |