2 回答

TA貢獻1779條經(jīng)驗 獲得超6個贊
setPreviewCallbackWithBuffer
沒有工作,因為緩沖區(qū)太小。直到我擺脫了“BufferQueue 已被放棄”錯誤,我才看到錯誤。緩沖區(qū)太小的原因是:
我沒有查詢預覽大小,我只是使用了我設置預覽大小的值
我打電話給
Camera.Parameters#setRecordingHint(true)
,它將我的分辨率(可能還有其他設置)鎖定為硬編碼值。這個分辨率和我選擇的不一樣,所以我的緩沖區(qū)確實太小了。

TA貢獻1830條經(jīng)驗 獲得超9個贊
回復:虛擬預覽紋理,這是您可以獲得的最佳解決方法。官方 API 要求必須在某個地方進行預覽,并且大多數(shù)設備都會執(zhí)行此策略。
無法在運行時檢查設備是否在沒有“接收器”(表面或紋理)可供繪制的情況下提供實時預覽。在其他類似情況下,我們被迫根據(jù) QA 實驗室實驗和最終用戶投訴維護設備的白名單和黑名單。對于某些功能,該技術是在您的應用程序(在特定設備上)第一次運行時嘗試最佳設置,如果它崩潰或失敗,則在第二次嘗試時使用效率較低的替代方案,并將此標志保留在未來發(fā)布的SharedPreferences。
幸運的是,添加一個虛擬SurfaceTexture不會對性能產(chǎn)生負面影響,即使在沒有它也可以工作的設備上也是如此。
為避免出現(xiàn)“BufferQueue 已被放棄”錯誤,請將虛擬SurfaceTexture作為字段添加到您的活動或片段中。
添加回答
舉報