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