2016-11-07 59 views
0

Android會打開我的音頻HAL輸入流,然後立即關閉它。 請幫我弄清楚缺少的東西。新音頻HAL不支持Nexus播放器

背景

這是延續上一個previous question here 我能夠音頻HAL成功加載到Vloop工作的Nexus 7和讀寫音頻會議討論了Nexus 7平板電腦工作。

信息當前的問題:

在引導過程中,或在連接內置麥克風(通過調用setDeviceConnectionState)我觀察到的輸入流被打開,一些參數被讀取,然後inpuit流及時關閉。

此後,Google/Youtube無法從我的HAL讀取音頻。

以下是我的跟蹤日誌:

11-07 14:05:10.321 277-1263/? E/ATVAudioPolicyManager: setDeviceConnectionState 80000004 1 0 
11-07 14:05:10.321 277-1263/? D/audio_vloop: adev_open_input_stream(): 1546 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_sample_rate(): 1008 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_sample_rate(): samprate: 48000 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_channels(): 1047 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_channels: 0x0000000C 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_format(): 1059 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_format: 0x00000001 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_format(): 1059 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_format: 0x00000001 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_channels(): 1047 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_channels: 0x0000000C 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_buffer_size(): 1035 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_buffer_size: 4800 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_buffer_size(): 1035 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_buffer_size: 4800 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_format(): 1059 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_format: 0x00000001 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_sample_rate(): 1008 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_sample_rate(): samprate: 48000 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_channels(): 1047 
11-07 14:05:10.322 277-1263/? D/audio_vloop: in_get_channels: 0x0000000C 
11-07 14:05:10.323 277-2820/? I/AudioFlinger: AudioFlinger's thread 0xf314f008 ready to run 
11-07 14:05:10.323 277-2820/? D/audio_vloop: in_standby(): 1089 
11-07 14:05:10.323 277-2819/? D/audio_vloop: looper_in_thread(): 218: Entered 
11-07 14:05:10.324 277-2820/? D/audio_vloop: in_standby(): 1089 
11-07 14:05:10.325 277-2820/? D/audio_vloop: in_set_parameters(): 1150: [0] 
11-07 14:05:10.325 277-369/? D/audio_vloop: adev_set_parameters(): [0=;connect=-2147483644] 
11-07 14:05:10.327 277-1263/? D/audio_vloop: adev_close_input_stream(): 1638 
11-07 14:05:10.327 2781-2781/? D/AudioPlayer: ConnectLineIn(): 0 

這些只是跟蹤日誌,告訴什麼是所謂的,在某些情況下,我回到什麼。 我將所有這些功能的成功返回給Android。

在audio_policy.conf,我加了這一點:

global_configuration { 
    attached_output_devices AUDIO_DEVICE_OUT_SPEAKER 
    default_output_device AUDIO_DEVICE_OUT_SPEAKER 
    attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_REMOTE_SUBMIX 
} 

vloop { 
    inputs { 
     vloop { 
     sampling_rates 48000 
     channel_masks AUDIO_CHANNEL_IN_STEREO 
     formats AUDIO_FORMAT_PCM_16_BIT 
     devices AUDIO_DEVICE_IN_BUILTIN_MIC 
     } 
    } 
    outputs { 
     vloop { 
     sampling_rates 48000 
     channel_masks AUDIO_CHANNEL_OUT_STEREO 
     formats AUDIO_FORMAT_PCM_16_BIT 
     devices AUDIO_DEVICE_OUT_LINE 
     } 
    } 
    } 

回答

0

我意識到這是我的代碼/ conf目錄外的問題,所以主要嫌疑人音頻策略管理器(APM) 。

我去了徹底的APM代碼,發現沒有不尋常的問題。然後我意識到我實際上被USE_CUSTOM_AUDIO_POLICY標誌device.mk在fugu文件夾中困惑。此標誌禁用默認APM並啓用Qualcomm APM。 (搜索槽源)

花了一些時間來認識到河豚的APM是不是高通APM,但它位於/device/asus/fugu/libaudio/

修改ATVAudioPolicyManager.cpp這裏來解決該問題。

變形例是如下:在

功能

audio_devices_t ATVAudioPolicyManager::getDeviceForInputSource(audio_source_t inputSource)

添加

以下到條件:

else if (availableDeviceTypes & AUDIO_DEVICE_IN_BUILTIN_MIC) { 
      ALOGV("Use Builtin mic input"); 
      device = AUDIO_DEVICE_IN_BUILTIN_MIC; 
}