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