Beispiel #1
0
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;
}
Beispiel #2
0
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;
}