国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
錄音相關(guān)的處理流程

http://blog.csdn.net/ameyume/article/details/7794953
2012
一.AudioRecord錄音的初始化設(shè)置

AudioRecord::set
 ->
AudioSystem::getInput
 ->
調(diào)用IAudioPolicyService.cpp文件中的
BpAudioPolicyService的getInput函數(shù)
    remote()->transact(GET_INPUT, data, &reply);
  1. BnAudioPolicyService::onTransact(  
  2. case GET_INPUT:  
  3.     audio_io_handle_t input = getInput(inputSource,  
  4.                                    samplingRate,  
  5.                                    format,  
  6.                                    channels,  
  7.                                    acoustics); // 調(diào)用的是AudioPolicyService::getInput函數(shù)  
 ->
AudioPolicyService::getInput
 ->
AudioPolicyManagerBase::getInput
    mpClientInterface->openInput
 ->
AudioPolicyService::openInput
 ->
BpAudioFlinger的openInput函數(shù)
 ->
AudioFlinger::openInput
    mAudioHardware->openInputStream
 ->
  1. AudioHardwareALSA::openInputStream  
  2.     err = mALSADevice->open(&(*it), devices, mode(), 0);  
  3.   
  4.     in = new AudioStreamInALSA(this, &(*it), acoustics);  
  5.     err = in->set(format, channels, sampleRate);  
 ->
alsa_default.cpp
調(diào)用s_open函數(shù)
  1. ALSAStreamOps::set  
  2.     if (rate && *rate > 0) {  
  3.         if (mHandle->sampleRate != *rate) {  
  4.             LOGE("%s L%d  mHandle->sampleRate = %d, return BAD_VALUE %d ", __FUNCTION__, __LINE__,   mHandle->sampleRate, BAD_VALUE);  
  5.             return BAD_VALUE;  
  6.         }  
  7.     }  
E/AudioHardwareALSA( 1181): set L123  mHandle->sampleRate = 8000, return BAD_VALUE -22 // 如果采樣率不是8000,則返回BAD_VALUE
E/AudioHardwareALSA( 1181): openInputStream L314 in->set err = -22
// BAD_VALUE的定義是
BAD_VALUE           = -EINVAL,
#define EINVAL        3
按照以上定義,BAD_VALUE的值應(yīng)該是-3,但log輸出的值是-22,很奇怪。

----------------------------------------------------------------------------------
二.錄音start函數(shù)的處理流程
1.如果是錄像,則錄像中的音頻錄制的調(diào)用順序是:
MPEG4Writer::start
->
MPEG4Writer::startWriterThread()
->
MPEG4Writer::startTracks
->
MPEG4Writer::Track::start
->
錄像時,video track是CameraSource,即調(diào)用CameraSource::start函數(shù)
audio track是AMRNBEncoder,即調(diào)用AMRNBEncoder::start函數(shù)
->
2.如果是單純的錄音操作,則直接走下面的路程:
AudioSource::start
->
AudioRecord::start()
->
IAudioRecord::start()
如果返回值為DEAD_OBJECT,則調(diào)用
->
AudioRecord::openRecord
  ->
  AudioFlinger::openRecord
  ->
  返回RecordHandle對象
  ->
  AudioFlinger::RecordHandle::start()
  ->
  AudioFlinger::RecordThread::start
  ->
  AudioSystem::startInput(mId);
  ->
  AudioPolicyService::startInput
  ->
  AudioPolicyManagerBase::startInput

如果AudioRecord::openRecord返回NO_ERROR,則繼續(xù)調(diào)用IAudioRecord::start()
如果IAudioRecord::start()返回NO_ERROR,則啟動ClientRecordThread線程。

----------------------------------------------------------------------------------
三.AudioRecord開始錄音的處理流程
1.frameworks\base\media\java\android\media\AudioRecord.java文件中的
startRecording()函數(shù)
  1. // start recording  
  2. synchronized(mRecordingStateLock) { // 一直處于同步狀態(tài),同一時間只能有一個錄音  
  3.     if (native_start() == SUCCESS) { // 調(diào)用native方法  
  4.         mRecordingState = RECORDSTATE_RECORDING;  
  5.     }  
  6. }  
->
2.native_start對應(yīng)frameworks\base\core\jni\android_media_AudioRecord.cpp文件中的
android_media_AudioRecord_start 函數(shù)
取得AudioRecord對象lpRecorder,然后調(diào)用lpRecorder->start()的函數(shù),開始錄音
->
3.frameworks\base\media\libmedia\AudioRecord.cpp文件的
AudioRecord::start()函數(shù)
3.1 取得ClientRecordThread對象t
3.2 調(diào)用IAudioRecord對象mAudioRecord->start()
(1)如果返回DEAD_OBJECT,則執(zhí)行AudioRecord::openRecord函數(shù),調(diào)用IAudioFlinger的openRecord函數(shù)打開錄音設(shè)備,然后再執(zhí)行mAudioRecord->start()開始錄音


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
AudiFlinger和AudioRecord簡述
Android Audio 數(shù)據(jù)流詳解 - forest的日志 - 網(wǎng)易博客
android usb掛載分析
Thread.start() ,工作這么久,還不知道它是怎么讓線程跑起來的!
Android音頻處理的基本接口
android語音錄制和壓縮
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服