123b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten/* 223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 323b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * 423b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * you may not use this file except in compliance with the License. 623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * You may obtain a copy of the License at 723b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * 823b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * 1023b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * Unless required by applicable law or agreed to in writing, software 1123b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 1223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1323b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * See the License for the specific language governing permissions and 1423b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten * limitations under the License. 1523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten */ 1623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten 1723b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten/* AudioEncoderCapabilities implementation */ 1823b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten 1923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten#include "sles_allinclusive.h" 2023b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten 21f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 22437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kastenstatic SLresult IAudioEncoderCapabilities_GetAudioEncoders(SLAudioEncoderCapabilitiesItf self, 23437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kasten SLuint32 *pNumEncoders, SLuint32 *pEncoderIds) 2423b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten{ 25f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 26f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 27f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pNumEncoders) { 28f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 2923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten } else { 30cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten result = SL_RESULT_SUCCESS; 31cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten if (NULL != pEncoderIds) { 32f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SLuint32 numEncoders = *pNumEncoders; 33cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten if (numEncoders > MAX_ENCODERS) { 34cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten numEncoders = MAX_ENCODERS; 35cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten } else if (numEncoders < MAX_ENCODERS) { 36cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten // FIXME starting in 1.1 this will be SL_RESULT_BUFFER_INSUFFICIENT 37cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 38cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten } 39f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten memcpy(pEncoderIds, Encoder_IDs, numEncoders * sizeof(SLuint32)); 40f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 41cc36ab3da42f333bb583a68dbe270dc356709b37Glenn Kasten *pNumEncoders = MAX_ENCODERS; 4223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten } 43f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 44f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 4523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten} 4623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten 47f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 4823b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kastenstatic SLresult IAudioEncoderCapabilities_GetAudioEncoderCapabilities( 4923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten SLAudioEncoderCapabilitiesItf self, SLuint32 encoderId, SLuint32 *pIndex, 5023b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten SLAudioCodecDescriptor *pDescriptor) 5123b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten{ 52f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 53f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 54f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = GetCodecCapabilities(encoderId, pIndex, pDescriptor, 5523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten EncoderDescriptors); 56f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 57f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 5823b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten} 5923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten 60f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 6123b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kastenstatic const struct SLAudioEncoderCapabilitiesItf_ IAudioEncoderCapabilities_Itf = { 6223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten IAudioEncoderCapabilities_GetAudioEncoders, 6323b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten IAudioEncoderCapabilities_GetAudioEncoderCapabilities 6423b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten}; 6523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten 6623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kastenvoid IAudioEncoderCapabilities_init(void *self) 6723b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten{ 6850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IAudioEncoderCapabilities *thiz = (IAudioEncoderCapabilities *) self; 6950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mItf = &IAudioEncoderCapabilities_Itf; 7023b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten} 71