Окно не отвечает при рендеринге изображения с использованием OpenGL ES

Я реализую Windows Media Player, есть несколько соответствующих потоков, чтобы сделать разные вещи:

  • один поток для чтения видео и аудио данных.
  • три потока для декодирования видео, аудио и субтитров отдельно.
  • один поток для рендеринга картинок и один поток для воспроизведения аудио.
  • один поток, чтобы получить несколько сообщений о состоянии

Я создаю окно следующим образом:

int main(int argc,char *argv[])
{

ijkmp_global_init();
ijkmp_global_set_inject_callback(inject_callback);

IjkMediaPlayer *mp = ijkmp_windows_create(&message_loop);

ijkmp_set_option_int(mp,4,"opensles",0);
ijkmp_set_option(mp,4,"overlay-format","fcc-_es2");
ijkmp_set_option_int(mp,4,"framedrop",1);
ijkmp_set_option_int(mp,4,"start-on-prepared",0);

ijkmp_set_inject_opaque(mp, NULL);
ijkmp_set_ijkio_inject_opaque(mp, NULL);
ijkmp_set_option_int(mp,1,"http-detect-range-support",0);

/* HINSTANCE instance = GetModuleHandle(NULL);
HWND hwnd = CreateWindow("ijkplayer", TEXT(""), WS_SIZEBOX,0, 0, 500, 500, NULL, NULL,
                 instance, NULL);
if(hwnd==NULL)
{
    printf("error,the hwnd is null %d\n",GetLastError());
                     return -1;
}*/
HWND hwnd = CreateWindowNative(320,240);

SDL_VoutWindows_SetWindowsSurface(mp->ffplayer->vout, hwnd);
ijkmp_set_data_source(mp,argv[1]);
ijkmp_prepare_async(mp);

SDL_WaitThread(mp->msg_thread,NULL);


}

Как вы видите, работа по созданию окна выполняется в основном потоке, и я передаю обработчик окна потоку рендеринга для рендеринга. Но когда работа по созданию окна завершена, я должен ждать завершения воспроизведения видео. Поэтому я использую SDL_WaitThread, чтобы присоединиться к потоку msg. реализация SDL_WaitThread выглядит следующим образом:

void SDL_WaitThread(SDL_Thread *thread, int *status)
{
    assert(thread);
    if (!thread)
        return;

    pthread_join(thread->id, NULL);

    if (status)
        *status = thread->retval;
} 

Я знаю, что некоторые проблемы могут существовать таким образом. В результате видеокартины всегда рендерится, но окно не отвечает...

Как решить эту проблему?

0 ответов

Другие вопросы по тегам