14c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh/*
24c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * Copyrightm (C) 2010 The Android Open Source Project
34c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh *
44c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * Licensed under the Apache License, Version 2.0 (the "License");
54c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * you may not use this file except in compliance with the License.
64c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * You may obtain a copy of the License at
74c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh *
84c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh *      http://www.apache.org/licenses/LICENSE-2.0
94c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh *
104c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * Unless required by applicable law or agreed to in writing, software
114c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * distributed under the License is distributed on an "AS IS" BASIS,
124c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * See the License for the specific language governing permissions and
144c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh * limitations under the License.
154c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh */
164c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh
174c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh#include <stdint.h>
184c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh
194c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh#ifndef __AUDIO_CODEC_H__
204c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh#define __AUDIO_CODEC_H__
214c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh
224c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yehclass AudioCodec
234c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh{
244c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yehpublic:
254033a67d0e99d422336574fc5c982d349632b117Chia-chi Yeh    const char *name;
264033a67d0e99d422336574fc5c982d349632b117Chia-chi Yeh    // Needed by destruction through base class pointers.
274c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh    virtual ~AudioCodec() {}
284033a67d0e99d422336574fc5c982d349632b117Chia-chi Yeh    // Returns sampleCount or non-positive value if unsupported.
294033a67d0e99d422336574fc5c982d349632b117Chia-chi Yeh    virtual int set(int sampleRate, const char *fmtp) = 0;
304c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh    // Returns the length of payload in bytes.
314c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh    virtual int encode(void *payload, int16_t *samples) = 0;
324c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh    // Returns the number of decoded samples.
3335d05dcba1e829782813b6ec21afceb5cffc22e6Chia-chi Yeh    virtual int decode(int16_t *samples, int count, void *payload, int length) = 0;
344c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh};
354c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh
364c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi YehAudioCodec *newAudioCodec(const char *codecName);
374c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh
384c5d28cee0537c83ff0e5bc0daaae78f68dfc7c8Chia-chi Yeh#endif
39