AudioSystem 클래스는 stream 유형, 오디오 형식, 오디오 채널 등을 포함한 일괄 목록을 정의합니다.
함수 getaudio_flinger에서 Audio Flinger를 가져와서 Audio Flinger Client 대상을 만들고 Audio Flinger의 함수인register Client를 호출해서 Audio Flinger Client를 등록합니다.
그 다음에 함수의 실현은 기본적으로 오디오 Flinger Client의 함수를 호출함으로써 이루어진다.
포함(열의 불완전):
muteMicrophone
isMicrophoneMuted
setMasterVolume
setMasterMute
getMasterVolume
getMasterMute
setStreamVolume
setStreamMute
getStreamVolume
getStreamMute
setMode
isStreamActive
setParameters
getParameters
setVoiceVolume
함수 getaudio_policy_서비스에서 AudioPolicy Service를 가져오고 AudioPolicy Service Client 대상을 만들고 AudioPolicy Service 함수인 linkToDeath를 호출하여 연결을 완료합니다.
다음 부분의 함수는 AudioPolicy Service의 함수를 호출하여 실현됩니다.setDeviceConnectionState
getDeviceConnectionState
setPhoneState
setRingerMode
setForceUse
getForceUse
getOutput
startOutput
stopOutput
releaseOutput
getInput
startInput
stopInput
releaseInput
initStreamVolume
setStreamVolumeIndex
getOutputForEffect
registerEffect
unregisterEffect
AudioFlinger 클래스
Binder Service
와 BnAudio Flinger를 계승합니다.몇몇 매거 상량을 정의했다.hardware_call_state : AUDIO_HW_OUTPUT_OPEN 등 트랙state: RESUMING 등 클래스PlaybackThread:public ThreadBase에서 사용하는 상수:enum type {MIXER,DIRECT,DUPLICATING}; enum mixer_state { MIXER_IDLE, MIXER_TRACKS_ENABLED, MIXER_TRACKS_READY }; 구조 함수 중: 호출 함수 AudioHardwareInterface::create () 를 사용하여 AudioHardware를 만듭니다. 그 다음 구현은 기본적으로 이 AudioHardware 대상을 호출해서 완성합니다. 두 가지 DefaultKeyedVector 유형의 구성원 변수가 있습니다. mPlaybackThreads: 재생 스레드를 기록합니다.mRecordThreads: 레코드 스레드를 기록합니다.DefaultKeyedVector< int, sp> mPlaybackThreads; DefaultKeyedVector< int, sp> mRecordThreads; 함수 checkPlaybackThreadl 및 함수 checkRecordThreadl mPlaybackThreads와 mRecordThreads에 기록된 스레드를 각각 번호별로 반환합니다.함수 checkMixerThreadl 반환된 것도 mPlaybackThreads에 기록된 스레드이지만 반환 값을 MixerThread 형식의 바늘로 변환합니다.함수createTrack에서 먼저 함수 checkPlaybackThread 를 호출합니다.l 재생 라인을 가져옵니다.output은 함수createTrack을 호출할 때 들어오는 인자입니다.PlaybackThread *thread = checkPlaybackThread_l(output); 그런 다음 PlaybackThread 함수를 호출합니다createTrackl track을 만듭니다. sp track; track = thread->createTrack_l(client, streamType, sampleRate, format, channelCount, frameCount, sharedBuffer, lSessionId, &lStatus); 그리고 트랙을 매개 변수로 rackHandle sp 트랙Handle 만들기;trackHandle = new TrackHandle(track); 마지막으로 트랙핸들을 반환값으로 되돌려줍니다.다음 몇 개 함수의 실현 방법은 유사하다. 모두 먼저 함수 checkPlaybackThread 를 호출한다.l 재생 라인을 가져옵니다.output은 각 함수의 입력 매개 변수입니다.PlaybackThread *thread = checkPlaybackThread_l(output); 그런 다음 PlaybackThread에 해당하는 함수를 호출하여 기능을 수행합니다.SampleRate channel Count format frame Count latency 다음은 setMaster Volume과 setMode 같은 두 가지 실현 방법이 있습니다.모두 mAudioHardware의 대응 함수를 먼저 호출한 다음 mPlaybackThreads의 대응 함수를 호출합니다.예를 들어, 함수 setMasterVolume: mAudioHardware->setMasterVolume(value) for(uint32 t i = 0; i < mPlaybackThreads.size();i++) mPlaybackThreads.valueAt(i)->setMasterVolume(value); 이를 통해 알 수 있듯이 mAudioHardware의 함수 호출은 하드웨어에 대한 작업을 완성했고 mPlaybackThreads의 함수 호출은 audioflinger 층이 저장된 상태를 수정했다.다음 두 함수는 setMicMute와 getMicMute입니다. 모두 mAudioHardware의 함수를 호출해서 이루어집니다. 함수 setMasterMute에서 mPlaybackThreads의 각 스레드를 옮겨다니며 각각 setMasterMute 함수를 호출합니다. for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) mPlaybackThreads.valueAt(i)->setMasterMute(muted); 따라서 MasterMute는 모든 재생 스레드를 제어합니다.다음 두 함수는 각각 대응하는 구성원 변수를 되돌려줍니다.다음은 함수 setStreamVolume입니다. 만약 전송된 output이 0이 아니라면 함수 checkPlaybackThread 를 호출합니다.l 대응하는 스레드를 가져오고 이 스레드의 setStreamVolume 함수를 호출합니다.그렇지 않으면 mPlaybackThreads를 옮겨다니며 각 스레드의 setStreamVolume 함수를 호출합니다.함수 setStreamMute, mPlaybackThreads를 옮겨다니며 각 스레드의 setStreamMute 함수를 호출합니다.함수streamVolume에서 들어오는 output 매개 변수가 0이 아니면 함수 checkPlaybackThread 를 호출합니다.l 대응하는 루틴을 가져오고 이 루틴의streamVolume 함수를 호출하여 결과를 반환값으로 되돌려줍니다.입력한 output이 0이면 구성원 변수 배열 mStreamTypes가stream에 대한volume를 가져와 되돌려줍니다.구성원 변수 배열 mStreamTypes의 정의:PlaybackThread::streamtype_t mStreamTypes[AudioSystem::NUM_STREAM_TYPES]; 함수 streamMute, 구성원 변수 배열 mStreamTypes의 stream mute를 추출하고 반환합니다.함수 isStreamActive, mPlaybackThreads를 옮겨다니며 각 라인의 isStreamActive를 호출합니다. 함수 isStreamActive가true로 되돌아올 때 순환을 종료하고true로 돌아갑니다.반복이 끝나면true가 없으면 false로 돌아갑니다.함수 setParameters에서 ioHandle이 0이면 매개 변수가 전체 audio hardware 인터페이스에 유효하다는 뜻으로 mAudio Hardware의 함수 setParameters를 호출하고 결과를 되돌려줍니다.result = mAudioHardware->setParameters(keyValuePairs); 그렇지 않으면 함수 checkPlaybackThread 호출l 및 checkRecordThreadl ioHandle에 대응하는 스레드를 가져오고 스레드의 setParameters 함수를 호출합니다.함수 getParameters의 처리는 함수 setParameters와 유사합니다.ioHandle이 0이면 mAudioHardware 함수 getParameters를 호출하고 반환합니다.그렇지 않으면 checkPlaybackThread 호출l 및 checkRecordThreadl, 대응하는 스레드를 가져오고 대응하는 스레드의 getParameters 함수를 호출합니다.함수 getInputBufferSize, mAudioHardware의 getInputBufferSize 함수를 직접 호출하고 되돌려줍니다.함수 getInputFramesLost, checkRecordThread 호출l 녹음 루틴을 가져오고 루틴의 getInputFramesLost 함수를 호출합니다.함수 setVoiceVolume, mAudioHardware의 setVoiceVolume 함수를 직접 호출하고 결과를 되돌려줍니다.getRenderPosition ,
checkPlaybackThread_l , getRenderPosition 。
registerClient,
pid:
int pid = IPCThreadState::self()->getCallingPid();
NotificationClient :
sp<NotificationClient> notificationClient = new NotificationClient(this,client,pid);
mNotificationClients add , notificationClient :
mNotificationClients.add(pid, notificationClient)
mPlaybackThreads, sendConfigEvent AudioSystem::OUTPUT_OPENED 。
mRecordThreads, sendConfigEvent , AudioSystem::INPUT_OPENED 。
removeNotificationClient,
mNotificationClients removeItem , item。
audioConfigChanged_l,
mNotificationClients, notification client ioConfigChanged 。
AudioFlinger::mLock , AudioFlinger::mLock 。
removeClient_l,
mClients removeItem, item。
createTrack,openRecord createEffect mClients add item。
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법
즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.