/******************************************************************************
*
* 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_*/