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