static void * omx_clk_thread(void *aux) { omx_clk_cmd_t *cmd; omx_clk_t *clk = aux; int run = 1; hts_mutex_lock(&clk->mp->mp_mutex); while(run) { while((cmd = TAILQ_FIRST(&clk->q)) == NULL) { hts_cond_wait(&clk->cond, &clk->mp->mp_mutex); continue; } TAILQ_REMOVE(&clk->q, cmd, link); hts_mutex_unlock(&clk->mp->mp_mutex); switch(cmd->cmd) { case OMX_CLK_QUIT: run = 0; break; case OMX_CLK_PAUSE: omx_clk_set_speed(clk, 0); break; case OMX_CLK_PLAY: omx_clk_set_speed(clk, 1 << 16); break; } free(cmd); hts_mutex_lock(&clk->mp->mp_mutex); } hts_mutex_unlock(&clk->mp->mp_mutex); return NULL; }
static void * omx_clk_thread(void *aux) { omx_clk_cmd_t *cmd; omx_clk_t *clk = aux; int run = 1; hts_mutex_lock(&clk->mp->mp_mutex); while(run) { while((cmd = TAILQ_FIRST(&clk->q)) == NULL) { #if 0 if(hts_cond_wait_timeout(&clk->cond, &clk->mp->mp_mutex, 1000)) { hts_mutex_unlock(&clk->mp->mp_mutex); int64_t ts = omx_get_media_time(clk->c); hts_mutex_lock(&clk->mp->mp_mutex); } #else hts_cond_wait(&clk->cond, &clk->mp->mp_mutex); #endif continue; } TAILQ_REMOVE(&clk->q, cmd, link); hts_mutex_unlock(&clk->mp->mp_mutex); switch(cmd->cmd) { case OMX_CLK_QUIT: run = 0; break; case OMX_CLK_INIT: omx_clk_init(clk, cmd->arg); break; case OMX_CLK_PAUSE: omx_clk_set_speed(clk, 0); break; case OMX_CLK_PLAY: omx_clk_set_speed(clk, 1 << 16); break; case OMX_CLK_BEGIN_SEEK: omx_clk_begin_seek(clk); break; case OMX_CLK_SEEK_AUDIO_DONE: omx_clk_seek_done(clk); break; case OMX_CLK_SEEK_VIDEO_DONE: omx_clk_seek_done(clk); break; } free(cmd); hts_mutex_lock(&clk->mp->mp_mutex); } hts_mutex_unlock(&clk->mp->mp_mutex); return NULL; }