Home | History | Annotate | Download | only in src
      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 /* Our own merged version of SLDataSource and SLDataSink */
     18 
     19 typedef union {
     20     SLuint32 mLocatorType;
     21     SLDataLocator_Address mAddress;
     22     SLDataLocator_BufferQueue mBufferQueue;
     23     SLDataLocator_IODevice mIODevice;
     24     SLDataLocator_MIDIBufferQueue mMIDIBufferQueue;
     25     SLDataLocator_OutputMix mOutputMix;
     26     SLDataLocator_URI mURI;
     27     XADataLocator_NativeDisplay mNativeDisplay;
     28 #ifdef ANDROID
     29     SLDataLocator_AndroidFD mFD;
     30     SLDataLocator_AndroidBufferQueue mABQ;
     31 #endif
     32 } DataLocator;
     33 
     34 typedef union {
     35     SLuint32 mFormatType;
     36     SLDataFormat_PCM mPCM;
     37     SLAndroidDataFormat_PCM_EX mPCMEx;
     38     SLDataFormat_MIME mMIME;
     39     XADataFormat_RawImage mRawImage;
     40 } DataFormat;
     41 
     42 typedef struct {
     43     union {
     44         SLDataSource mSource;
     45         SLDataSink mSink;
     46         struct {
     47             DataLocator *pLocator;
     48             DataFormat *pFormat;
     49         } mNeutral;
     50     } u;
     51     DataLocator mLocator;
     52     DataFormat mFormat;
     53 } DataLocatorFormat;
     54 
     55 #define SL_DATALOCATOR_NULL 0   // application specified a NULL value for pLocator
     56                                 // (not a valid value for mLocatorType)
     57 #define XA_DATALOCATOR_NULL SL_DATALOCATOR_NULL
     58 #define SL_DATAFORMAT_NULL 0    // application specified a NULL value for pFormat
     59                                 // (not a valid value for mLocatorType)
     60 #define XA_DATAFORMAT_NULL SL_DATAFORMAT_NULL
     61 
     62 // bit masks used to configure the allowed data locators for a given data source or data sink
     63 #define DATALOCATOR_MASK_NONE            0L
     64 #define DATALOCATOR_MASK_NULL            (1L << SL_DATALOCATOR_NULL)
     65 #define DATALOCATOR_MASK_URI             (1L << SL_DATALOCATOR_URI)
     66 #define DATALOCATOR_MASK_ADDRESS         (1L << SL_DATALOCATOR_ADDRESS)
     67 #define DATALOCATOR_MASK_IODEVICE        (1L << SL_DATALOCATOR_IODEVICE)
     68 #define DATALOCATOR_MASK_OUTPUTMIX       (1L << SL_DATALOCATOR_OUTPUTMIX)
     69 #define DATALOCATOR_MASK_NATIVEDISPLAY   (1L << XA_DATALOCATOR_NATIVEDISPLAY)
     70 #define DATALOCATOR_MASK_BUFFERQUEUE     (1L << SL_DATALOCATOR_BUFFERQUEUE)
     71 #define DATALOCATOR_MASK_MIDIBUFFERQUEUE (1L << SL_DATALOCATOR_MIDIBUFFERQUEUE)
     72 #define DATALOCATOR_MASK_ANDROIDFD                \
     73                  (0x100L << (SL_DATALOCATOR_ANDROIDFD - SL_DATALOCATOR_ANDROIDFD))
     74 #define DATALOCATOR_MASK_ANDROIDSIMPLEBUFFERQUEUE \
     75                  (0x100L << (SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD))
     76 #define DATALOCATOR_MASK_ANDROIDBUFFERQUEUE       \
     77                  (0x100L << (SL_DATALOCATOR_ANDROIDBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD))
     78 #define DATALOCATOR_MASK_ALL             0x7FFL
     79 
     80 // bit masks used to configure the allowed data formats for a given data source or data sink
     81 #define DATAFORMAT_MASK_NONE             0L
     82 #define DATAFORMAT_MASK_NULL             (1L << SL_DATAFORMAT_NULL)
     83 #define DATAFORMAT_MASK_MIME             (1L << SL_DATAFORMAT_MIME)
     84 #define DATAFORMAT_MASK_PCM              (1L << SL_DATAFORMAT_PCM)
     85 #define DATAFORMAT_MASK_PCM_EX           (1L << SL_ANDROID_DATAFORMAT_PCM_EX)
     86 #define DATAFORMAT_MASK_RAWIMAGE         (1L << XA_DATAFORMAT_RAWIMAGE)
     87 #define DATAFORMAT_MASK_ALL              0xFL
     88 
     89 extern SLresult checkDataSource(const char *name, const SLDataSource *pDataSrc,
     90         DataLocatorFormat *myDataSourceLocator, SLuint32 allowedDataLocatorMask,
     91         SLuint32 allowedDataFormatMask);
     92 extern SLresult checkDataSink(const char *name, const SLDataSink *pDataSink,
     93         DataLocatorFormat *myDataSinkLocator, SLuint32 allowedDataLocatorMask,
     94         SLuint32 allowedDataFormatMask);
     95 extern SLresult checkSourceSinkVsInterfacesCompatibility(
     96         const DataLocatorFormat *pSrcDataLocatorFormat,
     97         const DataLocatorFormat *pSinkDataLocatorFormat,
     98         const ClassTable *clazz, unsigned requiredMask);
     99 extern void freeDataLocatorFormat(DataLocatorFormat *dlf);
    100 
    101 
    102 /* For stream information storage */
    103 typedef struct {
    104     XAuint32 domain;
    105     union {
    106         XAMediaContainerInformation containerInfo;
    107         XAVideoStreamInformation videoInfo;
    108         XAAudioStreamInformation audioInfo;
    109         XAImageStreamInformation imageInfo;
    110         XATimedTextStreamInformation textInfo;
    111         XAMIDIStreamInformation midiInfo;
    112         XAVendorStreamInformation vendorInfo;
    113     };
    114 } StreamInfo;
    115 
    116 // FIXME a terrible hack until OpenMAX AL spec is updated
    117 #define XA_DOMAINTYPE_CONTAINER 0
    118