当前位置: 首页 > wzjs >正文

网站建设课程ppt专业做网站建设制作服务

网站建设课程ppt,专业做网站建设制作服务,佛山专业网站建设哪家好,国外做免费网站的需求 Audio 模块中专门为 TV 产品添加了一些代码,需要在 hdmi 的 HAL 代码中进行调用以完成某些功能。 解决方法 首先将 hdmi HAL 要调用的 audio 接口函数所在的 .so 链接到最基本的 lib.primay.amlogic.so 中(其它平台上这个 .so 文件的名字也可能是…

需求

Audio 模块中专门为 TV 产品添加了一些代码,需要在 hdmi 的 HAL 代码中进行调用以完成某些功能。

解决方法

首先将 hdmi HAL 要调用的 audio 接口函数所在的 .so 链接到最基本的 lib.primay.amlogic.so 中(其它平台上这个 .so 文件的名字也可能是别的,比如 audio.primary.default.so)。
  然后在 hdmi HAL 里通过 AudioSystem::setParameters() 函数调用来向 audio HAL 发送一个自定义的音频参数,比如 tvAudio=44100(如果是调用其它模块的接口函数或对文件节点进行操作,那么应该使用其它模块对应的 service 对象,而不应该再是 AudioSystem)。示例代码如下:

static int tv_audio_open(char *sample_rate)
{ALOGD("Qidi - use AudioSystem::setParameters() to open amaudio function.");AudioParameter param = AudioParameter();String8 value = String8(sample_rate);String8 key = String8("tvAudio");param.add(key, value);String8 keyValuePairs = param.toString();if ( AudioSystem::setParameters(AUDIO_IO_HANDLE_NONE, keyValuePairs) == NO_ERROR ) {ALOGD("Qidi - tv_hal set amaudio parameter successfully.");return 0;}return -EINVAL;
}static int tv_audio_close()
{ALOGD("Qidi - use AudioSystem::setParameters() to close amaudio function.");AudioParameter param = AudioParameter();String8 value = String8("off");String8 key = String8("tvAudio");param.add(key, value);String8 keyValuePairs = param.toString();if ( AudioSystem::setParameters(AUDIO_IO_HANDLE_NONE, keyValuePairs) == NO_ERROR ) {ALOGD("Qidi - tv_hal set amaudio parameter successfully.");return 0;} else {ALOGE("Qidi - tv_hal set amaudio parameter failed.");return -EINVAL;}
}#define AUDIO_48k 48000static int tv_input_open_stream(struct tv_input_device *dev, int device_id,tv_stream_t *stream){if ( dev ) {if (get_hdmi_stream(stream) != 0) {return -EINVAL;}if ( NORMAL_STREAM_ID == stream->stream_id ) {WriteSysfs(HDMI_ENABLE_SYSFS, HDMI_ENABLE);if (tv_audio_open(AUDIO_48k) == 0) {ALOGD("Qidi - tv_audio_open() is called successfully!\n");return 0;}}}ALOGE("Qidi - tv_hal set amaudio parameter failed.");return -EINVAL;}static int tv_input_close_stream(struct tv_input_device *dev, int device_id,int stream_id){if ( dev ) {if ( NORMAL_STREAM_ID == stream_id ) {if (tv_audio_close() != 0)return -EINVAL;WriteSysfs(HDMI_ENABLE_SYSFS, HDMI_DISABLE);return 0;}......
}

接着在 audio HAL 中添加上对相应音频参数的处理逻辑即可。如下方代码所示:

#if 1// handle tvAudio invoke request from hdmi HAL in the method of// AudioSystem::setParameters()int sr_value = 0;char *end;ret = str_parms_get_str(parms, "tvAudio", value, sizeof(value));if (ret >= 0) {ALOGD("Qidi - %s() is handling tvAudio parameter: amaudio = %s",__FUNCTION__, value);if (strcmp(value, AUDIO_PARAMETER_VALUE_OFF) == 0) {tvAudioClose();} else {if (str_parms_get_int(parms, "tvAudio", &sr_value)) {ALOGE("Qidi - get tvAudio sample_rate failed!\n");return 0;}if (sr_value >= 8000 && sr_value <= 48000) {tvAudioOpen((unsigned int)sr_value,CC_IN_USE_SPDIF_DEVICE, CC_OUT_USE_ALSA);} elseALOGE("Qidi - tvAudio sample_rate invalid!\n");}}
#endif

当然,最后还要在 hdmi HAL 模块的 Android.mk 中链接上 audio HAL 的 .so 库文件和调用时要用到的其它库文件。如下所示:

LIB_VENDOR := $(wildcard vendor/amlogic)LOCAL_C_INCLUDES += \
-  $(LIB_VENDOR)/frameworks/services
+  $(GRALLOC_DIR) \
+  hardware/amlogic/audio/libTVaudioLOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_SHARED_LIBRARIES := libcutils liblog libsystemcontrolservice libutils libbinder libui libhardware
+LOCAL_SHARED_LIBRARIES := libcutils liblog libutils libui libhardware libTVaudio libbinder libaudioclient \
+    libdl libmedia libmedia_helperLOCAL_SRC_FILES := tv_input.cppLOCAL_MODULE := tv_input.amlogicLOCAL_MODULE_TAGS := optional
+ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo OK),OK)
+  LOCAL_PROPRIETARY_MODULE := true
+endifinclude $(BUILD_SHARED_LIBRARY)

通过这种方式,去操作音频设备节点的对象从原来的 hdmi HAL 变成了 audio HAL,规避了没有操作权限的问题。


文章转载自:

http://FU56kGlr.nxbzz.cn
http://AsarwfIK.nxbzz.cn
http://pLqnkXZ9.nxbzz.cn
http://OIrBhTWk.nxbzz.cn
http://b7neeMkm.nxbzz.cn
http://j3ykkcqV.nxbzz.cn
http://Pv5wVX4B.nxbzz.cn
http://TLj4vX29.nxbzz.cn
http://OIUfzphL.nxbzz.cn
http://v9gIrRt1.nxbzz.cn
http://ws2hdyln.nxbzz.cn
http://monwOKT6.nxbzz.cn
http://hPt9rIi7.nxbzz.cn
http://oxbE2djm.nxbzz.cn
http://5dbFmSAd.nxbzz.cn
http://4EQXCYkD.nxbzz.cn
http://aTX2Sb4W.nxbzz.cn
http://VdGHbFHg.nxbzz.cn
http://4q4WmsVd.nxbzz.cn
http://LKZgaoPU.nxbzz.cn
http://dZSZTjxn.nxbzz.cn
http://a8Uiz7HP.nxbzz.cn
http://QClAGiIl.nxbzz.cn
http://vedDEFrg.nxbzz.cn
http://KKRcaEY2.nxbzz.cn
http://uA8O8YrK.nxbzz.cn
http://2snhbXtr.nxbzz.cn
http://eQ8ZDprw.nxbzz.cn
http://g1Lzq9QX.nxbzz.cn
http://HviSbwQM.nxbzz.cn
http://www.dtcms.com/wzjs/647502.html

相关文章:

  • 建设银行官方网站广州营销模式有几种
  • 搜集10个优秀网站哪个平台推广效果最好
  • 保姆给老人做爰神马网站百度站长工具
  • 泰州网站建设电话常州北京网站建设
  • 百度网站置顶怎么做诺尔诺达网站建设
  • 网站建设面试题产品展示网站系统
  • 网站支付按钮怎么做网站没有索引量是什么意思
  • 建设一个视频教学网站织梦网站怎么重新安装
  • wangz网站建设静态网站首页更新
  • 兰州城建设计院网站wordpress主题开发导航制作
  • 网站制作什么做网站的排名与权重
  • 公司手机网站建设价格建站计划书
  • 如何看网站的建站时间深圳优化seo
  • 网站建设对用户影响网页设计模板图片美食
  • 网站速度查询wordpress用oss还是七牛
  • 网站开发公司流程莱芜新闻视频回放今天
  • 西宁网站建设芜湖网站开发
  • aspx网站如何架设大连做网站比较好的
  • 大学生网站制作作业免费下载专业建站网站服务
  • 莱芜网站建设莱芜广州网营广告有限公司
  • 无锡哪家网站做的好建筑网片规范
  • 北京微信网站设计费用wordpress如何添加远程数据库
  • 贵州网站推广网站建设 应酷
  • 外贸营销网站建设公司青岛城乡建设局网站首页
  • 网站如何做360度全景python cms系统
  • 芯火信息做网站怎么样躺平淘宝设计家官网
  • html制作企业宣传网站重庆景观设计公司有哪些
  • 做安全防护信息的网站个人建站怎么做网站好
  • 阿里巴巴网站分类板块做全屏电子政务门户网站建设汇报
  • 建网站教程网站建设大图