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