Reputation: 409
I want to capture the audio wave frame from the audio buffer, I found android.media.audiofx.Visualizer can do such thing, but it can only returns partial and low quality audio content
I found android.media.audiofx.Visualizer will call to the function Visualizer_command(VISUALIZER_CMD_CAPTURE) at android4.0\frameworks\base\media\libeffects\visualizer
I found the function Visualizer_process will make the audio content to low quality. I want to rewrite the Visualizer_process , and want to find who will call Visualizer_process, but I cannot find the caller from Android source code, can anyone help me ?
thanks very much!
Upvotes: 0
Views: 190
Reputation: 58507
The AudioFlinger::PlaybackThread::threadLoop
calls AudioFlinger::EffectChain::process_l
, which calls AudioFlinger::EffectModule::process
, which finally calls the actual effect's process
function.
As you can see in AudioFlinger::EffectModule::process
, there's the call
int ret = (*mEffectInterface)->process(mEffectInterface,
&mConfig.inputCfg.buffer,
&mConfig.outputCfg.buffer);
mEffectInterface
is an effect_handle_t
, which is an effect_interface_s**
. The effect_interface_s
struct (defined here) contains a number of function pointers (process
, command
, ...). These are filled out with pointers the actual effect's functions when the effect is loaded. The effects provide these pointers through a struct (in EffectVisualizer
it's gVisualizerInterface
).
Note that the exact location of these functions may differ between different Android releases. So if you're looking at Android 4.0 you might find some of them in AudioFlinger.cpp (or somewhere else).
Upvotes: 2