1bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber/*
2bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Copyright (C) 2011 The Android Open Source Project
3bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
4bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * you may not use this file except in compliance with the License.
6bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * You may obtain a copy of the License at
7bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
8bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
10bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Unless required by applicable law or agreed to in writing, software
11bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * See the License for the specific language governing permissions and
14bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * limitations under the License.
15bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber */
16bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
17bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#ifndef SOFT_G711_H_
18bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
19bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#define SOFT_G711_H_
20bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
21bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include "SimpleSoftOMXComponent.h"
22bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
23bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubernamespace android {
24bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
25bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct SoftG711 : public SimpleSoftOMXComponent {
26bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftG711(const char *name,
27bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            const OMX_CALLBACKTYPE *callbacks,
28bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appData,
29bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMPONENTTYPE **component);
30bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
31bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprotected:
32bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual ~SoftG711();
33bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
34bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE internalGetParameter(
35bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
36bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
37bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE internalSetParameter(
38bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
39bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
40bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual void onQueueFilled(OMX_U32 portIndex);
41bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
42bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprivate:
43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    enum {
44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        kNumBuffers = 4,
45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        kMaxNumSamplesPerFrame = 16384,
46bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    };
47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    bool mIsMLaw;
49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    OMX_U32 mNumChannels;
50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    bool mSignalledError;
51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void initPorts();
53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static void DecodeALaw(int16_t *out, const uint8_t *in, size_t inSize);
55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static void DecodeMLaw(int16_t *out, const uint8_t *in, size_t inSize);
56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftG711);
58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber};
59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}  // namespace android
61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
62bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#endif  // SOFT_G711_H_
63bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
64