2017-05-28 125 views
0

更新:問題是關於相機2誰在SurfaceTexture中渲染時從相機旋轉框架?

我想弄清楚誰是在SurfaceTexture上繪製相機預覽時應用旋轉變換。

當請求從相機預覽大小,你總是對其中寬度高度較大(因爲風景拍照時是通常的方向)。

當使用在縱向模式的設備和設置預覽大小(前1600 X1200)來自攝像機的幀正確地旋轉,但我不能找出它做了,是什麼事情CameraDevice並自動根據表面類型?或者是旋轉圖像的SurfaceTexture

回答

1

答案取決於一點你使用哪個攝像頭API;既然你提到CameraDevice,我認爲你的意思是camera2。

在camera2,的目標之一是在可能的情況,以簡化所述旋轉處理;所以如果您將預覽繪製到SurfaceView中,攝像頭服務和硬件合成器/ GPU協作併爲您處理所有旋轉。您總是從傳感器請求橫向分辨率(與傳感器的長邊對齊,以匹配設備的長邊),並且您只需確保SurfaceView的縱橫比與請求分辨率的縱橫比相匹配(因此在縱向,您需要9:16視圖才能正確顯示1080p;在橫向上,您需要16:9視圖)。

對於TextureView,並完全自定義的GL與表面紋理繪製,該API無法做到這一切爲你。 SurfaceTexture的變換由相機API設置,以將相機輸出旋轉到設備的原生方向(通常手機肖像,某些平板電腦的橫向),但如果您的應用的UI未處於原生方向,則無法處理額外旋轉。

在這種情況下,你需要得到來自SurfaceTexure變換矩陣,申請額外的旋轉,以配合您的應用程序的用戶界面,並設置爲TextureView矩陣。

+0

我正在尋找關於相機服務和GPU「合作」的確認。謝謝 –

0

它已經一年左右,因爲我曾在相機的東西,所以我對缺乏具體的道歉。但我記得顯示Camera preview時的關鍵是計算正確的變換矩陣,以應用於SurfaceView(或TextureView)以應用所需的任何縮放或旋轉。所以關於「誰在輪換」我想你可以說這是你的觀點,正如你提供的變換所指示的那樣。因此矩陣將基於您請求的預覽分辨率(來自您的設備的能力列表)與您的視圖的實際佈局尺寸之間的關係,以及設備傳感器與電流相比的物理方位設備屏幕的方向。

在舊照相機API,Camera.CameraInfo具有提供與該傳感器安裝在所述物理定向的定向字段。在大多數手機上安裝傳感器的傳感器通常爲90,但您也會發現其中有270個(實際上是「顛倒」)。 0和180可能存在,但我從未見過它們。