134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten/* 234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * 434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * you may not use this file except in compliance with the License. 634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * You may obtain a copy of the License at 734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * 834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * 1034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * Unless required by applicable law or agreed to in writing, software 1134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 1234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * See the License for the specific language governing permissions and 1434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * limitations under the License. 1534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten */ 1634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten 1734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten/* Our own merged version of SLDataSource and SLDataSink */ 1834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten 1934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastentypedef union { 2034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLuint32 mLocatorType; 2134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_Address mAddress; 2234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_BufferQueue mBufferQueue; 2334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_IODevice mIODevice; 2434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_MIDIBufferQueue mMIDIBufferQueue; 2534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_OutputMix mOutputMix; 2634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_URI mURI; 270ed2690aa6d6a41a653713e7a961c1a7d0cd6cfbGlenn Kasten XADataLocator_NativeDisplay mNativeDisplay; 2834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#ifdef ANDROID 2934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataLocator_AndroidFD mFD; 30f65b260193e5ca669ec4479a7e1c4517e18cc6b0Jean-Michel Trivi SLDataLocator_AndroidBufferQueue mABQ; 3134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#endif 3234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten} DataLocator; 3334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten 3434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastentypedef union { 3534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLuint32 mFormatType; 3634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataFormat_PCM mPCM; 3734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataFormat_MIME mMIME; 380ed2690aa6d6a41a653713e7a961c1a7d0cd6cfbGlenn Kasten XADataFormat_RawImage mRawImage; 3934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten} DataFormat; 4034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten 4134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastentypedef struct { 4234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten union { 4334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataSource mSource; 4434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten SLDataSink mSink; 4534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten struct { 4634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten DataLocator *pLocator; 4734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten DataFormat *pFormat; 4834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten } mNeutral; 4934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten } u; 5034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten DataLocator mLocator; 5134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten DataFormat mFormat; 5234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten} DataLocatorFormat; 53da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten 54e155630f0eb0fc1bb6a8fbe218c517e7bf82eaebGlenn Kasten#define SL_DATALOCATOR_NULL 0 // application specified a NULL value for pLocator 55e155630f0eb0fc1bb6a8fbe218c517e7bf82eaebGlenn Kasten // (not a valid value for mLocatorType) 56f65b260193e5ca669ec4479a7e1c4517e18cc6b0Jean-Michel Trivi#define XA_DATALOCATOR_NULL SL_DATALOCATOR_NULL 57e155630f0eb0fc1bb6a8fbe218c517e7bf82eaebGlenn Kasten#define SL_DATAFORMAT_NULL 0 // application specified a NULL value for pFormat 58e155630f0eb0fc1bb6a8fbe218c517e7bf82eaebGlenn Kasten // (not a valid value for mLocatorType) 59f65b260193e5ca669ec4479a7e1c4517e18cc6b0Jean-Michel Trivi#define XA_DATAFORMAT_NULL SL_DATAFORMAT_NULL 60da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten 61da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten// bit masks used to configure the allowed data locators for a given data source or data sink 62da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_NONE 0L 63da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_NULL (1L << SL_DATALOCATOR_NULL) 64da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_URI (1L << SL_DATALOCATOR_URI) 65da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_ADDRESS (1L << SL_DATALOCATOR_ADDRESS) 66da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_IODEVICE (1L << SL_DATALOCATOR_IODEVICE) 67da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_OUTPUTMIX (1L << SL_DATALOCATOR_OUTPUTMIX) 68da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_NATIVEDISPLAY (1L << XA_DATALOCATOR_NATIVEDISPLAY) 69da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_BUFFERQUEUE (1L << SL_DATALOCATOR_BUFFERQUEUE) 70da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_MIDIBUFFERQUEUE (1L << SL_DATALOCATOR_MIDIBUFFERQUEUE) 71da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_ANDROIDFD \ 72da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten (0x100L << (SL_DATALOCATOR_ANDROIDFD - SL_DATALOCATOR_ANDROIDFD)) 73da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_ANDROIDSIMPLEBUFFERQUEUE \ 74da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten (0x100L << (SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD)) 75da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_ANDROIDBUFFERQUEUE \ 76da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten (0x100L << (SL_DATALOCATOR_ANDROIDBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD)) 77da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATALOCATOR_MASK_ALL 0x7FFL 78da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten 79da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten// bit masks used to configure the allowed data formats for a given data source or data sink 80da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATAFORMAT_MASK_NONE 0L 81da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATAFORMAT_MASK_NULL (1L << SL_DATAFORMAT_NULL) 82da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATAFORMAT_MASK_MIME (1L << SL_DATAFORMAT_MIME) 83da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATAFORMAT_MASK_PCM (1L << SL_DATAFORMAT_PCM) 84da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATAFORMAT_MASK_RAWIMAGE (1L << XA_DATAFORMAT_RAWIMAGE) 85da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten#define DATAFORMAT_MASK_ALL 0xFL 86da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten 87da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kastenextern SLresult checkDataSource(const char *name, const SLDataSource *pDataSrc, 88da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten DataLocatorFormat *myDataSourceLocator, SLuint32 allowedDataLocatorMask, 89da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten SLuint32 allowedDataFormatMask); 90da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kastenextern SLresult checkDataSink(const char *name, const SLDataSink *pDataSink, 91da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten DataLocatorFormat *myDataSinkLocator, SLuint32 allowedDataLocatorMask, 92da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kasten SLuint32 allowedDataFormatMask); 9335a8be5a36093fe6b401bb11d6e61ffe724fb1adGlenn Kastenextern SLresult checkSourceSinkVsInterfacesCompatibility( 9435a8be5a36093fe6b401bb11d6e61ffe724fb1adGlenn Kasten const DataLocatorFormat *pSrcDataLocatorFormat, 9535a8be5a36093fe6b401bb11d6e61ffe724fb1adGlenn Kasten const DataLocatorFormat *pSinkDataLocatorFormat, 964d09a0398246d352006db429fca6ea0d3cc17d65Glenn Kasten const ClassTable *clazz, unsigned requiredMask); 97da97f083b47fa4442a40ad962ed86a922a537a64Glenn Kastenextern void freeDataLocatorFormat(DataLocatorFormat *dlf); 98871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 99871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 100871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi/* For stream information storage */ 101871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivitypedef struct { 102871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 domain; 103871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi union { 104871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAMediaContainerInformation containerInfo; 105871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAVideoStreamInformation videoInfo; 106871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAAudioStreamInformation audioInfo; 107871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAImageStreamInformation imageInfo; 108871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XATimedTextStreamInformation textInfo; 109871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAMIDIStreamInformation midiInfo; 110fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi XAVendorStreamInformation vendorInfo; 111871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi }; 112871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} StreamInfo; 113fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 114fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi// FIXME a terrible hack until OpenMAX AL spec is updated 115fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi#define XA_DOMAINTYPE_CONTAINER 0 116