hc
2023-12-06 d38611ca164021d018c1b23eee65bbebc09c63e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/******************************************************************************
 *
 * 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
 *
 * <pre>
 *
 *   Principal Author: Joerg Detert
 *   Creation date:    Feb 28, 2008
 *
 * </pre>
 *
 *****************************************************************************/
#ifndef MEDIA_BUFFER_H_
#define MEDIA_BUFFER_H_
 
#include <assert.h>
#include <stddef.h>
#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_*/