1/*
2 * Copyright (C) 2010 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#ifndef OPENMAX_AL_ANDROID_H_
18#define OPENMAX_AL_ANDROID_H_
19
20#include "OpenMAXAL.h"
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/*---------------------------------------------------------------------------*/
27/* Android common types                                                      */
28/*---------------------------------------------------------------------------*/
29
30typedef xa_int64_t             XAAint64;          /* 64 bit signed integer   */
31
32typedef xa_uint64_t            XAAuint64;         /* 64 bit unsigned integer */
33
34/*---------------------------------------------------------------------------*/
35/* Android common types                                                      */
36/*---------------------------------------------------------------------------*/
37
38#define XA_ANDROID_VIDEOCODEC_VP8            ((XAuint32) 0x00000006)
39
40#define XA_ANDROID_VIDEOPROFILE_VP8_MAIN     ((XAuint32) 0x00000001)
41
42#define XA_ANDROID_VIDEOLEVEL_VP8_VERSION0   ((XAuint32) 0x00000001)
43#define XA_ANDROID_VIDEOLEVEL_VP8_VERSION1   ((XAuint32) 0x00000002)
44#define XA_ANDROID_VIDEOLEVEL_VP8_VERSION2   ((XAuint32) 0x00000003)
45#define XA_ANDROID_VIDEOLEVEL_VP8_VERSION3   ((XAuint32) 0x00000004)
46
47/*---------------------------------------------------------------------------*/
48/* Android Buffer Queue Interface                                            */
49/*---------------------------------------------------------------------------*/
50
51extern XA_API const XAInterfaceID XA_IID_ANDROIDBUFFERQUEUESOURCE;
52
53struct XAAndroidBufferQueueItf_;
54typedef const struct XAAndroidBufferQueueItf_ * const * XAAndroidBufferQueueItf;
55
56#define XA_ANDROID_ITEMKEY_NONE             ((XAuint32) 0x00000000)
57#define XA_ANDROID_ITEMKEY_EOS              ((XAuint32) 0x00000001)
58#define XA_ANDROID_ITEMKEY_DISCONTINUITY    ((XAuint32) 0x00000002)
59#define XA_ANDROID_ITEMKEY_BUFFERQUEUEEVENT ((XAuint32) 0x00000003)
60#define XA_ANDROID_ITEMKEY_FORMAT_CHANGE    ((XAuint32) 0x00000004)
61
62// optional data for XA_ANDROID_ITEMKEY_FORMAT_CHANGE, used when only one stream changes format,
63//   and the others remain continuous (i.e. no temporal discontinuity is introduced for them)
64//   candidate for being exposed in NDK
65#define XA_ANDROID_FORMATCHANGE_ITEMDATA_VIDEO  ((XAuint32) 0x00000001)
66//   not supported at this stage, for illustration purposes only
67//#define XA_ANDROID_FORMATCHANGE_ITEMDATA_AUDIO ((XAuint32) 0x00000002)
68
69#define XA_ANDROIDBUFFERQUEUEEVENT_NONE        ((XAuint32) 0x00000000)
70#define XA_ANDROIDBUFFERQUEUEEVENT_PROCESSED   ((XAuint32) 0x00000001)
71#if 0   // reserved for future use
72#define XA_ANDROIDBUFFERQUEUEEVENT_UNREALIZED  ((XAuint32) 0x00000002)
73#define XA_ANDROIDBUFFERQUEUEEVENT_CLEARED     ((XAuint32) 0x00000004)
74#define XA_ANDROIDBUFFERQUEUEEVENT_STOPPED     ((XAuint32) 0x00000008)
75#define XA_ANDROIDBUFFERQUEUEEVENT_ERROR       ((XAuint32) 0x00000010)
76#define XA_ANDROIDBUFFERQUEUEEVENT_CONTENT_END ((XAuint32) 0x00000020)
77#endif
78
79typedef struct XAAndroidBufferItem_ {
80    XAuint32 itemKey;  // identifies the item
81    XAuint32 itemSize;
82    XAuint8  itemData[0];
83} XAAndroidBufferItem;
84
85typedef XAresult (XAAPIENTRY *xaAndroidBufferQueueCallback)(
86    XAAndroidBufferQueueItf caller,/* input */
87    void *pCallbackContext,        /* input */
88    void *pBufferContext,          /* input */
89    void *pBufferData,             /* input */
90    XAuint32 dataSize,             /* input */
91    XAuint32 dataUsed,             /* input */
92    const XAAndroidBufferItem *pItems,/* input */
93    XAuint32 itemsLength           /* input */
94);
95
96typedef struct XAAndroidBufferQueueState_ {
97    XAuint32    count;
98    XAuint32    index;
99} XAAndroidBufferQueueState;
100
101struct XAAndroidBufferQueueItf_ {
102    XAresult (*RegisterCallback) (
103        XAAndroidBufferQueueItf self,
104        xaAndroidBufferQueueCallback callback,
105        void* pCallbackContext
106    );
107
108    XAresult (*Clear) (
109        XAAndroidBufferQueueItf self
110    );
111
112    XAresult (*Enqueue) (
113        XAAndroidBufferQueueItf self,
114        void *pBufferContext,
115        void *pData,
116        XAuint32 dataLength,
117        const XAAndroidBufferItem *pItems,
118        XAuint32 itemsLength
119    );
120
121    XAresult (*GetState) (
122        XAAndroidBufferQueueItf self,
123        XAAndroidBufferQueueState *pState
124    );
125
126
127    XAresult (*SetCallbackEventsMask) (
128            XAAndroidBufferQueueItf self,
129            XAuint32 eventFlags
130    );
131
132    XAresult (*GetCallbackEventsMask) (
133            XAAndroidBufferQueueItf self,
134            XAuint32 *pEventFlags
135    );
136};
137
138
139/*---------------------------------------------------------------------------*/
140/* Android Buffer Queue Data Locator                                         */
141/*---------------------------------------------------------------------------*/
142
143/** Addendum to Data locator macros  */
144#define XA_DATALOCATOR_ANDROIDBUFFERQUEUE       ((XAuint32) 0x800007BE)
145
146/** Android Buffer Queue-based data locator definition,
147 *  locatorType must be XA_DATALOCATOR_ANDROIDBUFFERQUEUE */
148typedef struct XADataLocator_AndroidBufferQueue_ {
149    XAuint32    locatorType;
150    XAuint32    numBuffers;
151} XADataLocator_AndroidBufferQueue;
152
153
154/*---------------------------------------------------------------------------*/
155/* Android File Descriptor Data Locator                                      */
156/*---------------------------------------------------------------------------*/
157
158/** Addendum to Data locator macros  */
159#define XA_DATALOCATOR_ANDROIDFD                ((XAuint32) 0x800007BC)
160
161#define XA_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((XAAint64) 0xFFFFFFFFFFFFFFFFll)
162
163/** File Descriptor-based data locator definition, locatorType must be XA_DATALOCATOR_ANDROIDFD */
164typedef struct XADataLocator_AndroidFD_ {
165    XAuint32        locatorType;
166    XAint32         fd;
167    XAAint64        offset;
168    XAAint64        length;
169} XADataLocator_AndroidFD;
170
171/**
172 * MIME types required for data in Android Buffer Queues
173 */
174#define XA_ANDROID_MIME_MP2TS              ((XAchar *) "video/mp2ts")
175
176#ifdef __cplusplus
177}
178#endif /* __cplusplus */
179
180#endif /* OPENMAX_AL_ANDROID_H_ */
181