--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/khronosfws/openmax_al/src/engine/xaaudioiodevicecapabilitiesitf.c Tue Aug 31 15:43:02 2010 +0300
@@ -0,0 +1,738 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Audio IO Device capabilities Itf
+*
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include "xaglobals.h"
+#include "xaaudioiodevicecapabilitiesitf.h"
+#include "xacapabilitiesmgr.h"
+
+
+/* XAAudIODevCapaItfImpl* GetImpl
+ * Description: Validate interface pointer and cast it to implementation pointer.
+ */
+static XAAudIODevCapaItfImpl* GetImpl(XAAudioIODeviceCapabilitiesItf self)
+{
+ if( self )
+ {
+ XAAudIODevCapaItfImpl* impl = (XAAudIODevCapaItfImpl*)(*self);
+ if( impl && (impl == impl->self) )
+ {
+ return impl;
+ }
+ }
+ return NULL;
+}
+
+/**
+ * Base interface XAAudioIODeviceCapabilitiesItf implementation
+ **/
+
+/* XAresult XAAudIODevCapaItfImpl_GetAvailableAudioInputs
+ * Description: Gets the number and IDs of audio input devices currently available.
+ */
+XAresult XAAudIODevCapaItfImpl_GetAvailableAudioInputs(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAint32* pNumInputs,
+ XAuint32* pInputDeviceIDs)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_GetAvailableAudioInputs");
+
+ if( !impl || !pNumInputs )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ if( pInputDeviceIDs )
+ { /* query array of input devices */
+ if( *pNumInputs < impl->numInputDevices )
+ {
+ DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT");
+ res = XA_RESULT_BUFFER_INSUFFICIENT;
+ }
+ else
+ {
+ XAuint32 i;
+ XACapabilities temp;
+ for( i=0; i<impl->numInputDevices; i++ )
+ {
+ /* query device id from adaptation using index value */
+ res = XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_DEVSRC|XACAP_AUDIO), i, &temp);
+ pInputDeviceIDs[i] = temp.xaid;
+ }
+
+ pInputDeviceIDs[0] = 0xAD7E5001;
+ }
+ }
+ *pNumInputs = impl->numInputDevices;
+ }
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetAvailableAudioInputs");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_QueryAudioInputCapabilities
+ * Description: Gets the capabilities of the specified audio input device.
+ */
+XAresult XAAudIODevCapaItfImpl_QueryAudioInputCapabilities(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAuint32 deviceId,
+ XAAudioInputDescriptor* pDescriptor)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XACapabilities temp;
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_QueryAudioInputCapabilities");
+
+ if( !impl || !pDescriptor )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ memset(pDescriptor,0,sizeof(XAAudioInputDescriptor));
+
+ /* query capabilities from adaptation using device id */
+
+
+ res = XACapabilitiesMgr_GetCapsById(impl->capslist, (XACapsType)(XACAP_DEVSRC|XACAP_AUDIO), deviceId, &temp);
+ if( res == XA_RESULT_SUCCESS )
+ {
+ XAAudioInputDescriptor* desc = ((XAAudioInputDescriptor*)(temp.pEntry));
+ /* map applicable values to XAAudioCodecCapabilities */
+ pDescriptor->maxChannels=desc->maxChannels;
+ pDescriptor->minSampleRate=desc->minSampleRate; /* milliHz */
+ if (desc->maxSampleRate < (0xFFFFFFFF ))
+ {
+ pDescriptor->maxSampleRate = desc->maxSampleRate;
+ }
+ else
+ {
+ pDescriptor->maxSampleRate = 0xFFFFFFFF;
+ }
+ pDescriptor->isFreqRangeContinuous=desc->isFreqRangeContinuous;
+ pDescriptor->deviceConnection = desc->deviceConnection;
+ pDescriptor->deviceScope = desc->deviceScope;
+ pDescriptor->deviceLocation = desc->deviceLocation;
+ pDescriptor->deviceName = desc->deviceName;
+ /* other caps undefined */
+ pDescriptor->isForTelephony = desc->isForTelephony;
+ pDescriptor->samplingRatesSupported = desc->samplingRatesSupported;
+ pDescriptor->numOfSamplingRatesSupported = desc->numOfSamplingRatesSupported;
+ }
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_QueryAudioInputCapabilities");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_RegisterAvailableAudioInputsChangedCallback
+ * Description: Sets or clears xaAvailableAudioInputsChangedCallback().
+ */
+XAresult XAAudIODevCapaItfImpl_RegisterAvailableAudioInputsChangedCallback(
+ XAAudioIODeviceCapabilitiesItf self,
+ xaAvailableAudioInputsChangedCallback callback,
+ void* pContext)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+
+ DEBUG_API("->XAAudIODevCapaItfImpl_RegisterAvailableAudioInputsChangedCallback");
+
+ if( !impl )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ impl->inputCb = callback;
+ impl->inputCbCtx = pContext;
+ impl->inputCbPtrToSelf = self;
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_RegisterAvailableAudioInputsChangedCallback");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_GetAvailableAudioOutputs
+ * Description: Gets the number and IDs of audio output devices currently available.
+ */
+XAresult XAAudIODevCapaItfImpl_GetAvailableAudioOutputs(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAint32* pNumOutputs,
+ XAuint32* pOutputDeviceIDs)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+
+ DEBUG_API("->XAAudIODevCapaItfImpl_GetAvailableAudioOutputs");
+
+ /* NOTE: only default speaker supported by this impl */
+ if( !impl || !pNumOutputs )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ if( pOutputDeviceIDs )
+ { /* query array of output devices */
+ if( *pNumOutputs < impl->numOutputDevices )
+ {
+ DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT");
+ res = XA_RESULT_BUFFER_INSUFFICIENT;
+ }
+ else
+ {
+
+
+ XAuint32 i = 0;
+ XACapabilities temp;
+ for( i=0; i<impl->numOutputDevices; i++ )
+ {
+ /* query device id from adaptation using index value */
+ res = XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_DEVSNK|XACAP_AUDIO), i, &temp);
+ pOutputDeviceIDs[i] = temp.xaid;
+ }
+
+ pOutputDeviceIDs[0] = 0xAD7E5002;
+ }
+ }
+ *pNumOutputs = impl->numOutputDevices;
+ }
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetAvailableAudioOutputs");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_QueryAudioOutputCapabilities
+ * Description: Gets the capabilities of the specified audio output device.
+ */
+XAresult XAAudIODevCapaItfImpl_QueryAudioOutputCapabilities(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAuint32 deviceId,
+ XAAudioOutputDescriptor* pDescriptor)
+{
+
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ XACapabilities temp;
+ DEBUG_API("->XAAudIODevCapaItfImpl_QueryAudioOutputCapabilities");
+
+ if( !impl || !pDescriptor )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ memset(pDescriptor,0,sizeof(XAAudioOutputDescriptor));
+ /* query capabilities from adaptation using device id */
+
+
+
+ res = XACapabilitiesMgr_GetCapsById(impl->capslist, (XACapsType)(XACAP_DEVSNK|XACAP_AUDIO), deviceId, &temp);
+ if( res == XA_RESULT_SUCCESS )
+ {
+ XAAudioOutputDescriptor* desc = ((XAAudioOutputDescriptor*)(temp.pEntry));
+ /* map applicable values to XAAudioCodecCapabilities */
+ pDescriptor->maxChannels=desc->maxChannels;
+ pDescriptor->minSampleRate=desc->minSampleRate; /* milliHz */
+ if (desc->maxSampleRate < (0xFFFFFFFF))
+ {
+ pDescriptor->maxSampleRate = desc->maxSampleRate;
+ }
+ else
+ {
+ pDescriptor->maxSampleRate = 0xFFFFFFFF;
+ }
+ pDescriptor->isFreqRangeContinuous=desc->isFreqRangeContinuous;
+ pDescriptor->deviceConnection = desc->deviceConnection;
+ pDescriptor->deviceScope = desc->deviceScope;
+ pDescriptor->deviceLocation = desc->deviceLocation;
+ pDescriptor->pDeviceName = desc->pDeviceName;
+ /* other caps undefined */
+ pDescriptor->isForTelephony = desc->isForTelephony;
+ pDescriptor->samplingRatesSupported = desc->samplingRatesSupported;
+ pDescriptor->numOfSamplingRatesSupported = desc->numOfSamplingRatesSupported;
+ }
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_QueryAudioOutputCapabilities");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_RegisterAvailableAudioOutputsChangedCallback
+ * Description: Sets or clears xaAvailableAudioOutputsChangedCallback().
+ */
+XAresult XAAudIODevCapaItfImpl_RegisterAvailableAudioOutputsChangedCallback(
+ XAAudioIODeviceCapabilitiesItf self,
+ xaAvailableAudioOutputsChangedCallback callback,
+ void* pContext)
+{
+
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_RegisterAvailableAudioOutputsChangedCallback");
+
+ if( !impl )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ impl->outputCb = callback;
+ impl->outputCbCtx = pContext;
+ impl->outputCbPtrToSelf = self;
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_RegisterAvailableAudioOutputsChangedCallback");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_RegisterDefaultDeviceIDMapChangedCallback
+ * Description: Sets or clears xaDefaultDeviceIDMapChangedCallback().
+ */
+XAresult XAAudIODevCapaItfImpl_RegisterDefaultDeviceIDMapChangedCallback(
+ XAAudioIODeviceCapabilitiesItf self,
+ xaDefaultDeviceIDMapChangedCallback callback,
+ void* pContext)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+
+ DEBUG_API("->XAAudIODevCapaItfImpl_RegisterDefaultDeviceIDMapChangedCallback");
+
+ if( !impl )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ impl->deviceMapCb = callback;
+ impl->deviceMapCtx = pContext;
+ impl->deviceMapCbPtrToSelf = self;
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_RegisterDefaultDeviceIDMapChangedCallback");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_GetAssociatedAudioInputs
+ * Description: This method returns an array of audio input devices physically
+ * associated with this audio I/O device.
+ */
+XAresult XAAudIODevCapaItfImpl_GetAssociatedAudioInputs(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAuint32 deviceId,
+ XAint32* pNumAudioInputs,
+ XAuint32* pAudioInputDeviceIDs)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_GetAssociatedAudioInputs");
+ if( !impl || !pNumAudioInputs )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+
+ XACapabilities temp;
+ XAuint32 associatedCount = 0;
+
+ XAuint32 i = 0;
+ for( i=0; i<impl->numInputDevices; i++ )
+ {
+ /* query device id from adaptation using index value */
+ res = XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_DEVSRC|XACAP_AUDIO), i, &temp);
+ if (temp.xaid != deviceId)
+ {
+ associatedCount++;
+ }
+ }
+
+ if (pAudioInputDeviceIDs)
+ {
+ if( *pNumAudioInputs < associatedCount )
+ {
+ DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT");
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetAssociatedAudioInputs");
+ return XA_RESULT_BUFFER_INSUFFICIENT;
+ }
+
+ for( i=0, associatedCount = 0; i<impl->numInputDevices; i++ )
+ {
+ /* query device id from adaptation using index value */
+ res = XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_DEVSRC|XACAP_AUDIO), i, &temp);
+ if (temp.xaid != deviceId)
+ {
+ pAudioInputDeviceIDs[associatedCount++] = temp.xaid;
+ }
+ }
+ }
+
+ *pNumAudioInputs = associatedCount;
+
+
+ if(!pAudioInputDeviceIDs)
+ {
+ switch(deviceId)
+ {
+ case 0xAD7E5001:
+ *pNumAudioInputs = 0;
+ break;
+ case 0xAD7E5002:
+ *pNumAudioInputs = 1;
+ break;
+ default:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ }
+ }
+ else
+ {
+ switch(deviceId)
+ {
+ case 0xAD7E5001:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ case 0xAD7E5002:
+ pAudioInputDeviceIDs[*pNumAudioInputs - 1] = 0xAD7E5001;
+ break;
+ default:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ }
+ }
+
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetAssociatedAudioInputs");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs
+ * Description: This method returns an array of audio output devices physically
+ * associated with this audio I/O device.
+ */
+XAresult XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAuint32 deviceId,
+ XAint32* pNumAudioOutputs,
+ XAuint32* pAudioOutputDeviceIDs)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs");
+
+ if( !impl || !pNumAudioOutputs )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+
+ XACapabilities temp;
+ XAuint32 associatedCount = 0;
+
+ XAuint32 i = 0;
+ for( i=0; i<impl->numOutputDevices; i++ )
+ {
+ /* query device id from adaptation using index value */
+ res = XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_DEVSNK|XACAP_AUDIO), i, &temp);
+ if (temp.xaid != deviceId)
+ {
+ associatedCount++;
+ }
+ }
+
+ if (pAudioOutputDeviceIDs)
+ {
+ if( *pNumAudioOutputs < associatedCount )
+ {
+ DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT");
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs");
+ return XA_RESULT_BUFFER_INSUFFICIENT;
+ }
+
+ for( i=0, associatedCount = 0; i<impl->numOutputDevices; i++ )
+ {
+ /* query device id from adaptation using index value */
+ res = XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_DEVSNK|XACAP_AUDIO), i, &temp);
+ if (temp.xaid != deviceId)
+ {
+ pAudioOutputDeviceIDs[associatedCount++] = temp.xaid;
+ }
+ }
+ }
+
+ *pNumAudioOutputs = associatedCount;
+
+
+ if(!pAudioOutputDeviceIDs)
+ {
+ switch(deviceId)
+ {
+ case 0xAD7E5002:
+ *pNumAudioOutputs = 0;
+ break;
+ case 0xAD7E5001:
+ *pNumAudioOutputs = 1;
+ break;
+ default:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ }
+ }
+ else
+ {
+ switch(deviceId)
+ {
+ case 0xAD7E5002:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ case 0xAD7E5001:
+ pAudioOutputDeviceIDs[*pNumAudioOutputs - 1] = 0xAD7E5001;
+ break;
+ default:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ }
+ }
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_GetDefaultAudioDevices
+ * Gets the number of audio devices currently mapped to the given default device ID.
+ */
+XAresult XAAudIODevCapaItfImpl_GetDefaultAudioDevices(XAAudioIODeviceCapabilitiesItf self,
+ XAuint32 defaultDeviceID,
+ XAint32 *pNumAudioDevices,
+ XAuint32 *pAudioDeviceIDs)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_GetDefaultAudioDevices");
+
+ if( !impl || !pNumAudioDevices )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+ if(!pAudioDeviceIDs)
+ {
+ switch(defaultDeviceID)
+ {
+ case XA_DEFAULTDEVICEID_AUDIOOUTPUT:
+ *pNumAudioDevices = 1;
+ break;
+ case XA_DEFAULTDEVICEID_AUDIOINPUT :
+ *pNumAudioDevices = 1;
+ break;
+ default:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ }
+ }
+ else
+ {
+ switch(defaultDeviceID)
+ {
+ case XA_DEFAULTDEVICEID_AUDIOOUTPUT:
+ pAudioDeviceIDs[*pNumAudioDevices - 1] = 0xAD7E5002;
+ break;
+ case XA_DEFAULTDEVICEID_AUDIOINPUT:
+ pAudioDeviceIDs[*pNumAudioDevices - 1] = 0xAD7E5001;
+ break;
+ default:
+ res = XA_RESULT_PARAMETER_INVALID;
+ break;
+ }
+ }
+
+ }
+ DEBUG_API("<-XAAudIODevCapaItfImpl_GetDefaultAudioDevices");
+ return res;
+}
+
+/* XAresult XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs
+ * Description: Gets an array of sample formats supported by the audio I/O
+ * device for the given sampling rate.
+ */
+XAresult XAAudIODevCapaItfImpl_QuerySampleFormatsSupported(
+ XAAudioIODeviceCapabilitiesItf self,
+ XAuint32 deviceId,
+ XAmilliHertz samplingRate,
+ XAint32* pSampleFormats,
+ XAint32* pNumOfSampleFormats)
+{
+ XAAudIODevCapaItfImpl* impl = GetImpl(self);
+ XAresult res = XA_RESULT_SUCCESS;
+ DEBUG_API("->XAAudIODevCapaItfImpl_QuerySampleFormatsSupported");
+
+ if( !impl || !pNumOfSampleFormats )
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
+ res = XA_RESULT_PARAMETER_INVALID;
+ }
+ else
+ {
+
+/* XACapabilities temp;
+ res = XACapabilitiesMgr_GetCapsById(NULL, (XACapsType)(XACAP_DEVSNK|XACAP_AUDIO),
+ deviceId, &temp);
+ deviceid can be either input or output
+ if( res == XA_RESULT_FEATURE_UNSUPPORTED )
+ {
+ res = XACapabilitiesMgr_GetCapsById(NULL, (XACapsType)(XACAP_DEVSRC|XACAP_AUDIO),
+ deviceId, &temp);
+ }
+ if( res == XA_RESULT_SUCCESS )
+ {
+ XAAudioOutputDescriptor* desc = ((XAAudioOutputDescriptor*)(temp.pEntry));
+ XAuint32 count = 0, i = 0;
+ for (i=0; i < sizeof(temp.pcmProfilesSupported)*8; i++)
+ count+=temp.pcmProfilesSupported>>i&0x1;
+
+ if(pSampleFormats)
+ {
+ if(*pNumOfSampleFormats<count)
+ {
+ res = XA_RESULT_BUFFER_INSUFFICIENT;
+ }
+ else
+ {
+ XAuint32 insertCount = 0;
+ if (temp.pcmProfilesSupported & XA_ADAPT_PCMSAMPLEFORMAT_SUPPORTED_8) {
+ pSampleFormats[insertCount++] = XA_PCMSAMPLEFORMAT_FIXED_8; }
+ if (temp.pcmProfilesSupported & XA_ADAPT_PCMSAMPLEFORMAT_SUPPORTED_16) {
+ pSampleFormats[insertCount++] = XA_PCMSAMPLEFORMAT_FIXED_16; }
+ if (temp.pcmProfilesSupported & XA_ADAPT_PCMSAMPLEFORMAT_SUPPORTED_20) {
+ pSampleFormats[insertCount++] = XA_PCMSAMPLEFORMAT_FIXED_20; }
+ if (temp.pcmProfilesSupported & XA_ADAPT_PCMSAMPLEFORMAT_SUPPORTED_24) {
+ pSampleFormats[insertCount++] = XA_PCMSAMPLEFORMAT_FIXED_20; }
+ if (temp.pcmProfilesSupported & XA_ADAPT_PCMSAMPLEFORMAT_SUPPORTED_28) {
+ pSampleFormats[insertCount++] = XA_PCMSAMPLEFORMAT_FIXED_20; }
+ if (temp.pcmProfilesSupported & XA_ADAPT_PCMSAMPLEFORMAT_SUPPORTED_32) {
+ pSampleFormats[insertCount++] = XA_PCMSAMPLEFORMAT_FIXED_20; }
+ }
+ }
+ *pNumOfSampleFormats = count;
+ }*/
+
+
+ if(!pSampleFormats)
+ {
+ *pNumOfSampleFormats = 1;
+ }
+ else
+ {
+ pSampleFormats[*pNumOfSampleFormats - 1] = XA_PCMSAMPLEFORMAT_FIXED_16;
+ }
+
+ }
+
+ DEBUG_API("<-XAAudIODevCapaItfImpl_QuerySampleFormatsSupported");
+ return res;
+}
+
+/**
+ * XAAudIODevCapaItfImpl -specific methods
+ **/
+
+/* XAAudIODevCapaItfImpl_Create
+ * Description: Allocate and initialize XAAudIODevCapaItfImpl
+ */
+XAAudIODevCapaItfImpl* XAAudIODevCapaItfImpl_Create(XACapabilities* caps)
+{
+ XAAudIODevCapaItfImpl* self = (XAAudIODevCapaItfImpl*)
+ calloc(1,sizeof(XAAudIODevCapaItfImpl));
+ DEBUG_API("->XAAudIODevCapaItfImpl_Create");
+
+ if( self )
+ {
+ /* init itf default implementation */
+ self->itf.GetAssociatedAudioInputs =
+ XAAudIODevCapaItfImpl_GetAssociatedAudioInputs;
+ self->itf.GetAssociatedAudioOutputs =
+ XAAudIODevCapaItfImpl_GetAssociatedAudioOutputs;
+ self->itf.GetAvailableAudioInputs =
+ XAAudIODevCapaItfImpl_GetAvailableAudioInputs;
+ self->itf.GetAvailableAudioOutputs =
+ XAAudIODevCapaItfImpl_GetAvailableAudioOutputs;
+ self->itf.QueryAudioInputCapabilities =
+ XAAudIODevCapaItfImpl_QueryAudioInputCapabilities;
+ self->itf.QueryAudioOutputCapabilities =
+ XAAudIODevCapaItfImpl_QueryAudioOutputCapabilities;
+ self->itf.GetDefaultAudioDevices =
+ XAAudIODevCapaItfImpl_GetDefaultAudioDevices;
+ self->itf.QuerySampleFormatsSupported =
+ XAAudIODevCapaItfImpl_QuerySampleFormatsSupported;
+ self->itf.RegisterAvailableAudioInputsChangedCallback =
+ XAAudIODevCapaItfImpl_RegisterAvailableAudioInputsChangedCallback;
+ self->itf.RegisterAvailableAudioOutputsChangedCallback =
+ XAAudIODevCapaItfImpl_RegisterAvailableAudioOutputsChangedCallback;
+ self->itf.RegisterDefaultDeviceIDMapChangedCallback =
+ XAAudIODevCapaItfImpl_RegisterDefaultDeviceIDMapChangedCallback;
+ self->capslist = caps;
+ /* init variables */
+ XACapabilitiesMgr_GetCapsCount( caps, (XACapsType)(XACAP_DEVSNK|XACAP_AUDIO),
+ &(self->numOutputDevices) );
+ XACapabilitiesMgr_GetCapsCount( caps, (XACapsType)(XACAP_DEVSRC|XACAP_AUDIO),
+ &(self->numInputDevices) );
+
+ /*TODO: Remove this later*/
+ XACapabilitiesMgr_QueryColorFormats(caps, NULL, NULL);
+
+ self->inputCbPtrToSelf = NULL;
+ self->outputCbPtrToSelf = NULL;
+ self->deviceMapCbPtrToSelf = NULL;
+ self->numInputDevices = 1;
+ self->numOutputDevices = 1;
+ self->self = self;
+ }
+ DEBUG_API("<-XAAudIODevCapaItfImpl_Create");
+ return self;
+}
+
+/* void XAAudIODevCapaItfImpl_Free
+ * Description: Free all resources reserved at XAAudIODevCapaItfImpl_Create
+ */
+void XAAudIODevCapaItfImpl_Free(XAAudIODevCapaItfImpl* self)
+{
+ DEBUG_API("->XAAudIODevCapaItfImpl_Free");
+ assert(self==self->self);
+ free(self);
+ DEBUG_API("<-XAAudIODevCapaItfImpl_Free");
+}