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 {
30f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        if (NULL == pEncoderIds) {
31f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten            *pNumEncoders = MAX_ENCODERS;
32f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        } else {
33f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten            SLuint32 numEncoders = *pNumEncoders;
34f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten            if (MAX_ENCODERS <= numEncoders)
35f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten                *pNumEncoders = numEncoders = MAX_ENCODERS;
36f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten            memcpy(pEncoderIds, Encoder_IDs, numEncoders * sizeof(SLuint32));
37f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        }
38f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_SUCCESS;
3923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    }
40f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
41f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
4223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten}
4323b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten
44f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
4523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kastenstatic SLresult IAudioEncoderCapabilities_GetAudioEncoderCapabilities(
4623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    SLAudioEncoderCapabilitiesItf self, SLuint32 encoderId, SLuint32 *pIndex,
4723b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    SLAudioCodecDescriptor *pDescriptor)
4823b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten{
49f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_ENTER_INTERFACE
50f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
51f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    result = GetCodecCapabilities(encoderId, pIndex, pDescriptor,
5223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten        EncoderDescriptors);
53f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
54f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
5523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten}
5623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten
57f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
5823b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kastenstatic const struct SLAudioEncoderCapabilitiesItf_ IAudioEncoderCapabilities_Itf = {
5923b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    IAudioEncoderCapabilities_GetAudioEncoders,
6023b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    IAudioEncoderCapabilities_GetAudioEncoderCapabilities
6123b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten};
6223b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten
6323b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kastenvoid IAudioEncoderCapabilities_init(void *self)
6423b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten{
6523b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    IAudioEncoderCapabilities *this = (IAudioEncoderCapabilities *) self;
6623b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten    this->mItf = &IAudioEncoderCapabilities_Itf;
6723b3f68cab75e480ac93d656a6e4f60b979de6d2Glenn Kasten}
68