VideoEditorBuffer.h revision b5c7784c96a606890eb8a8b560153ef4a5d1a0d9
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17*************************************************************************
18* @file   VideoEditorBuffer.c
19* @brief  StageFright shell Buffer
20*************************************************************************
21*/
22#ifndef   VIDEOEDITOR_BUFFER_H
23#define   VIDEOEDITOR_BUFFER_H
24
25#include "M4OSA_Types.h"
26#include "M4OSA_Debug.h"
27#include "M4OSA_Memory.h"
28#include "M4OSA_CharStar.h"
29#include "M4_Utils.h"
30
31#include "LV_Macros.h"
32
33/*--- Core id for VIDEOEDITOR Buffer allocations  ---*/
34#define VIDEOEDITOR_BUFFER_EXTERNAL 0x012F
35
36/* ----- errors  -----*/
37#define M4ERR_NO_BUFFER_AVAILABLE \
38    M4OSA_ERR_CREATE(M4_ERR,VIDEOEDITOR_BUFFER_EXTERNAL,0x000001)
39#define M4ERR_NO_BUFFER_MATCH \
40    M4OSA_ERR_CREATE(M4_ERR,VIDEOEDITOR_BUFFER_EXTERNAL,0x000002)
41
42typedef enum {
43    VIDEOEDITOR_BUFFER_kEmpty = 0,
44    VIDEOEDITOR_BUFFER_kFilled,
45} VIDEOEDITOR_BUFFER_State;
46
47/**
48 ************************************************************************
49 * Structure    LVOMX_BUFFER_Buffer
50 * @brief       One OMX Buffer and data related to it
51 ************************************************************************
52*/
53typedef struct {
54    M4OSA_Void* pData;              /**< Pointer to the data*/
55    M4OSA_UInt32 size;
56    VIDEOEDITOR_BUFFER_State state; /**< Buffer state */
57    M4OSA_UInt32 idx;               /**< Index of the buffer inside the pool */
58    M4_MediaTime    buffCTS;        /**< Time stamp of the buffer */
59} VIDEOEDITOR_BUFFER_Buffer;
60
61/**
62 ************************************************************************
63 * Structure    LVOMX_BUFFER_Pool
64 * @brief       Structure to manage buffers
65 ************************************************************************
66*/
67typedef struct {
68    VIDEOEDITOR_BUFFER_Buffer* pNXPBuffer;
69    M4OSA_UInt32 NB;
70    M4OSA_Char* poolName;
71} VIDEOEDITOR_BUFFER_Pool;
72
73#ifdef __cplusplus
74extern "C"
75{
76#endif //__cplusplus
77
78/**
79 ************************************************************************
80 M4OSA_ERR VIDEOEDITOR_BUFFER_allocatePool(VIDEOEDITOR_BUFFER_Pool** ppool,
81 *         M4OSA_UInt32 nbBuffers)
82 * @brief   Allocate a pool of nbBuffers buffers
83 *
84 * @param   ppool      : IN The buffer pool to create
85 * @param   nbBuffers  : IN The number of buffers in the pool
86 * @param   poolName   : IN a name given to the pool
87 * @return  Error code
88 ************************************************************************
89*/
90M4OSA_ERR VIDEOEDITOR_BUFFER_allocatePool(VIDEOEDITOR_BUFFER_Pool** ppool,
91        M4OSA_UInt32 nbBuffers, M4OSA_Char* poolName);
92
93/**
94 ************************************************************************
95 M4OSA_ERR VIDEOEDITOR_BUFFER_freePool(LVOMX_BUFFER_Pool* ppool)
96 * @brief   Deallocate a buffer pool
97 *
98 * @param   ppool      : IN The buffer pool to free
99 * @return  Error code
100 ************************************************************************
101*/
102M4OSA_ERR VIDEOEDITOR_BUFFER_freePool(VIDEOEDITOR_BUFFER_Pool* ppool);
103
104/**
105 ************************************************************************
106 M4OSA_ERR VIDEOEDITOR_BUFFER_getBuffer(VIDEOEDITOR_BUFFER_Pool* ppool,
107 *         VIDEOEDITOR_BUFFER_Buffer** pNXPBuffer)
108 * @brief   Returns a buffer in a given state
109 *
110 * @param   ppool      : IN The buffer pool
111 * @param   desiredState : IN The buffer state
112 * @param   pNXPBuffer : IN The selected buffer
113 * @return  Error code
114 ************************************************************************
115*/
116M4OSA_ERR VIDEOEDITOR_BUFFER_getBuffer(VIDEOEDITOR_BUFFER_Pool* ppool,
117        VIDEOEDITOR_BUFFER_State desiredState,
118        VIDEOEDITOR_BUFFER_Buffer** pNXPBuffer);
119
120
121M4OSA_ERR VIDEOEDITOR_BUFFER_initPoolBuffers(VIDEOEDITOR_BUFFER_Pool* ppool,
122        M4OSA_UInt32 lSize);
123
124M4OSA_ERR VIDEOEDITOR_BUFFER_getOldestBuffer(VIDEOEDITOR_BUFFER_Pool *pool,
125        VIDEOEDITOR_BUFFER_State desiredState,
126        VIDEOEDITOR_BUFFER_Buffer** pNXPBuffer);
127
128#ifdef __cplusplus
129}
130#endif //__cplusplus
131#endif /*VIDEOEDITOR_BUFFER_H*/
132
133