Home | History | Annotate | Download | only in OMXAL
      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
     23 extern "C" {
     24 #endif
     25 
     26 /*---------------------------------------------------------------------------*/
     27 /* Android common types                                                      */
     28 /*---------------------------------------------------------------------------*/
     29 
     30 typedef xa_int64_t             XAAint64;          /* 64 bit signed integer   */
     31 
     32 typedef 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 
     51 extern XA_API const XAInterfaceID XA_IID_ANDROIDBUFFERQUEUESOURCE;
     52 
     53 struct XAAndroidBufferQueueItf_;
     54 typedef 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 
     79 typedef struct XAAndroidBufferItem_ {
     80     XAuint32 itemKey;  // identifies the item
     81     XAuint32 itemSize;
     82     XAuint8  itemData[0];
     83 } XAAndroidBufferItem;
     84 
     85 typedef 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 
     96 typedef struct XAAndroidBufferQueueState_ {
     97     XAuint32    count;
     98     XAuint32    index;
     99 } XAAndroidBufferQueueState;
    100 
    101 struct 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 */
    148 typedef 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 */
    164 typedef 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