Index: vosub_vidix.c =================================================================== --- vosub_vidix.c (revision 24537) +++ vosub_vidix.c (working copy) @@ -22,6 +22,7 @@ #include #include #include +#include #include "config.h" #include "mp_msg.h" @@ -49,9 +50,14 @@ static vidix_playback_t vidix_play; static vidix_fourcc_t vidix_fourcc; static vo_functions_t * vo_server; +static vo_functions_t vo_local; static vidix_yuv_t dstrides; /*static uint32_t (*server_control)(uint32_t request, void *data, ...);*/ +static pthread_mutex_t vidix_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t vidix_cond = PTHREAD_COND_INITIALIZER; +static pthread_t vidix_thread; + int vidix_start(void) { int err; @@ -96,7 +102,7 @@ dest += dstrides.y*y + x; src = image[0]; for(i=0;idraw_slice = vidix_draw_slice_420; + vo_local.draw_slice = vidix_draw_slice_420; else if (src_format == IMGFMT_YVU9 || src_format == IMGFMT_IF09) - vo_server->draw_slice = vidix_draw_slice_410; - else vo_server->draw_slice = vidix_draw_slice_packed; + vo_local.draw_slice = vidix_draw_slice_410; + else vo_local.draw_slice = vidix_draw_slice_packed; } + if (!vidix_thread) { + pthread_mutex_lock(&vidix_mutex); + pthread_create(&vidix_thread, NULL, vidix_task, NULL); + pthread_cond_wait(&vidix_cond, &vidix_mutex); + pthread_mutex_unlock(&vidix_mutex); + } return 0; }