小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android在兩個進程之間共享SurfaceTexture

 印度阿三17 2019-05-19

是否可以在兩個進程之間共享SurfaceTexture,例如Activity和Service?

我想用TextureView創(chuàng)建一個Activity,并從一個單獨的Service更新它的SurfaceTexture.

到目前為止,我正在創(chuàng)建一個帶有生成的OpenGL紋理的SurfaceTexture(通過glGenTextures),然后我將這個表面紋理設置為我的TextureView:

mSurfaceTexture = new SurfaceTexture(texture_id);
mTextureView.setSurfaceTexture(mSurfaceTexture);

在活動上顯示此SurfaceTexture的相機預覽正常工作:

mCamera = Camera.open();
mCamera.setPreviewTexture(mTextureView.getSurfaceTexture());
mCamera.startPreview();

我想做同樣的事情,但是從一個單獨的服務,將texture_id傳遞給它,類似于:

mCamera = Camera.open();
mCamera.setPreviewTexture(new SurfaceTexture(texture_id));
mCamera.startPreview();

原因是我有一個單獨的進程調用私有api,需要SurfaceTexture來傳輸一些內容,并且可以通過應用程序中的aidl訪問此進程.

謝謝

解決方法:

系統(tǒng)支持執(zhí)行您想要的操作,但我不知道是否可以使用當前的公共API.

一些背景,以確保我們在同一頁…

Surface是生產者 – 消費者對的生產者.使用SurfaceTexture,應用程序可以訪問兩端.渲染到SurfaceTexture曲面的任何內容都將轉換為OpenGL ES“外部”紋理.

媒體和顯示API的工作方式是讓消費者創(chuàng)建對,然后將Surface交給應用程序.這就是為什么,如果你創(chuàng)建一個SurfaceView,你不能使用Surface,直到surfaceCreated()回調觸發(fā) – BufferQueue對象由系統(tǒng)圖形合成器(SurfaceFlinger)創(chuàng)建,生產者端通過Binder IPC傳遞給你的應用.對于MediaCodec編碼器的Surface輸入也是如此,它們由mediaserver進程創(chuàng)建.

您可以將SurfaceView或SurfaceTexture獲得的Surface傳遞給產生輸出的東西,例如Camera preview或MediaCodec解碼器.在引擎蓋下,這些通過IPC傳遞到mediaserver過程.生成幀時,圖形緩沖區(qū)通過引用傳遞給使用者. SurfaceFlinger顯示從SurfaceView獲取的幀,SurfaceTexture只是將它們轉換為紋理.

所以你想要做的是在app中創(chuàng)建一個SurfaceTexture,為它構造一個Surface,并將Surface傳遞給你的服務.您的服務會生成幀并將它們寫入Surface,這會將它們通過IPC發(fā)送到您應用中的SurfaceTexture消費者,這會將它們轉換為GLES紋理.

我沒有嘗試通過AIDL傳遞Surface,所以我不知道它是否真的有效.

在進程之間傳遞紋理ID將不起作用.如果在創(chuàng)建第二個上下文時將第一個上下文作為參數(shù)傳遞,則可以從兩個不同的EGLContex中訪問一個紋理,但我不認為這可能會跨進程工作.

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多