蓝牙音频A2DP(二) -- audio_hw_device结构体
来源:互联网 发布:tensorflow graph 编辑:程序博客网 时间:2024/04/28 13:41
每一个音频设备,都是一个audio_hw_device结构体的实现,那么对于audio_hw_device的理解,能够更好的理解音频设备可以做什么,怎么做。
看下audio_hw_device的结构体定义(hardware/libhardware/include/hardware/audio.h,英文就不写了,随便翻译一下):
516 struct audio_hw_device {517 /** * 音频设备的通用方法,就是记录下版本好,TAG这些基本信息的, * 虽然没啥用,但是每个audio_hw_device都必须以此开头 */522 struct hw_device_t common;523524 /** * Audio Flinger通过此函数查看该audio_hw_device的实现支持哪些设备。 * 蓝牙A2DP未提供此函数实现,也许就是表示啥都支持 */536 uint32_t (*get_supported_devices)(const struct audio_hw_device *dev);537538 /** * 检查该音频接口是否已初始化 * 蓝牙似乎没检查,啥都没做,直接返回 0(success)541 */542 int (*init_check)(const struct audio_hw_device *dev);543544 /** * 设置在某一个设备上话音数据音量,范围 0.0 - 1.0 */545 int (*set_voice_volume)(struct audio_hw_device *dev, float volume);546547 /** * 设置该设备下所有实体的音量大小,这个就不止是话音数据了 * 范围 0.0 - 1.0551 */552 int (*set_master_volume)(struct audio_hw_device *dev, float volume); /** * 获取当前整体音量大小,如果HAL支持这个功能,那么Audio Flinger就要 * 通过该方法去读取值,并在Audio Service启动的时候,以该值为初始值 * 当然,也可以不支持,不支持的设置为NULL * 蓝牙A2DP不支持该方法,将道理的话,Primary支持就够了 */561 int (*get_master_volume)(struct audio_hw_device *dev, float *volume);562563 /** * 设置音频状态,主要为: * AUDIO_MODE_NORMAL 正常 * AUDIO_MODE_RINGTONE 铃音 * AUDIO_MODE_IN_CALL 通话567 */568 int (*set_mode)(struct audio_hw_device *dev, audio_mode_t mode);569570 /* 设置麦克风静音 */571 int (*set_mic_mute)(struct audio_hw_device *dev, bool state);572 int (*get_mic_mute)(const struct audio_hw_device *dev, bool *state);573574 /* 设置/获取 全局音频参数 */575 int (*set_parameters)(struct audio_hw_device *dev, const char *kv_pairs);581 char * (*get_parameters)(const struct audio_hw_device *dev,582 const char *keys);583584 /* * 获取输入buff的长度 * 蓝牙A2DP不支持该功能,就不纠结到底是啥子长度了587 */588 size_t (*get_input_buffer_size)(const struct audio_hw_device *dev,589 const struct audio_config *config);584 /* * 关键的接口,用于创建并打开音频硬件输出流 * 不同的音频设备的address是不一样的 * Bluetooth: use MAC address of the device "00:11:22:AA:BB:CC" * USB: use ALSA card and device number "card=X;device=Y" * other: a number or other string587 */599 int (*open_output_stream)(struct audio_hw_device *dev,600 audio_io_handle_t handle,601 audio_devices_t devices,602 audio_output_flags_t flags,603 struct audio_config *config,604 struct audio_stream_out **stream_out,605 const char *address);606607 void (*close_output_stream)(struct audio_hw_device *dev,608 struct audio_stream_out* stream_out);609584 /* * 关键的接口,用于创建并打开音频硬件输入流587 */611 int (*open_input_stream)(struct audio_hw_device *dev,612 audio_io_handle_t handle,613 audio_devices_t devices,614 struct audio_config *config,615 struct audio_stream_in **stream_in,616 audio_input_flags_t flags,617 const char *address,618 audio_source_t source);619620 void (*close_input_stream)(struct audio_hw_device *dev,621 struct audio_stream_in *stream_in);622623 /* * 打印当前音频的状态 * 蓝牙实现了,但啥也没做 */624 int (*dump)(const struct audio_hw_device *dev, int fd);625626 /* * 后面的接口,蓝牙都没用,不看了 */630 int (*set_master_mute)(struct audio_hw_device *dev, bool mute);639 int (*get_master_mute)(struct audio_hw_device *dev, bool *mute);640648 int (*create_audio_patch)(struct audio_hw_device *dev,649 unsigned int num_sources,650 const struct audio_port_config *sources,651 unsigned int num_sinks,652 const struct audio_port_config *sinks,653 audio_patch_handle_t *handle);656 int (*release_audio_patch)(struct audio_hw_device *dev,657 audio_patch_handle_t handle);665 int (*get_audio_port)(struct audio_hw_device *dev,666 struct audio_port *port);669 int (*set_audio_port_config)(struct audio_hw_device *dev,670 const struct audio_port_config *config);
从audio的结构体以及蓝牙A2DP对其的实现可以看出,蓝牙音频的主要功能都是包含在output stream 和input stream。
adev->device.open_output_stream = adev_open_output_stream; adev->device.close_output_stream = adev_close_output_stream; adev->device.open_input_stream = adev_open_input_stream; adev->device.close_input_stream = adev_close_input_stream;
0 0
- 蓝牙音频A2DP(二) -- audio_hw_device结构体
- 蓝牙音频A2DP(一)-- A2DP音频设备加载
- 蓝牙音频A2DP(三) -- UIPC
- A2DP & AVRCP,蓝牙音频协议的兄弟组合(1)
- A2DP协议笔记(蓝牙的音频传输协议)
- A2DP和AVRCP蓝牙音频传输协议的应用解释
- Android 蓝牙开发(九)A2DP基本功能
- ubuntu 10.10 蓝牙 a2dp
- 蓝牙音乐 A2DP 剖析
- 蓝牙profile:A2DP,AVRCP
- Android蓝牙A2dp开发
- 在Android4.2中实现bluetooth A2dp Sink(二)——移植Android5.0蓝牙协议栈
- Android蓝牙编程 之 同时打开SPP和音频A2DP服务
- Android蓝牙编程 之 同时打开SPP和音频A2DP服务
- Android蓝牙编程 之 同时打开SPP和音频A2DP服务
- AudioRecord工作流程(蓝牙a2dp的状态下)
- Android 蓝牙开发(十)A2DP源码分析
- Android 蓝牙开发(十)A2DP源码分析
- vue-cli 脚手架总结
- mycat部署
- Hadoop入门-2.HDFS原理和工作机制(基于hadoop-2.7.3)
- 宣传片能为企业带来哪些改变?
- java关键字
- 蓝牙音频A2DP(二) -- audio_hw_device结构体
- 安卓四大程序组件+Intent讲解
- 翻转数组
- 防线Defense Lines
- 安卓开发者选项菜单里的动画选项都代表什么含义?
- Apache服务以及httpd.conf配置详解
- vim插件安装
- SQL基本操作
- Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)