[問題] ndk AnativeWindowfromSurface
最近正在嘗試在ndk上使用ffmpeg 加上 libstagefright寫出一個簡單的player
歷經千辛萬苦終於搞定了.mk 與sharelibrary 需要的各式路徑跟include檔案
成功編譯完成
但目前遇到一個很神奇的問題
我仿造Awesomeplayer的方法開啟OMXclient
將decoder設為 OMXcodec
接著讀取檔案並解出一張frame的資料進MediaBuffer
然後設定timestamp (native_window_set_buffers_timestamp
最後將oputbuffer丟進 queueBuffer內等待顯示
但Runtime的時候出現 SIGESEGV code=1(SEGV_MAPPERR) at 0x0000000000
研究了一下執行流程
發現是在 mNativeWindow->queueBuffer 的地方出錯
mNativeWindow->queueBuffer 居然是指向NULL
我一併確認了一些函式同樣包含在SurfaceTextureClient內的
例如 perform(非Null, query(非Null, dqueuebuffer(NULL)
想請問為啥會這樣?
難道我不該使用
sp<aNativeWindow> mNativeWinodw
= ANativeWindow_fromSurface(env, jsurface);
的方法將Surface傳遞下來?
之後我也有嘗試在Decorder解出一張frame後用Nativewindow API畫一張白色的畫面
但是看似OMXcodec佔用了mNativeWindow,所以我一執行
NativeWindow_lock 就會出錯
現在我在思考到底是我使用的OMXcodec出了問題
或是我對ANativeWindow類的理解錯誤
還是有啥奇怪的環境問題沒設定好
各位大大有想法嗎 Q.Q
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.156.244
※ 編輯: paul0904 來自: 140.117.156.244 (06/05 02:10)