173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh/*
273f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * Copyrightm (C) 2010 The Android Open Source Project
373f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh *
473f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * Licensed under the Apache License, Version 2.0 (the "License");
573f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * you may not use this file except in compliance with the License.
673f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * You may obtain a copy of the License at
773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh *
873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh *      http://www.apache.org/licenses/LICENSE-2.0
973f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh *
1073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * Unless required by applicable law or agreed to in writing, software
1173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * distributed under the License is distributed on an "AS IS" BASIS,
1273f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1373f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * See the License for the specific language governing permissions and
1473f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh * limitations under the License.
1573f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh */
1673f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
17984a78d3cd5c6e31b9fbba7614fbe1cc431adb1cCarl Shapiro#include <strings.h>
1873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
1973f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh#include "AudioCodec.h"
2073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
21536a451f5cf9f4bcf38968366cf62368f3d4d2f8Chia-chi Yehextern AudioCodec *newAlawCodec();
22536a451f5cf9f4bcf38968366cf62368f3d4d2f8Chia-chi Yehextern AudioCodec *newUlawCodec();
23d0f061251d77b98b510626ddcc925a74195519dfChia-chi Yehextern AudioCodec *newGsmCodec();
242437b7d03ce3c0c63ffe04e15a53174d15ee8479Chia-chi Yehextern AudioCodec *newAmrCodec();
25ac8b0e5a92e1a9abdaa543656fba0cf52ca8d786Chia-chi Yehextern AudioCodec *newGsmEfrCodec();
2673f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
2773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yehstruct AudioCodecType {
2873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    const char *name;
2973f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    AudioCodec *(*create)();
3073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh} gAudioCodecTypes[] = {
3173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    {"PCMA", newAlawCodec},
3273f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    {"PCMU", newUlawCodec},
33d0f061251d77b98b510626ddcc925a74195519dfChia-chi Yeh    {"GSM", newGsmCodec},
342437b7d03ce3c0c63ffe04e15a53174d15ee8479Chia-chi Yeh    {"AMR", newAmrCodec},
35ac8b0e5a92e1a9abdaa543656fba0cf52ca8d786Chia-chi Yeh    {"GSM-EFR", newGsmEfrCodec},
3673f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    {NULL, NULL},
3773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh};
3873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
3973f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi YehAudioCodec *newAudioCodec(const char *codecName)
4073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh{
4173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    AudioCodecType *type = gAudioCodecTypes;
4273f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    while (type->name != NULL) {
430d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh        if (strcasecmp(codecName, type->name) == 0) {
440d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh            AudioCodec *codec = type->create();
450d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh            codec->name = type->name;
460d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh            return codec;
4773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh        }
4873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh        ++type;
4973f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    }
5073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    return NULL;
5173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh}
52