data.h revision 94a37e8117fb72790882dfb815f99e2365754c74
1cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*
2cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Copyright (C) 2010 The Android Open Source Project
3cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
4cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * you may not use this file except in compliance with the License.
6cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * You may obtain a copy of the License at
7cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
8cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
10cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Unless required by applicable law or agreed to in writing, software
11cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * See the License for the specific language governing permissions and
14cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * limitations under the License.
15cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */
16cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
17cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/* Our own merged version of SLDataSource and SLDataSink */
18cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
19cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef union {
20cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mLocatorType;
21cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_Address mAddress;
22cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_BufferQueue mBufferQueue;
23cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_IODevice mIODevice;
24cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_MIDIBufferQueue mMIDIBufferQueue;
25cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_OutputMix mOutputMix;
26cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_URI mURI;
278b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XADataLocator_NativeDisplay mNativeDisplay;
28cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
29cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_AndroidFD mFD;
30cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataLocator_AndroidBufferQueue mBQ;
31cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
32cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} DataLocator;
33cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
34cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef union {
35cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mFormatType;
36cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataFormat_PCM mPCM;
37cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLDataFormat_MIME mMIME;
388b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XADataFormat_RawImage mRawImage;
39cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} DataFormat;
40cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
41cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct {
42cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    union {
43cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten        SLDataSource mSource;
44cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten        SLDataSink mSink;
45cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten        struct {
46cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten            DataLocator *pLocator;
47cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten            DataFormat *pFormat;
48cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten        } mNeutral;
49cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    } u;
50cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    DataLocator mLocator;
51cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    DataFormat mFormat;
52cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} DataLocatorFormat;
5394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
5494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define SL_DATALOCATOR_NULL 0    // application specified a NULL value for pLocator
5594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define SL_DATAFORMAT_NULL 0     // application specified a NULL or undefined value for pFormat
5694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
5794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten// bit masks used to configure the allowed data locators for a given data source or data sink
5894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_NONE            0L
5994a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_NULL            (1L << SL_DATALOCATOR_NULL)
6094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_URI             (1L << SL_DATALOCATOR_URI)
6194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_ADDRESS         (1L << SL_DATALOCATOR_ADDRESS)
6294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_IODEVICE        (1L << SL_DATALOCATOR_IODEVICE)
6394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_OUTPUTMIX       (1L << SL_DATALOCATOR_OUTPUTMIX)
6494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_NATIVEDISPLAY   (1L << XA_DATALOCATOR_NATIVEDISPLAY)
6594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_BUFFERQUEUE     (1L << SL_DATALOCATOR_BUFFERQUEUE)
6694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_MIDIBUFFERQUEUE (1L << SL_DATALOCATOR_MIDIBUFFERQUEUE)
6794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_ANDROIDFD                \
6894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten                 (0x100L << (SL_DATALOCATOR_ANDROIDFD - SL_DATALOCATOR_ANDROIDFD))
6994a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_ANDROIDSIMPLEBUFFERQUEUE \
7094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten                 (0x100L << (SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD))
7194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_ANDROIDBUFFERQUEUE       \
7294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten                 (0x100L << (SL_DATALOCATOR_ANDROIDBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD))
7394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATALOCATOR_MASK_ALL             0x7FFL
7494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
7594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten// bit masks used to configure the allowed data formats for a given data source or data sink
7694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATAFORMAT_MASK_NONE             0L
7794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATAFORMAT_MASK_NULL             (1L << SL_DATAFORMAT_NULL)
7894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATAFORMAT_MASK_MIME             (1L << SL_DATAFORMAT_MIME)
7994a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATAFORMAT_MASK_PCM              (1L << SL_DATAFORMAT_PCM)
8094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATAFORMAT_MASK_RAWIMAGE         (1L << XA_DATAFORMAT_RAWIMAGE)
8194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#define DATAFORMAT_MASK_ALL              0xFL
8294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
8394a37e8117fb72790882dfb815f99e2365754c74Glenn Kastenextern SLresult checkDataSource(const char *name, const SLDataSource *pDataSrc,
8494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        DataLocatorFormat *myDataSourceLocator, SLuint32 allowedDataLocatorMask,
8594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        SLuint32 allowedDataFormatMask);
8694a37e8117fb72790882dfb815f99e2365754c74Glenn Kastenextern SLresult checkDataSink(const char *name, const SLDataSink *pDataSink,
8794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        DataLocatorFormat *myDataSinkLocator, SLuint32 allowedDataLocatorMask,
8894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        SLuint32 allowedDataFormatMask);
8994a37e8117fb72790882dfb815f99e2365754c74Glenn Kastenextern SLresult checkSourceFormatVsInterfacesCompatibility(
9094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        const DataLocatorFormat *pDataLocatorFormat, const ClassTable *class__,
9194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        unsigned exposedMask);
9294a37e8117fb72790882dfb815f99e2365754c74Glenn Kastenextern void freeDataLocatorFormat(DataLocatorFormat *dlf);
93