2013-05-31 52 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

相关问题