- 博客(40)
- 收藏
- 关注
原创 常用命令
单独下载一个project git clone http://myrepo.xxx.com/project/.git ,这样在当前目录下得到一个project子目录 例如下载alps/frameworks/av 对应的命令为: git clone ssh://xxxx@myrepo.xxx.com:29418/mtk_N/alps/external/skia/.git alps/ext
2017-10-13 11:18:41 1286
原创 深入理解Android音视频同步机制
看到几篇音视频同步分析的博文,推荐下:1. 深入理解Android音视频同步机制(一)概述2. 深入理解Android音视频同步机制(二)ExoPlayer的avsync逻辑3. 深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑4. 深入理解Android音视频同步机制(四)MediaSync的使用与原理5. 深入理解Android音视频同步机制(五)如何从零...
2019-04-23 16:38:16 633
原创 148. Sort List(链表归并排序)
Sort a linked list in O(n log n) time using constant space complexity.class Solution {public:ListNode *sortList(ListNode *head) {if(head == NULL || head->next == NULL) {return head;}ListNode...
2019-04-18 23:35:15 291
原创 音效框架
alps/frameworks/base/media/java/android/media/audiofx/LoudnessEnhancer.javapublic LoudnessEnhancer(int audioSession){//默认只使用type,uuid等于nullsuper(EFFECT_TYPE_LOUDNESS_ENHANCER, EFFECT_TYPE_NULL, 0, ...
2019-04-18 17:36:20 1095
原创 Android P之Camera HAL3流程分析(1)
Camera2中打开相机也需要通过CameraManager类 private void openCamera() { CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); //打开相机设备 manager.openCamera(mCam...
2019-02-16 18:18:41 5566
原创 Android P之Camera HAL3流程分析(5)
Camera2中拍照完成之后,如何实现获取数据呢?答案就是使用ImageReader间接实现,首先创建一个ImageReader,并监听它的事件 private void setupImageReader() { //2代表ImageReader中最多可以获取两帧图像流 mImageReader = ImageReader.newInstance(mCapt...
2019-02-16 17:44:48 2594
原创 Android P之Camera HAL3流程分析(4)
准备工作做好后,还需要响应点击拍照事件,我们设置点击拍照按钮调用capture()方法,capture()方法即实现拍照 private void capture() { try { //创建拍照请求 final CaptureRequest.Builder mCaptureBuilder = ...
2019-02-16 17:43:44 2594
原创 Android P之Camera HAL3流程分析(3)
我们使用TextureView显示相机预览数据,Camera2的预览和拍照数据都是使用CameraCaptureSession会话来请求的 private void startPreview() { SurfaceTexture mSurfaceTexture = mTextureView.getSurfaceTexture(); mSurfaceTextu...
2019-02-16 17:42:44 2276
原创 Android P之Camera2预览和拍照
目录1,定义TextureView作为预览界面2,设置相机参数3,开启相机4,开启相机预览5,拍照6,拍照数据处理参考:http://blog.csdn.net/lb377463323/article/details/52740411Android API 21新增了Camera2,这与之前的camera架构完全不同,使用起来也比较复杂,但是功能变得很强大。在讲...
2019-02-16 16:33:31 2569
原创 Android P之Camera HAL3流程分析(2)
我们使用TextureView显示相机预览数据,Camera2的预览和拍照数据都是使用CameraCaptureSession会话来请求的 private void startPreview() { SurfaceTexture mSurfaceTexture = mTextureView.getSurfaceTexture(); mSurfaceTextu...
2019-02-06 00:13:58 6987 1
原创 Android P的Binder IPC
一直以来,供应商进程都使用 Binder 进程间通信 (IPC) 技术进行通信。在 Android O 中,/dev/binder 设备节点成为了框架进程的专属节点,这意味着供应商进程将无法再访问该节点。供应商进程可以访问 /dev/hwbinder,但必须将其 AIDL 接口转为使用 HIDL。对于想要继续在供应商进程之间使用 AIDL 接口的供应商,Android 会按以下方式支持 Binde...
2019-02-05 17:16:17 750
原创 Android P之Camera HAL3流程分析(0)
目录参考文献注册CameraProvider服务注册cameraserver服务类和服务调用参考文献[Android O] Camera 服务启动流程简析[Android O] HAL3 之 Open Camera2 流程(零)—— 概览[Android O] HAL3 之 Open Camera2 流程(一)—— 从 App 到 CameraService[Android...
2019-02-03 15:27:15 12722 4
原创 Android媒体扫描
此函数太长,在此不粘出来了,这里首先要解释下这些参数,path - 要扫描文件夹路径以’/’结尾,pathRemaining为路径长度与路径最大长度之间的差值,也就是防止扫描时路径超出范围,extensions 前面已经解释过是后缀,client是MyMediaScannerClient对象,后面两个参数是一些异常处理不用关心。大家仔细看这个函数的代码就可以知道,它完成的是遍历文件夹并找到有相应ex
2017-11-15 09:58:06 1003
原创 Android源码编译JNI
APP编译 Android.mkifneq ($(TARGET_BUILD_JAVA_SUPPORT_LEVEL),)LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := testsLOCAL_PROGUARD_ENABLED := disabled# comment it out for now since w
2017-11-08 16:12:49 1731
原创 高通输入输出设备选择
static int adev_open_input_stream(struct audio_hw_device *dev, audio_io_handle_t handle __unused, audio_devices_t devices,
2017-11-02 17:21:23 2635 1
原创 音频策略配置文件分析
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"&g
2017-11-01 14:31:39 2256 1
原创 How to Debug issue’s Related to VoIP Call
Depending on the VOIP application and the configuration of the TX and RX path either VOIP driver or PCM driver is used.Sometimes VOIP driver is used for RX path only and the PCM driver is used for TX
2017-10-26 14:13:05 726
原创 sppex性能处理测试程序
编译依赖speex库的可执行文件测试speex性能LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := speextestLOCAL_CFLAGS = -DFIXED_POINT -DUSE_KISS_FFT -DEXPORT="" -UHAVE_CONFIG_HLOCAL_C_INCLUDES := $(LO
2017-10-23 20:09:44 733
原创 speex噪音消除
#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "speex/speex_preprocess.h"#include <stdio.h>#define NN 160int main(){ short in[NN]; int i; SpeexPreprocessState *st; int count=0;
2017-10-20 11:11:08 3807
原创 speex回音消除
在Speex(www.speex.org)的最新版本中,开始集成了回音消除的模块,而回音消除一直是Voip之中亟待解决的主要问题。很多朋友和我说speex的aec模块的效能并不好,我们先来看一下speex的aec的api调用方式。/**创建AEC对象*/SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_
2017-10-18 09:56:31 3826 2
原创 VoIP通话的输入路由
status_t AudioALSACaptureHandlerAEC::open(){ if (mStreamAttributeTarget->input_device == AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) { // open BT data provider if (WCNChipControlle
2017-10-09 15:38:35 1552 1
原创 录音机和录像机的输入通路SPELayer
//speech enhancement setting and processbool SPELayer::Start(SPE_MODE mode) //for VOIP, both uplink/downlink{ ALOGD("%s+, mode=%d", __FUNCTION__, mode); Mutex::Autolock lock(mLock); if
2017-09-30 14:28:05 651
原创 录音机和录像机的输入通路
AudioALSACaptureDataClient::AudioALSACaptureDataClient(AudioALSACaptureDataProviderBase *pCaptureDataProvider, stream_attribute_t *stream_attribute_target) : mCaptureDataProvider(pCaptureDataProvid
2017-09-29 16:03:39 2886
原创 Android音频驱动-ASOC之DAMP
static int snd_soc_instantiate_card(struct snd_soc_card *card) { ...... /* card bind complete so register a sound card */ ret = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV
2017-09-11 08:58:27 750
原创 Android音频驱动-ASOC之Control Open
struct mixer *mixer_open(unsigned int card){ struct snd_ctl_elem_list elist; struct snd_ctl_elem_info tmp; struct snd_ctl_elem_id *eid = NULL; struct mixer *mixer = NULL; unsigned
2017-09-07 15:39:01 1829
原创 Android音频驱动-ASOC之Control Device创建
soc-core.c snd_soc_instantiate_card init.c snd_card_new control.c snd_ctl_createControl设备和PCM设备一样,都属于声卡下的逻辑设备。用户空间的应用程序通过alsa-lib访问该Control设备, 读取或控制control的控制状态,从而达到控制音频Codec进行各种Mixer
2017-09-07 14:58:01 565
原创 Android音频驱动-ASOC之PCM HW Params
struct pcm *pcm_open(unsigned int card, unsigned int device, unsigned int flags, struct pcm_config *config){ struct pcm *pcm; struct snd_pcm_info info; struct snd_pcm_
2017-09-05 15:41:03 3024
原创 Android音频驱动-ASOC之PCM Write
int pcm_write(struct pcm *pcm, const void *data, unsigned int count){ struct snd_xferi x; if (pcm->flags & PCM_IN) return -EINVAL; x.buf = (void*)data; x.frames = count / (pcm->c
2017-09-05 11:30:37 7709 2
原创 Android音频驱动-ASOC之PCM Prepare
int pcm_write(struct pcm *pcm, const void *data, unsigned int count){ struct snd_xferi x; if (pcm->flags & PCM_IN) return -EINVAL; x.buf = (void*)data; x.frames = count / (pcm->c
2017-09-04 17:33:37 4777
原创 Android音频驱动-ASOC之创建设备节点
创建设备文件的方法: 第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。 具体udev相关知识这里不详细阐述,可以移步Linux 文件系统与设备文件系统 —— udev 设备文件系统,这里主要讲使用方法。
2017-09-01 16:42:39 1676
原创 Android音频驱动-ASOC之主&从设备号
设备号是在驱动module中分配并注册的,驱动module拥有这个设备号,而/dev目录下的设备文件是根据这个设备号创建的, 当访问/dev目录下的设备文件时,驱动module就知道,自己该出场服务了(当然是由内核通知)。 在Linux内核看来,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务; 而次设备号则用来标识具体且唯一的某个
2017-09-01 09:52:22 1089
原创 Android音频驱动-ASOC之Sound Card创建
static const struct file_operations snd_fops ={ .owner = THIS_MODULE, .open = snd_open, .llseek = noop_llseek,};static int __init alsa_sound_init(void){ snd_major = major;
2017-08-31 17:05:14 1409
原创 Android音频驱动-ASOC之常用对象
struct snd_soc_dai { const char *name; int id; struct device *dev; void *ac97_pdata; /* platform_data for the ac97 codec */ /* driver ops */ struct snd_soc_dai_driver *driver;
2017-08-29 19:42:46 1304
原创 Android音频驱动-ASOC之PCM Open
soc-core.csnd_soc_instantiate_cardinit.csnd_card_registerdevice.csnd_device_register_all__snd_device_registerdev->ops->dev_register(dev);pcm.csnd_pcm_dev_registersprintf(str, "pcmC%iD%ip", pc
2017-08-29 12:51:28 6854
原创 Android音频驱动-ASOC之PCM Device创建
soc-core.csnd_soc_instantiate_cardsoc_probe_link_daissoc-pcm.csoc_new_pcmpcm.csnd_pcm_new_internal_snd_pcm_newsnd_pcm_new_stream snd_device_new(card, SNDRV_DEV_PCM, pcm, &ops)pcm_lib.c //设置具体
2017-08-29 12:50:11 3307
原创 Android音频驱动-ASOC之Sound Card注册
soc-core.csnd_soc_instantiate_cardsoc_probe_link_daissoc-pcm.csoc_new_pcmpcm.csnd_pcm_new_internal_snd_pcm_newsnd_pcm_new_stream snd_device_new(card, SNDRV_DEV_PCM, pcm, &ops)pcm_lib.c //设置具体
2017-08-29 12:47:46 2041
原创 Android音频驱动-ASOC之CPU DAI
static int __init mtk_dai_stub_init(void){ int ret; soc_mtk_dai_dev = platform_device_alloc(MT_SOC_DAI_NAME , -1); ret = platform_device_add(soc_mtk_dai_dev); return platform_driver_re
2017-08-28 20:15:50 1385
原创 Android音频驱动-ASOC之Platform
static struct platform_driver mtk_I2S0dl1_driver = { .driver = { .name = MT_SOC_I2S0DL1_PCM, .owner = THIS_MODULE, }, .probe = mtk_I2S0dl1_probe, .remove = mtk_I2S
2017-08-28 17:48:12 1320
原创 Android音频驱动-ASOC之Codec
mt_soc_codec_63xx.cstatic int __init mtk_mt6331_codec_init(void){ int ret = 0; soc_mtk_codec6331_dev = platform_device_alloc(MT_SOC_CODEC_NAME, -1); ret = platform_device_add(soc_mtk_codec
2017-08-28 17:21:56 2418
原创 Android音频驱动-ASOC之Machine
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-08-28 16:31:56 1207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人