2014-01-23 49 views
0

我使用ExtAudioFile接口來解碼音頻,並想知道它是否曾使用硬件輔助的音頻解碼。ExtAudioFile API是否使用硬件來解碼音頻?

kExtAudioFileProperty_CodecManufacturer屬性的文件說:

使用該屬性的iOS中通過指定kAppleHardwareAudioCodecManufacturer或kAppleSoftwareAudioCodecManufacturer硬件或軟件編碼器之間進行選擇。

這似乎表明ExtAudioFile確實可以利用解碼硬件。

在其他地方,在音頻格式服務的文檔,我發現:在播放時或錄製使用音頻隊列服務或使用的接口,如AV Foundation,它使用音頻

基於硬件的編解碼器只能使用隊列服務。特別是,您不能在OpenAL或使用I/O音頻單元時使用基於硬件的音頻編解碼器。

......這不完全清楚;如果ExtAudioFile在其實現中使用音頻隊列服務,那麼它可以使用硬件,但我們實際上並不知道它是如何實現的。

我試着在運行時測試硬件是否正在使用,但這本身證明很困難。音頻格式服務參考中給出的一種方法是使用AudioFormatGetProperty來測試kAudioFormatProperty_HardwareCodecCapabilities屬性。但示例代碼不起作用,總是返回kAudioFormatUnsupportedPropertyError。 (網上搜索後,我發現從誰擁有這個問題的人一些其他的問題,但沒有使用它曾經成功的報道。)

所以...我想知道如果任何人以任何方式來測試一定知道無論硬件解碼器當前是否處於活動狀態(在這種情況下,我可以自己測試ExtAudioFile是否正在使用它)。或者,如果有人對ExtAudioFile是否使用硬件有任何明確的瞭解(不完全基於Apple文檔中的模糊提及)。

回答

0

ExtAudioFileSetProperty()指定kAppleHardwareAudioCodecManufacturer似乎啓用硬件解碼,因爲它沒有與kAudioConverterErr_HardwareInUse時已經有與該編解碼器設置一個音頻文件打開,並與kAudioQueueErr_InvalidCodecAccess當音頻類別設置爲一個不(根據文檔)啓用硬件解碼。

然而,隨着儀器剖析後,我發現,表現略糟糕硬件解碼啓用,這是我仍然無法解釋......

+0

性能更糟糕的是可能因爲硬件解碼器的電池優化節省,而不是解碼速度。 –

相關問題