summaryrefslogtreecommitdiffstats
path: root/media/libeffects/factory
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2011-06-17 18:54:16 -0700
committerEric Laurent <elaurent@google.com>2011-07-11 12:00:53 -0700
commitba7b8f881a9b6b21803752326d2932a3bd42d7cf (patch)
tree3e6ac78f1dea2eb4bde64c598c21a9b8e87a9db2 /media/libeffects/factory
parent9b88b72ee2c3fd01fb46e77b7e6d80f3bd52e958 (diff)
downloadframeworks_av-ba7b8f881a9b6b21803752326d2932a3bd42d7cf.zip
frameworks_av-ba7b8f881a9b6b21803752326d2932a3bd42d7cf.tar.gz
frameworks_av-ba7b8f881a9b6b21803752326d2932a3bd42d7cf.tar.bz2
Audio Effect API: process reverse stream function
Added function to audio effect interface for processing of a reverse stream. This is necessary for audio pre processes like echo cancellation. Change-Id: I6e12d79dbbed6376acdfc79304b8c0ab3f705eae
Diffstat (limited to 'media/libeffects/factory')
-rw-r--r--media/libeffects/factory/EffectsFactory.c43
1 files changed, 41 insertions, 2 deletions
diff --git a/media/libeffects/factory/EffectsFactory.c b/media/libeffects/factory/EffectsFactory.c
index a3e76d9..a9689bc 100644
--- a/media/libeffects/factory/EffectsFactory.c
+++ b/media/libeffects/factory/EffectsFactory.c
@@ -130,10 +130,43 @@ int Effect_GetDescriptor(effect_handle_t self,
return ret;
}
+int Effect_ProcessReverse(effect_handle_t self, audio_buffer_t *inBuffer, audio_buffer_t *outBuffer)
+{
+ int ret = init();
+ if (ret < 0) {
+ return ret;
+ }
+ effect_entry_t *fx = (effect_entry_t *)self;
+ pthread_mutex_lock(&gLibLock);
+ if (fx->lib == NULL) {
+ pthread_mutex_unlock(&gLibLock);
+ return -EPIPE;
+ }
+ pthread_mutex_lock(&fx->lib->lock);
+ pthread_mutex_unlock(&gLibLock);
+
+ if ((*fx->subItfe)->process_reverse != NULL) {
+ ret = (*fx->subItfe)->process_reverse(fx->subItfe, inBuffer, outBuffer);
+ } else {
+ ret = -ENOSYS;
+ }
+ pthread_mutex_unlock(&fx->lib->lock);
+ return ret;
+}
+
+
const struct effect_interface_s gInterface = {
Effect_Process,
Effect_Command,
- Effect_GetDescriptor
+ Effect_GetDescriptor,
+ NULL
+};
+
+const struct effect_interface_s gInterfaceWithReverse = {
+ Effect_Process,
+ Effect_Command,
+ Effect_GetDescriptor,
+ Effect_ProcessReverse
};
/////////////////////////////////////////////////
@@ -266,7 +299,13 @@ int EffectCreate(effect_uuid_t *uuid, int32_t sessionId, int32_t ioId, effect_ha
// add entry to effect list
fx = (effect_entry_t *)malloc(sizeof(effect_entry_t));
fx->subItfe = itfe;
- fx->itfe = (struct effect_interface_s *)&gInterface;
+ if ((*itfe)->process_reverse != NULL) {
+ fx->itfe = (struct effect_interface_s *)&gInterfaceWithReverse;
+ LOGV("EffectCreate() gInterfaceWithReverse");
+ } else {
+ fx->itfe = (struct effect_interface_s *)&gInterface;
+ LOGV("EffectCreate() gInterface");
+ }
fx->lib = l;
e = (list_elem_t *)malloc(sizeof(list_elem_t));