GF_Err SDLVid_Setup(struct _video_out *dr, void *os_handle, void *os_display, u32 init_flags) { SDLVID(); /*we don't allow SDL hack, not stable enough*/ //if (os_handle) SDLVid_SetHack(os_handle, 1); ctx->os_handle = os_handle; ctx->is_init = 0; ctx->output_3d_type = 0; ctx->force_alpha = (init_flags & GF_TERM_WINDOW_TRANSPARENT) ? 1 : 0; if (!SDLOUT_InitSDL()) return GF_IO_ERR; #ifdef SDL_WINDOW_THREAD ctx->sdl_th_state = SDL_STATE_STOPPED; gf_th_run(ctx->sdl_th, SDLVid_EventProc, dr); while (!ctx->sdl_th_state) gf_sleep(10); if (ctx->sdl_th_state==SDL_STATE_STOP_REQ) { SDLOUT_CloseSDL(); ctx->sdl_th_state = SDL_STATE_STOPPED; return GF_IO_ERR; } #else if (!SDLVid_InitializeWindow(ctx, dr)) { SDLOUT_CloseSDL(); return GF_IO_ERR; } #endif ctx->is_init = 1; return GF_OK; }
static GF_Err SDLAud_Setup(GF_AudioOutput *dr, void *os_handle, u32 num_buffers, u32 total_duration) { u32 flags; SDL_AudioSpec want_format, got_format; SDLAUD(); /*init sdl*/ if (!SDLOUT_InitSDL()) return GF_IO_ERR; flags = SDL_WasInit(SDL_INIT_AUDIO); if (!(flags & SDL_INIT_AUDIO)) { if (SDL_InitSubSystem(SDL_INIT_AUDIO)<0) { GF_LOG(GF_LOG_ERROR, GF_LOG_MMIO, ("[SDL] Audio output initialization error\n")); SDLOUT_CloseSDL(); return GF_IO_ERR; } } /*check we can open the device*/ memset(&want_format, 0, sizeof(SDL_AudioSpec)); want_format.freq = 44100; want_format.format = AUDIO_S16SYS; want_format.channels = 2; want_format.samples = 1024; want_format.callback = sdl_fill_audio; want_format.userdata = dr; if ( SDL_OpenAudio(&want_format, &got_format) < 0 ) { sdl_close_audio(); SDL_QuitSubSystem(SDL_INIT_AUDIO); SDLOUT_CloseSDL(); GF_LOG(GF_LOG_ERROR, GF_LOG_MMIO, ("[SDL] Audio output format not supported\n")); return GF_IO_ERR; } sdl_close_audio(); ctx->is_init = GF_TRUE; ctx->num_buffers = num_buffers; ctx->total_duration = total_duration; GF_LOG(GF_LOG_INFO, GF_LOG_MMIO, ("[SDL] Audio output setup\n")); return GF_OK; }