| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef ANDROID_EFFECTDOWNMIX_H_ |
| #define ANDROID_EFFECTDOWNMIX_H_ |
| |
| #include <audio_effects/effect_downmix.h> |
| #include <audio_utils/primitives.h> |
| #include <system/audio.h> |
| |
| /*------------------------------------ |
| * definitions |
| *------------------------------------ |
| */ |
| |
| #define DOWNMIX_OUTPUT_CHANNELS AUDIO_CHANNEL_OUT_STEREO |
| |
| typedef enum { |
| DOWNMIX_STATE_UNINITIALIZED, |
| DOWNMIX_STATE_INITIALIZED, |
| DOWNMIX_STATE_ACTIVE, |
| } downmix_state_t; |
| |
| /* parameters for each downmixer */ |
| typedef struct { |
| downmix_state_t state; |
| downmix_type_t type; |
| bool apply_volume_correction; |
| uint8_t input_channel_count; |
| } downmix_object_t; |
| |
| |
| typedef struct downmix_module_s { |
| const struct effect_interface_s *itfe; |
| effect_config_t config; |
| downmix_object_t context; |
| } downmix_module_t; |
| |
| const uint32_t kSides = AUDIO_CHANNEL_OUT_SIDE_LEFT | AUDIO_CHANNEL_OUT_SIDE_RIGHT; |
| const uint32_t kBacks = AUDIO_CHANNEL_OUT_BACK_LEFT | AUDIO_CHANNEL_OUT_BACK_RIGHT; |
| const uint32_t kUnsupported = |
| AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER | AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | |
| AUDIO_CHANNEL_OUT_TOP_CENTER | |
| AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT | |
| AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER | |
| AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT | |
| AUDIO_CHANNEL_OUT_TOP_BACK_LEFT | |
| AUDIO_CHANNEL_OUT_TOP_BACK_CENTER | |
| AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT; |
| |
| /*------------------------------------ |
| * Effect API |
| *------------------------------------ |
| */ |
| int32_t DownmixLib_Create(const effect_uuid_t *uuid, |
| int32_t sessionId, |
| int32_t ioId, |
| effect_handle_t *pHandle); |
| int32_t DownmixLib_Release(effect_handle_t handle); |
| int32_t DownmixLib_GetDescriptor(const effect_uuid_t *uuid, |
| effect_descriptor_t *pDescriptor); |
| |
| static int Downmix_Process(effect_handle_t self, |
| audio_buffer_t *inBuffer, |
| audio_buffer_t *outBuffer); |
| static int Downmix_Command(effect_handle_t self, |
| uint32_t cmdCode, |
| uint32_t cmdSize, |
| void *pCmdData, |
| uint32_t *replySize, |
| void *pReplyData); |
| static int Downmix_GetDescriptor(effect_handle_t self, |
| effect_descriptor_t *pDescriptor); |
| |
| |
| /*------------------------------------ |
| * internal functions |
| *------------------------------------ |
| */ |
| int Downmix_Init(downmix_module_t *pDwmModule); |
| int Downmix_Configure(downmix_module_t *pDwmModule, effect_config_t *pConfig, bool init); |
| int Downmix_Reset(downmix_object_t *pDownmixer, bool init); |
| int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, size_t size, void *pValue); |
| int Downmix_getParameter(downmix_object_t *pDownmixer, int32_t param, size_t *pSize, void *pValue); |
| |
| void Downmix_foldFromQuad(int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); |
| void Downmix_foldFromSurround(int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); |
| void Downmix_foldFrom5Point1(int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); |
| void Downmix_foldFrom7Point1(int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); |
| bool Downmix_foldGeneric( |
| uint32_t mask, int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); |
| |
| #endif /*ANDROID_EFFECTDOWNMIX_H_*/ |