android5.0 audioflinger
2016-06-08 11:44
337 查看
音量调节调用setvoicevolume
status_t AudioFlinger::setVoiceVolume(float value)
{
AutoMutex lock(mHardwareLock);
audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
mHardwareStatus = AUDIO_HW_SET_VOICE_VOLUME;
ret = dev->set_voice_volume(dev, value);
mHardwareStatus = AUDIO_HW_IDLE;
return ret;
}
调用audio_hw.c set_voice_volume 函数指针指向adev_set_voice_volume
adev->device.set_voice_volume = adev_set_voice_volume;
static int adev_set_voice_volume(struct audio_hw_device *dev, float volume)
{
int ret;
struct audio_device *adev = (struct audio_device *)dev;
pthread_mutex_lock(&adev->lock);
/* cache volume */
ret = voice_set_volume(adev, volume);
pthread_mutex_unlock(&adev->lock);
return ret;
}
Voice.c
int voice_set_volume(struct audio_device *adev, float volume)
{
int vol, err = 0;
adev->voice.volume = volume;
if (adev->mode == AUDIO_MODE_IN_CALL) {
err = platform_set_voice_volume(adev->platform, vol);
}
if (adev->mode == AUDIO_MODE_IN_COMMUNICATION)
err = voice_extn_compress_voip_set_volume(adev, volume);
return err;
}
Platform.c //系统接口,无需关注如何与driver 交互,底层也只需要按接口实现即可
int platform_set_voice_volume(void *platform, int volume)
{
struct platform_data *my_data = (struct platform_data *)platform;
int ret = 0;
if (my_data->csd_client) {
if (my_data->csd_volume == NULL) {
ALOGE("%s: dlsym error for csd_volume", __func__);
} else {
ret = my_data->csd_volume(volume);
if (ret < 0) {
ALOGE("%s: csd_volume error %d", __func__, ret);
}
}
} else {
ALOGE("%s: No CSD Client present", __func__);
}
return ret;
}
status_t AudioFlinger::setVoiceVolume(float value)
{
AutoMutex lock(mHardwareLock);
audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
mHardwareStatus = AUDIO_HW_SET_VOICE_VOLUME;
ret = dev->set_voice_volume(dev, value);
mHardwareStatus = AUDIO_HW_IDLE;
return ret;
}
调用audio_hw.c set_voice_volume 函数指针指向adev_set_voice_volume
adev->device.set_voice_volume = adev_set_voice_volume;
static int adev_set_voice_volume(struct audio_hw_device *dev, float volume)
{
int ret;
struct audio_device *adev = (struct audio_device *)dev;
pthread_mutex_lock(&adev->lock);
/* cache volume */
ret = voice_set_volume(adev, volume);
pthread_mutex_unlock(&adev->lock);
return ret;
}
Voice.c
int voice_set_volume(struct audio_device *adev, float volume)
{
int vol, err = 0;
adev->voice.volume = volume;
if (adev->mode == AUDIO_MODE_IN_CALL) {
err = platform_set_voice_volume(adev->platform, vol);
}
if (adev->mode == AUDIO_MODE_IN_COMMUNICATION)
err = voice_extn_compress_voip_set_volume(adev, volume);
return err;
}
Platform.c //系统接口,无需关注如何与driver 交互,底层也只需要按接口实现即可
int platform_set_voice_volume(void *platform, int volume)
{
struct platform_data *my_data = (struct platform_data *)platform;
int ret = 0;
if (my_data->csd_client) {
if (my_data->csd_volume == NULL) {
ALOGE("%s: dlsym error for csd_volume", __func__);
} else {
ret = my_data->csd_volume(volume);
if (ret < 0) {
ALOGE("%s: csd_volume error %d", __func__, ret);
}
}
} else {
ALOGE("%s: No CSD Client present", __func__);
}
return ret;
}
相关文章推荐
- Android异步任务AsyncTask使用详解
- Android之SurfaceView学习(一)
- AS的那些坑---so库的依赖
- android 图片压缩
- android的EditText显示隐藏密码时候的全角问题
- actionbar hide icon/logo 去掉android actionbar左侧图标
- android安装apk遇到“install_failed_update_incompatible”错误
- Android获取图片的几种方式
- Android Studio项目如何添加.so文件(JNI)
- Android 弹出键盘向上顶布局
- Android Design Support Library的使用
- Android 视频播放的几种方式
- android动画
- android 使用View Animation实现动画加载界面
- 使用Broadcast实现Android组件间的通信
- Android的GLSurfaceView测试源码
- android 显示内容被底部导航栏遮挡
- android Launcher3双层改单层
- android开发中,可能会导致内存泄露的问题
- Android自定义控件之广告条滚动效果