2013-05-31 54 views
0

我面臨着一個我無法解決的奇怪問題。 我在android上使用SDL來顯示由ffmpeg解碼的幀。 如果在主fonction直接創建SDL渲染器,然後初始化,沒有煩惱爲什麼Android SDL_SetVideoMode在主線程未被調用時崩潰?

05-31 09:24:11.442: V/SDL(11376): pixel format RGB_565 
05-31 09:24:11.442: I/SDL(11376): SDL_Android_Init() 
05-31 09:24:11.442: I/Main(11376): Entering main 
05-31 09:24:13.817: I/SDLRenderer(11376): Entering SDLRenderer::init 
05-31 09:24:13.817: I/SDLRenderer(11376): SDLRenderer::init -> About to create screen with w=704 h=480 
05-31 09:24:13.817: I/SDL(11376): [STUB] GL_LoadLibrary 
05-31 09:24:13.822: V/SDL(11376): Starting up OpenGL ES 2.0 
05-31 09:24:13.827: D/libEGL(11376): loaded /system/lib/egl/libEGL_mali.so 
05-31 09:24:13.832: D/libEGL(11376): loaded /system/lib/egl/libGLESv1_CM_mali.so 
05-31 09:24:13.832: D/libEGL(11376): loaded /system/lib/egl/libGLESv2_mali.so 
05-31 09:24:13.837: D/(11376): Device driver API match 
05-31 09:24:13.837: D/(11376): Device driver API version: 10 
05-31 09:24:13.837: D/(11376): User space API version: 10 
05-31 09:24:13.837: D/(11376): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Fri May 4 10:32:42 KST 2012 
05-31 09:24:13.862: I/SDL(11376): [STUB] GL_SetSwapInterval 
05-31 09:24:13.862: I/SDL(11376): [STUB] GL_GetSwapInterval 
05-31 09:24:13.932: I/SDLRenderer(11376): SDLRenderer::init -> screen created with w=704 h=480 
05-31 09:24:13.932: I/SDLRenderer(11376): SDLRenderer::init -> About to create YUV Overlay with SDL_YV12_OVERLAY and w=704 h=480 
05-31 09:24:13.932: I/SDLRenderer(11376): SDLRenderer::init -> YUV Overlay created with SDL_YV12_OVERLAY and w=704 h=480 

,但如果在主函數中,我創建一個線程,做以前的工作(創建渲染並對其進行初始化)它崩潰..

05-31 10:33:04.462: V/SDL(23043): pixel format RGB_565 
05-31 10:33:04.462: I/SDL(23043): SDL_Android_Init() 
05-31 10:33:04.462: I/Main(23043): Entering main 
05-31 10:33:05.882: I/Main(23043): Main: About to create thread DecodeVideo 
05-31 10:33:05.882: I/Main(23043): Starting DecodeVideo 
05-31 10:33:06.457: I/SDLRenderer(23043): Entering SDLRenderer::init 
05-31 10:33:06.462: I/SDLRenderer(23043): SDLRenderer::init -> About to create screen with w=704 h=480 
05-31 10:33:06.462: I/SDL(23043): [STUB] GL_LoadLibrary 
05-31 10:33:06.462: A/libc(23043): Fatal signal 11 (SIGSEGV) at 0x00000364 (code=1) 

是否有人知道是否有一些特別的東西做的解決? 謝謝。 Zbb

回答

1

來自documentation的報價。

*注3:應在應用程序的主線程中調用此函數。 *

+0

不能有更好的答案......我很困惑。我相信我讀過這個文檔有一千次,但從未注意過這些筆記。很多感謝指出我這個「細節......」 – zebeubeul

+0

至少在1.2.x中是這樣的(有些文檔可能沒有提及它?)sdl.beuc.net/sdl.wiki/SDL_SetVideoMode確實。無論如何對我來說,這是一個掛起,而不是崩潰。 SDL_WM_SetCaption也會導致來自單獨線程的掛起。我通過反覆試驗發現,在Windows上,只要該線程是最初調用SDL_Init的線程,就可以在任何線程中調用該線程,所以... FWIW。 – rogerdpack

相關問題