/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef WILHELM_SRC_DATA_H
#define WILHELM_SRC_DATA_H
/* Our own merged version of SLDataSource and SLDataSink */
typedef union {
SLuint32 mLocatorType;
SLDataLocator_Address mAddress;
SLDataLocator_BufferQueue mBufferQueue;
SLDataLocator_IODevice mIODevice;
SLDataLocator_MIDIBufferQueue mMIDIBufferQueue;
SLDataLocator_OutputMix mOutputMix;
SLDataLocator_URI mURI;
XADataLocator_NativeDisplay mNativeDisplay;
#ifdef ANDROID
SLDataLocator_AndroidFD mFD;
SLDataLocator_AndroidBufferQueue mABQ;
#endif
} DataLocator;
typedef union {
SLuint32 mFormatType;
SLDataFormat_PCM mPCM;
SLAndroidDataFormat_PCM_EX mPCMEx;
SLDataFormat_MIME mMIME;
XADataFormat_RawImage mRawImage;
} DataFormat;
typedef struct {
union {
SLDataSource mSource;
SLDataSink mSink;
struct {
DataLocator *pLocator;
DataFormat *pFormat;
} mNeutral;
} u;
DataLocator mLocator;
DataFormat mFormat;
} DataLocatorFormat;
#define SL_DATALOCATOR_NULL 0 // application specified a NULL value for pLocator
// (not a valid value for mLocatorType)
#define XA_DATALOCATOR_NULL SL_DATALOCATOR_NULL
#define SL_DATAFORMAT_NULL 0 // application specified a NULL value for pFormat
// (not a valid value for mLocatorType)
#define XA_DATAFORMAT_NULL SL_DATAFORMAT_NULL
// bit masks used to configure the allowed data locators for a given data source or data sink
#define DATALOCATOR_MASK_NONE 0L
#define DATALOCATOR_MASK_NULL (1L << SL_DATALOCATOR_NULL)
#define DATALOCATOR_MASK_URI (1L << SL_DATALOCATOR_URI)
#define DATALOCATOR_MASK_ADDRESS (1L << SL_DATALOCATOR_ADDRESS)
#define DATALOCATOR_MASK_IODEVICE (1L << SL_DATALOCATOR_IODEVICE)
#define DATALOCATOR_MASK_OUTPUTMIX (1L << SL_DATALOCATOR_OUTPUTMIX)
#define DATALOCATOR_MASK_NATIVEDISPLAY (1L << XA_DATALOCATOR_NATIVEDISPLAY)
#define DATALOCATOR_MASK_BUFFERQUEUE (1L << SL_DATALOCATOR_BUFFERQUEUE)
#define DATALOCATOR_MASK_MIDIBUFFERQUEUE (1L << SL_DATALOCATOR_MIDIBUFFERQUEUE)
#define DATALOCATOR_MASK_ANDROIDFD \
(0x100L << (SL_DATALOCATOR_ANDROIDFD - SL_DATALOCATOR_ANDROIDFD))
#define DATALOCATOR_MASK_ANDROIDSIMPLEBUFFERQUEUE \
(0x100L << (SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD))
#define DATALOCATOR_MASK_ANDROIDBUFFERQUEUE \
(0x100L << (SL_DATALOCATOR_ANDROIDBUFFERQUEUE - SL_DATALOCATOR_ANDROIDFD))
#define DATALOCATOR_MASK_ALL 0x7FFL
// bit masks used to configure the allowed data formats for a given data source or data sink
#define DATAFORMAT_MASK_NONE 0L
#define DATAFORMAT_MASK_NULL (1L << SL_DATAFORMAT_NULL)
#define DATAFORMAT_MASK_MIME (1L << SL_DATAFORMAT_MIME)
#define DATAFORMAT_MASK_PCM (1L << SL_DATAFORMAT_PCM)
#define DATAFORMAT_MASK_PCM_EX (1L << SL_ANDROID_DATAFORMAT_PCM_EX)
#define DATAFORMAT_MASK_RAWIMAGE (1L << XA_DATAFORMAT_RAWIMAGE)
#define DATAFORMAT_MASK_ALL 0xFL
extern SLresult checkDataSource(const char *name, const SLDataSource *pDataSrc,
DataLocatorFormat *myDataSourceLocator, SLuint32 allowedDataLocatorMask,
SLuint32 allowedDataFormatMask);
extern SLresult checkDataSink(const char *name, const SLDataSink *pDataSink,
DataLocatorFormat *myDataSinkLocator, SLuint32 allowedDataLocatorMask,
SLuint32 allowedDataFormatMask);
extern SLresult checkSourceSinkVsInterfacesCompatibility(
const DataLocatorFormat *pSrcDataLocatorFormat,
const DataLocatorFormat *pSinkDataLocatorFormat,
const ClassTable *clazz, unsigned requiredMask);
extern void freeDataLocatorFormat(DataLocatorFormat *dlf);
/* For stream information storage */
typedef struct {
XAuint32 domain;
union {
XAMediaContainerInformation containerInfo;
XAVideoStreamInformation videoInfo;
XAAudioStreamInformation audioInfo;
XAImageStreamInformation imageInfo;
XATimedTextStreamInformation textInfo;
XAMIDIStreamInformation midiInfo;
XAVendorStreamInformation vendorInfo;
};
} StreamInfo;
// FIXME a terrible hack until OpenMAX AL spec is updated
#define XA_DOMAINTYPE_CONTAINER 0
#endif // WILHELM_SRC_DATA_H