/****************************************************************************** * * Copyright 2007, Silicon Image, Inc. All rights reserved. * No part of this work may be reproduced, modified, distributed, transmitted, * transcribed, or translated into any language or computer format, in any form * or by any means without written permission of: Silicon Image, Inc., 1060 * East Arques Avenue, Sunnyvale, California 94085 * *****************************************************************************/ /** * @file media_buffer.h * * @brief * Media Buffer interface * *
 *
 *   Principal Author: Joerg Detert
 *   Creation date:    Feb 28, 2008
 *
 * 
* *****************************************************************************/ #ifndef MEDIA_BUFFER_H_ #define MEDIA_BUFFER_H_ #include #include #include "rk_aiq_comm.h" #if defined (__cplusplus) extern "C" { #endif #define RET_SUCCESS 0 //!< this has to be 0, if clauses rely on it #define RET_FAILURE 1 //!< general failure #define RET_NOTSUPP 2 //!< feature not supported #define RET_BUSY 3 //!< there's already something going on... #define RET_CANCELED 4 //!< operation canceled #define RET_OUTOFMEM 5 //!< out of memory #define RET_OUTOFRANGE 6 //!< parameter/value out of range #define RET_IDLE 7 //!< feature/subsystem is in idle state #define RET_WRONG_HANDLE 8 //!< handle is wrong #define RET_NULL_POINTER 9 //!< the/one/all parameter(s) is a(are) NULL pointer(s) #define RET_NOTAVAILABLE 10 //!< profile not available #define RET_DIVISION_BY_ZERO 11 //!< a divisor equals ZERO #define RET_WRONG_STATE 12 //!< state machine in wrong state #define RET_INVALID_PARM 13 //!< invalid parameter #define RET_PENDING 14 //!< command pending #define RET_WRONG_CONFIG 15 //!< given configuration is invalid typedef unsigned long ulong_t; /** * @brief The MediaBufferPool holds elements from type MediaBuffer_t. */ typedef struct MediaBuffer_s { uint8_t* pBaseAddress; /**< Base address of system memory buffer (can differ from actual buffer start address, set in ScmiBuffer). */ uint32_t baseSize; /**< Base size of buffer (can differ from actual buffer size, set in ScmiBuffer). */ uint32_t lockCount; /**< Counting how many times buffer is used. 0 means buffer belongs to pool and is free. */ void* pOwner; void* pMetaData; /**< Pointer to optional meta data structure. */ } MediaBuffer_t; /*****************************************************************************/ /** * @brief Initialize a mutex. * * @param * *****************************************************************************/ void AtomicMutexInit(); /*****************************************************************************/ /** * @brief Destroy a mutex. * * @param * *****************************************************************************/ void AtomicMutexDestory(); /*****************************************************************************/ /** * @brief Initialize a @ref MediaBuffer_t. * * @param pBuf Buffer to initialize. * *****************************************************************************/ extern void MediaBufInit(MediaBuffer_t* pBuf); /*****************************************************************************/ /** * @brief Lock a buffer of a owning buffer pool. Buffer will not be available as * empty buffer until unlocked as many times as locked before * and released. * * @param pBufQueue Pointer to Media Buffer Queue object. * @param pBuf Pointer to media buffer. * * @return Status of operation. *****************************************************************************/ extern RESULT MediaBufLockBuffer(MediaBuffer_t* pBuf); /*****************************************************************************/ /** * @brief Unlock a buffer of a owning buffer pool which has previously been locked. * * @param pBufQueue Pointer to Media Buffer Queue object. * @param pBuf Pointer to media buffer. * * @return Status of operation. *****************************************************************************/ extern RESULT MediaBufUnlockBuffer(MediaBuffer_t* pBuf); #if defined (__cplusplus) } #endif #endif /*MEDIA_BUFFER_H_*/