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
1773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh#include <stdint.h>
1873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
1973f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh#ifndef __AUDIO_CODEC_H__
2073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh#define __AUDIO_CODEC_H__
2173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
2273f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yehclass AudioCodec
2373f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh{
2473f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yehpublic:
250d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh    const char *name;
260d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh    // Needed by destruction through base class pointers.
2773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    virtual ~AudioCodec() {}
280d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh    // Returns sampleCount or non-positive value if unsupported.
290d2c37c274f1db29f51f1d078f240be13b784bf2Chia-chi Yeh    virtual int set(int sampleRate, const char *fmtp) = 0;
3073f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    // Returns the length of payload in bytes.
3173f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    virtual int encode(void *payload, int16_t *samples) = 0;
3273f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh    // Returns the number of decoded samples.
33418b5f04c2eb3ceff046328ba23a16b89a5a3306Chia-chi Yeh    virtual int decode(int16_t *samples, int count, void *payload, int length) = 0;
3473f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh};
3573f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
3673f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi YehAudioCodec *newAudioCodec(const char *codecName);
3773f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh
3873f6df1f0aac12c243e2110e30337ab01aa71598Chia-chi Yeh#endif
39