| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* Our own merged version of SLDataSource and SLDataSink */ |
| |
| typedef union { |
| SLuint32 mLocatorType; |
| SLDataLocator_Address mAddress; |
| SLDataLocator_BufferQueue mBufferQueue; |
| SLDataLocator_IODevice mIODevice; |
| SLDataLocator_MIDIBufferQueue mMIDIBufferQueue; |
| SLDataLocator_OutputMix mOutputMix; |
| SLDataLocator_URI mURI; |
| XADataLocator_NativeDisplay mNativeDisplay; |
| #ifdef ANDROID |
| SLDataLocator_AndroidFD mFD; |
| SLDataLocator_AndroidBufferQueue mABQ; |
| #endif |
| } DataLocator; |
| |
| typedef union { |
| SLuint32 mFormatType; |
| SLDataFormat_PCM mPCM; |
| SLDataFormat_MIME mMIME; |
| XADataFormat_RawImage mRawImage; |
| } DataFormat; |
| |
| typedef struct { |
| union { |
| SLDataSource mSource; |
| SLDataSink mSink; |
| struct { |
| DataLocator *pLocator; |
| DataFormat *pFormat; |
| } mNeutral; |
| } u; |
| DataLocator mLocator; |
| DataFormat mFormat; |
| } DataLocatorFormat; |
| |
| #define SL_DATALOCATOR_NULL 0 // application specified a NULL value for pLocator |
| // (not a valid value for mLocatorType) |
| #define XA_DATALOCATOR_NULL SL_DATALOCATOR_NULL |
| #define SL_DATAFORMAT_NULL 0 // application specified a NULL value for pFormat |
| // (not a valid value for mLocatorType) |
| #define XA_DATAFORMAT_NULL SL_DATAFORMAT_NULL |
| |
| // bit masks used to configure the allowed data locators for a given data source or data sink |
| #define DATALOCATOR_MASK_NONE 0L |
| #define DATALOCATOR_MASK_NULL (1L << SL_DATALOCATOR_NULL) |
| #define DATALOCATOR_MASK_URI (1L << SL_DATALOCATOR_URI) |
| #define DATALOCATOR_MASK_ADDRESS (1L << SL_DATALOCATOR_ADDRESS) |
| #define DATALOCATOR_MASK_IODEVICE (1L << SL_DATALOCATOR_IODEVICE) |
| #define DATALOCATOR_MASK_OUTPUTMIX (1L << SL_DATALOCATOR_OUTPUTMIX) |
| #define DATALOCATOR_MASK_NATIVEDISPLAY (1L << XA_DATALOCATOR_NATIVEDISPLAY) |
| #define DATALOCATOR_MASK_BUFFERQUEUE (1L << SL_DATALOCATOR_BUFFERQUEUE) |
| #define DATALOCATOR_MASK_MIDIBUFFERQUEUE (1L << SL_DATALOCATOR_MIDIBUFFERQUEUE) |
| #define DATALOCATOR_MASK_ANDROIDFD \ |
| (0x100L << (SL_DATALOCATOR_ANDROIDFD - SL_DATALOCATOR_ANDROIDFD)) |
| #define DATALOCATOR_MASK_ANDROIDSIMPLEBUFFERQUEUE \ |
| (0x100L << (SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD)) |
| #define DATALOCATOR_MASK_ANDROIDBUFFERQUEUE \ |
| (0x100L << (SL_DATALOCATOR_ANDROIDBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD)) |
| #define DATALOCATOR_MASK_ALL 0x7FFL |
| |
| // bit masks used to configure the allowed data formats for a given data source or data sink |
| #define DATAFORMAT_MASK_NONE 0L |
| #define DATAFORMAT_MASK_NULL (1L << SL_DATAFORMAT_NULL) |
| #define DATAFORMAT_MASK_MIME (1L << SL_DATAFORMAT_MIME) |
| #define DATAFORMAT_MASK_PCM (1L << SL_DATAFORMAT_PCM) |
| #define DATAFORMAT_MASK_RAWIMAGE (1L << XA_DATAFORMAT_RAWIMAGE) |
| #define DATAFORMAT_MASK_ALL 0xFL |
| |
| extern SLresult checkDataSource(const char *name, const SLDataSource *pDataSrc, |
| DataLocatorFormat *myDataSourceLocator, SLuint32 allowedDataLocatorMask, |
| SLuint32 allowedDataFormatMask); |
| extern SLresult checkDataSink(const char *name, const SLDataSink *pDataSink, |
| DataLocatorFormat *myDataSinkLocator, SLuint32 allowedDataLocatorMask, |
| SLuint32 allowedDataFormatMask); |
| extern SLresult checkSourceSinkVsInterfacesCompatibility( |
| const DataLocatorFormat *pSrcDataLocatorFormat, |
| const DataLocatorFormat *pSinkDataLocatorFormat, |
| const ClassTable *clazz, unsigned requiredMask); |
| extern void freeDataLocatorFormat(DataLocatorFormat *dlf); |
| |
| |
| /* For stream information storage */ |
| typedef struct { |
| XAuint32 domain; |
| union { |
| XAMediaContainerInformation containerInfo; |
| XAVideoStreamInformation videoInfo; |
| XAAudioStreamInformation audioInfo; |
| XAImageStreamInformation imageInfo; |
| XATimedTextStreamInformation textInfo; |
| XAMIDIStreamInformation midiInfo; |
| XAVendorStreamInformation vendorInfo; |
| }; |
| } StreamInfo; |
| |
| // FIXME a terrible hack until OpenMAX AL spec is updated |
| #define XA_DOMAINTYPE_CONTAINER 0 |