1 /* 2 * 3 * Copyright 2013 Rockchip Electronics Co., LTD. 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 /* 19 * @file Rockchip_OSAL_Mutex.c 20 * @brief 21 * @author csy(csy@rock-chips.com) 22 * @version 1.0.0 23 * @history 24 * 2013.11.26 : Create 25 */ 26 27 28 #include <stdio.h> 29 #include <stdlib.h> 30 #include <string.h> 31 #include <pthread.h> 32 33 #include "Rockchip_OSAL_Memory.h" 34 #include "Rockchip_OSAL_Mutex.h" 35 Rockchip_OSAL_MutexCreate(OMX_HANDLETYPE * mutexHandle)36OMX_ERRORTYPE Rockchip_OSAL_MutexCreate(OMX_HANDLETYPE *mutexHandle) 37 { 38 pthread_mutex_t *mutex; 39 40 mutex = (pthread_mutex_t *)Rockchip_OSAL_Malloc(sizeof(pthread_mutex_t)); 41 if (!mutex) 42 return OMX_ErrorInsufficientResources; 43 44 if (pthread_mutex_init(mutex, NULL) != 0) { 45 Rockchip_OSAL_Free(mutex); 46 return OMX_ErrorUndefined; 47 } 48 49 *mutexHandle = (OMX_HANDLETYPE)mutex; 50 return OMX_ErrorNone; 51 } 52 Rockchip_OSAL_MutexTerminate(OMX_HANDLETYPE mutexHandle)53OMX_ERRORTYPE Rockchip_OSAL_MutexTerminate(OMX_HANDLETYPE mutexHandle) 54 { 55 pthread_mutex_t *mutex = (pthread_mutex_t *)mutexHandle; 56 57 if (mutex == NULL) 58 return OMX_ErrorBadParameter; 59 60 if (pthread_mutex_destroy(mutex) != 0) 61 return OMX_ErrorUndefined; 62 63 Rockchip_OSAL_Free(mutex); 64 return OMX_ErrorNone; 65 } 66 Rockchip_OSAL_MutexLock(OMX_HANDLETYPE mutexHandle)67OMX_ERRORTYPE Rockchip_OSAL_MutexLock(OMX_HANDLETYPE mutexHandle) 68 { 69 pthread_mutex_t *mutex = (pthread_mutex_t *)mutexHandle; 70 71 if (mutex == NULL) 72 return OMX_ErrorBadParameter; 73 74 if (pthread_mutex_lock(mutex) != 0) 75 return OMX_ErrorUndefined; 76 77 return OMX_ErrorNone; 78 } 79 Rockchip_OSAL_MutexUnlock(OMX_HANDLETYPE mutexHandle)80OMX_ERRORTYPE Rockchip_OSAL_MutexUnlock(OMX_HANDLETYPE mutexHandle) 81 { 82 pthread_mutex_t *mutex = (pthread_mutex_t *)mutexHandle; 83 84 if (mutex == NULL) 85 return OMX_ErrorBadParameter; 86 87 if (pthread_mutex_unlock(mutex) != 0) 88 return OMX_ErrorUndefined; 89 90 return OMX_ErrorNone; 91 } 92