2013-05-31 2 views
0

Я столкнулся с странной проблемой, которую я не могу решить. Я использую SDL на android для отображения фреймов, декодированных ffmpeg. Если SDL рендерер создан непосредственно в главном fonction, а затем инициализируется, нет никаких проблемПочему 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

Смежные вопросы