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