自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vincent的专栏

技术积累与资料收集

  • 博客(60)
  • 收藏
  • 关注

原创 Binder学习资料整理

Android深入浅出之Binder机制Android进程间通信(IPC)机制Binder简要介绍和学习计划浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路Android系统进程间通

2016-06-16 10:49:06 618

原创 Audio笔记之重采样

AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTracks_l(        Vector > *tracksToRemove){ mAudioMixer->setParameter(                name,                Audi

2016-01-24 20:04:54 3120

转载 如何编写LINUX设备驱动程序

Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。以下的一些文字主要来源于khg,johnsonm的Write linux

2016-01-19 10:27:34 1088 1

原创 ALSA用户空间之TinyAlsa

TingAlsa在android source code的目录为external/tinyalsa。具体编译脚本如下,使用mmm external/tinyalsa/ 命令可以build出一个动态库libtinyslas.os,提供接口给audio_hw调用;三个可执行文件tinyplay/tinymix/tinycap,提供给开发者的调试工具;tinymix: 查看配置混

2016-01-17 15:47:50 7237

转载 Android音频底层调试-基于tinyalsa

由于Android中默认并没有使用标准alsa,而是使用的是tinyalsa,所以就算基于命令行的测试也要使用libtinyalsa。Android系统在上层Audio千变万化的时候,可以能这些个工具实时查看到,比如音频通道的切换等等. 1.编译tinyalsa配套工具$ mmm external/tinyalsa/编译完后会产生tinyplay/tinymix/tinycap等等

2016-01-17 13:00:52 1487

原创 AAC

/** * \brief This structure gives information about the currently decoded audio data. * All fields are read-only. */typedef struct{ /* These five members are the only really relevant one

2016-01-13 11:01:20 1041

原创 Audio笔记之AudioPlayer流程

status_t AwesomePlayer::play_l() { modifyFlags(SEEK_PREVIEW, CLEAR); if (mFlags & PLAYING) { return OK; } if (!(mFlags & PREPARED)) { status_t err = prepare_l();

2015-02-01 15:46:38 5521 1

转载 Android平台Log输出规范

1、  目的:为了规范软件工程师在android代码编写过程中输出Log的行为,使得发布的产品中打印的Log是必须的,打印的Log的级别是能真实反映此Log对应的级别,标签、Log内容具有很好的可读性。2、  适用范围android平台java、c++、c代码编写。3、  Log的调用及等级介绍(1)、Log的等级有Verbose,Debug,Info,Warn,Error。

2015-01-31 17:36:39 1440

转载 安卓开发之常见死机问题--log分析

一般在平时工作中,基本上很多代码可以在eclipse+ndk进行调试,但如果需要用到具体的硬件设备,如媒体播放设备无法模拟的情况下,只能上硬件(盒子或手机)上进行调试。此时唯一的调试手段就是logcat产生log信息进行分析问题了。  什么时候会有Log文件的产生 ?一般在如下几种情况会产生log文件 。  1、程序异常退出 uncaused exception  2、程序强制关闭 F

2014-12-13 16:23:52 979

转载 浅谈ANR及log分析ANR

一:什么是ANRANR:Application Not Responding,即应用无响应二:ANR的类型ANR一般有三种类型:1:KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应2:BroadcastTimeout(10 seconds)BroadcastReceiver在

2014-12-13 16:09:14 843

转载 Android调试方法

Android调试方法   1 dump虚拟内存     cat /proc/xxxx/maps     虚拟内存的位置可能有如下地方:     -内核的defconfig文件     -build/core/prelink-linux-arm.map     -build/tools/apriori/prelinkmap.c     -bionic/linke

2014-12-13 15:26:26 783

转载 Measuring kernel latencies to ensure real-time constraints

Device drivers in the kernel often need to perform some task in response to some events. To do this, there is not one but many different ways. These deferred execution methods include the Linux workqu

2014-12-13 14:34:17 888

转载 Android Tombstone/Crash的log分析和定位

有一句话叫做常在河边走,哪有不湿鞋。我们这些研究和开发Android的工程师正应了这句话,相必大家在调试的时候经常会遇到这么个东西吧*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***Build fingerprint: 'XXXXXXXXX'pid: 1658, tid: 13086  >>> system_s

2014-12-13 14:04:15 853

转载 Android 调试中 addr2line 工具的使用

我们在解bug的时候经常能碰到一些段错误。下面是我从一个bug的log中截取的一个段错误://////////////////////////////////////////////////////////////////////////////////////////////////////  08-19 19:08:27.132  2105  2105 I DEBUG   

2014-12-13 13:53:35 2128

原创 Audio笔记之AudioSystem::getOutput

audio_io_handle_t AudioSystem::getOutput(audio_stream_type_t stream, uint32_t samplingRate, audio_format_t format,

2014-12-07 02:11:58 3053

原创 Audio笔记之耳机插拔检测

System Server是Android系统的核心,他在Dalvik虚拟机启动后立即开始初始化和运行。其它的系统服务在System Server进程的环境中运行。在main函数中,首先检查系统时间设置和SamplingProfiler。然后加载一个叫android_servers的本地库,他提供本地方法的接口(源程序在framework/base/services/jni/目录中)。然后调用

2014-12-07 01:40:50 5630

原创 Audio笔记之MediaPlayerService:prepare

status_t MediaPlayer::prepare(){ ALOGV("prepare"); Mutex::Autolock _l(mLock); mLockThreadId = getThreadId(); if (mPrepareSync) { mLockThreadId = 0; return -EALREADY;

2014-12-01 00:04:11 910

原创 Audio笔记之MediaPlayerService启动

int main(int argc, char** argv){ signal(SIGPIPE, SIG_IGN); char value[PROPERTY_VALUE_MAX]; bool doLog = (property_get("ro.test_harness", value, "0") > 0) && (atoi(value) == 1); pid_t

2014-11-16 15:10:01 1457

原创 Audio笔记之ServiceManager

我们知道,Service Manager在Binder机制中既充当守护进程的角色,同时它也充当着Server角色,然而它又与一般的Server不一样。对于普通的Server来说,Client如果想要获得Server的远程接口,那么必须通过Service Manager远程接口提供的getService接口来获得,这本身就是一个使用Binder机制来进行进程间通信的过程。而对于Service Man

2014-11-16 13:44:38 648

原创 Audio笔记之MediaPlayerService:setDataSource

MediaPlayer mp = new MediaPlayer();mp.setDataSource(PATH_TO_FILE); ...... (1)mp.prepare(); ........................ (2)、(3)mp.start(); .......................... (4)

2014-11-15 22:00:30 1765

原创 Audio笔记之SoftAAC2

SoftAAC2::SoftAAC2( const char *name, const OMX_CALLBACKTYPE *callbacks, OMX_PTR appData, OMX_COMPONENTTYPE **component) : SimpleSoftOMXComponent(name, callbacks, a

2014-11-05 10:34:19 4101

原创 Audio笔记之AudioEffect

public AudioEffect(UUID type, UUID uuid, int priority, int audioSession) throws IllegalArgumentException, UnsupportedOperationException, RuntimeException { int[] id = n

2014-11-01 22:55:36 2897

原创 Audio笔记之EffectChain::process_l

void AudioFlinger::EffectModule::process(){ Mutex::Autolock _l(mLock); if (mState == DESTROYED || mEffectInterface == NULL || mConfig.inputCfg.buffer.raw == NULL || m

2014-10-31 21:18:13 1646

原创 Audio笔记之AudioFlinger::AsyncCallbackThread

AudioFlinger::AsyncCallbackThread::AsyncCallbackThread( const wp& playbackThread) : Thread(false /*canCallJava*/), mPlaybackThread(playbackThread), mWriteAckSequence(0),

2014-10-28 15:26:39 1297

原创 Audio笔记之MixerThread::threadLoop_mix

void AudioMixer::process(int64_t pts){ mState.hook(&mState, pts);}

2014-10-28 11:17:55 2205

原创 Audio笔记之PlaybackThread::threadLoop

bool AudioFlinger::PlaybackThread::threadLoop(){ Vector > tracksToRemove; standbyTime = systemTime(); // MIXER nsecs_t lastWarning = 0; // DUPLICATING // FIXME could this b

2014-10-27 17:32:54 6397

原创 Audio笔记之AudioTrack::play

public void play() throws IllegalStateException { if (mState != STATE_INITIALIZED) { throw new IllegalStateException("play() called on uninitialized AudioTrack."); }

2014-10-27 17:19:29 3850

原创 Audio笔记之AudioTrack::write

public int write(byte[] audioData, int offsetInBytes, int sizeInBytes) { if (mState == STATE_UNINITIALIZED) { return ERROR_INVALID_OPERATION; } if ( (audioData ==

2014-10-27 17:08:15 6622

原创 Audio笔记之Track::attachAuxEffect

status_t AudioTrack::createTrack_l( audio_stream_type_t streamType, uint32_t sampleRate, audio_format_t format, size_t frameCount, audio_output_flags_t flags,

2014-10-22 18:04:14 2392 1

原创 Audio笔记之AudioTrackThread

{ // initialize the native AudioTrack object switch (memoryMode) { case MODE_STREAM: //STREAM模式,现在没有申请共享内存,后续Track对象通过 //AudioFlinger中的Client对象申请heap空间给mCblk进行数据传输

2014-10-22 09:09:56 10182

原创 Audio笔记之AudioTrack

/*cts/tests/tests/media/src/android/media/cts*/ public voidtestSetStereoVolumeMax() throwsException { final String TEST_NAME= "testSetStereoVolumeMax"; final int TEST_SR =22050

2014-10-21 20:55:13 7846

原创 Audio笔记之MixerThread::prepareTracks_l

// prepareTracks_l() must be called with ThreadBase::mLock heldAudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTracks_l(        Vector > *tracksToRemove){    mixe

2014-10-20 23:58:05 3439

原创 Audio笔记之FastMixer

// FastMixer线程,负责进行mix fast track,从MonoPipe中获取数据,经过mix运算,输出到AudioStreamOutSink中 bool FastMixer::threadLoop() { static const FastMixerState initial; const FastMixerState *previous = &in

2014-10-20 17:11:53 5725

原创 Audio笔记之AudioFlinger::createTrack

static volatile int32_t nextTrackId = 55;// TrackBase constructor must be called with AudioFlinger::mLock heldAudioFlinger::ThreadBase::TrackBase::TrackBase(            ThreadBase *thread,  

2014-10-20 11:32:02 5677

原创 Audio笔记之MixerThread

AudioFlinger::PlaybackThread::PlaybackThread(const sp& audioFlinger, AudioStreamOut* output, audio_io_handle_t

2014-10-19 17:09:45 2439

原创 Audio笔记之AudioMixer

// Ensure mConfiguredNames bitmask is initialized properly on all architectures.// The value of 1 = 32.AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate, uint32_t maxNumTracks)   

2014-10-19 15:52:33 2470

转载 Android安全——权限机制

Android权限说明Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制,Android系统权限相关的内容,(一)linux文件系统上的权限-rwxr-x--x system  system       4156 2012-06-30 16:12 test.apk.代表的是相应的用户/用户组及其他人对此文件的访问权限,与

2014-06-14 21:17:54 2313

转载 Android安全——Root机制

怎样使androidapk 获取system权限最近在回答客户的问题时,提到怎么将apk 升级到root权限。 1.一般权限的添加一般情况下,设定apk的权限,可在AndroidManifest.xml中添加android:sharedUserId="android.uid.xxx>例如: 给apk添加system权限    ... ...   android:sh

2014-06-14 20:26:04 1790

转载 Android安全——签名机制

Android签名机制    为了说明APK签名比对对软件安全的有效性,我们有必要了解一下Android APK的签名机制。为了更易于大家理解,我们从Auto-Sign工具的一条批处理命令说起。在《APK Crack》一文中,我们了解到,要签名一个没有签名过的APK,可以使用一个叫作Auto-sign的工具。Auto-sign工具实际运行的是一个叫做Sign.bat的批处理命令。用文本编辑

2014-06-14 18:06:58 1452

转载 Android系统启动流程 -- android

第三部分:Android启动    Android的启动过程是从进程init开始的,所以它是后续所有进程的祖先进程。一、init进程源码位于system/core/init目录。主要做了以下事情:1.     重新设置子进程终止时信号SIGCHLD的处理函数。act.sa_handler = sigchld_handler;  //调用了wait函数等待子进程退出。act.

2014-06-14 12:10:06 745

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除