data.h revision 4e8fe8a60c3aa8085918f15f281e0979682aefdc
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 22typedef 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 37typedef union { 38 SLuint32 mFormatType; 39 SLDataFormat_PCM mPCM; 40 SLAndroidDataFormat_PCM_EX mPCMEx; 41 SLDataFormat_MIME mMIME; 42 XADataFormat_RawImage mRawImage; 43} DataFormat; 44 45typedef 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 92extern SLresult checkDataSource(const char *name, const SLDataSource *pDataSrc, 93 DataLocatorFormat *myDataSourceLocator, SLuint32 allowedDataLocatorMask, 94 SLuint32 allowedDataFormatMask); 95extern SLresult checkDataSink(const char *name, const SLDataSink *pDataSink, 96 DataLocatorFormat *myDataSinkLocator, SLuint32 allowedDataLocatorMask, 97 SLuint32 allowedDataFormatMask); 98extern SLresult checkSourceSinkVsInterfacesCompatibility( 99 const DataLocatorFormat *pSrcDataLocatorFormat, 100 const DataLocatorFormat *pSinkDataLocatorFormat, 101 const ClassTable *clazz, unsigned requiredMask); 102extern void freeDataLocatorFormat(DataLocatorFormat *dlf); 103 104 105/* For stream information storage */ 106typedef 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