示例#1
0
/* nchains already includes one extra for sparechain */
chaincolln chaincolln_create(int nchains, int ndomains, int nrelns, char *pref)
{
  int i;
  chaincolln cc;
  double temp;
  cc  = (chaincolln) my_malloc(sizeof(struct chaincolln_str));
  cc->chains = (chain *) my_malloc(nchains*sizeof(chain ));
  /* include spare chain */
  for (i = 0; i < nchains; i++) {
    temp = 1.0/(1+ps.temp*i);
    cc->chains[i] = chain_create(ndomains, nrelns, temp);
  }
  cc->nchains = nchains-1;
  cc->sparechain = cc->chains[nchains-1];
  strcpy(cc->prefix, pref);
  cc->itercount = 0;
  return cc;
}
/*!
  epg create chain

  \param[in] p_priv : epg api private data.
  \param[in] task_priority : task priority for chain.
  \param[in] task_stk_size : task stack size.
  */
static void epg_create_chain(epg_priv_t *p_priv,
                             u32         task_priority,
                             u32         task_stk_size)
{
  controller_t *p_contrl   = NULL;
  chain_para_t  chain_para = { 0 };
  ctrl_para_t   ctrl_para  = { 0 };

  //create controller
  p_contrl = &(p_priv->controller);
  ctrl_para.user_id = APP_EPG;
  controller_create(p_contrl, &ctrl_para);
  CHECK_FAIL_RET_VOID(p_contrl != NULL);
  
  p_contrl->on_process_evt = epg_on_process_evt;
  p_contrl->user_handle = (handle_t)p_priv;

  //create chain
  chain_para.p_owner  = (interface_t *)&p_priv->controller;
  chain_para.p_name   = "epg_chain";
  //chain_para.priority = task_priority;
  chain_para.stk_size = task_stk_size;
  p_priv->p_chain = chain_create(&chain_para);
}
示例#3
0
BOOL create_pic_chain(pic_player_priv_t *p_priv, u32 priority, u32 index)
{
  chain_t   *p_f_chain = NULL;
  ifilter_t *p_fsrc_filter = NULL;
  ifilter_t *p_pic_filter = NULL;
  ifilter_t *p_render_filter = NULL;
  ipin_t *p_output_pin = NULL;
  ipin_t *p_input_pin = NULL;
  chain_para_t chain_para = {0};
  RET_CODE ret = SUCCESS;
  media_format_t format = {0};
  controller_t *p_contrl = &(p_priv->p_pic[index].g_controller);
  ctrl_para_t ctrl_para = {(void *)p_priv};

  controller_create(p_contrl, &ctrl_para);
  p_contrl->on_process_evt = on_pic_draw_end;
  //create chain
  chain_para.p_owner = (interface_t *)&(p_priv->p_pic[index].g_controller);
  if (index)
  {
    chain_para.p_name = "pic_chain1";
  }
  else
  {
    chain_para.p_name = "pic_chain";
  }
  chain_para.priority = priority;
  chain_para.stk_size = 16 * KBYTES;
  p_f_chain = chain_create(&chain_para);

  p_priv->p_pic[index].p_f_chain = p_f_chain;

  //create filter
  ret = eva_add_filter_by_id(FILE_SOURCE_FILTER, &p_fsrc_filter);
  MT_ASSERT(ret == SUCCESS);

  ret = eva_add_filter_by_id(JPEG_FILTER, &p_pic_filter);
  MT_ASSERT(ret == SUCCESS);

  ret = eva_add_filter_by_id(PIC_RENDER_FILTER, &p_render_filter);
  MT_ASSERT(ret == SUCCESS);

  p_priv->p_pic[index].p_source_filter = p_fsrc_filter;
  p_priv->p_pic[index].p_pic_play_filter = p_pic_filter;
  p_priv->p_pic[index].p_pic_render_filter = p_render_filter;

  //add to chain
  ret = p_f_chain->add_filter(p_f_chain, p_fsrc_filter, "source filter");
  MT_ASSERT(ret == SUCCESS);
  ret = p_f_chain->add_filter(p_f_chain, p_pic_filter, "pic filter");
  MT_ASSERT(ret == SUCCESS);
  ret = p_f_chain->add_filter(p_f_chain, p_render_filter, "render filter");
  MT_ASSERT(ret == SUCCESS);

  //1. >>-------------link source filter and jpeg filter ------------------------>>>>
  //get source pin
  ret = p_fsrc_filter->get_unconnect_pin(p_fsrc_filter, OUTPUT_PIN, &p_output_pin);
  MT_ASSERT(ret == SUCCESS);
  MT_ASSERT(p_output_pin != NULL);

  //get jpeg filter input pin
  ret = p_pic_filter->get_unconnect_pin(p_pic_filter, INPUT_PIN, &p_input_pin);
  MT_ASSERT(ret == SUCCESS);
  MT_ASSERT(p_input_pin != NULL);

  ret = p_f_chain->connect(p_f_chain, p_output_pin, p_input_pin, NULL);
  MT_ASSERT(ret == SUCCESS);

  //2. >>-------------link jpeg filter and render filter ------------------------>>>>
  //get jpeg filter output pin
  ret = p_pic_filter->get_unconnect_pin(p_pic_filter, OUTPUT_PIN, &p_output_pin);
  MT_ASSERT(ret == SUCCESS);
  MT_ASSERT(p_output_pin != NULL);

  //get render pin
  ret = p_render_filter->get_unconnect_pin(p_render_filter, INPUT_PIN, &p_input_pin);
  MT_ASSERT(ret == SUCCESS);
  MT_ASSERT(p_input_pin != NULL);

  ret = p_f_chain->connect(p_f_chain, p_output_pin, p_input_pin, &format);
  MT_ASSERT(ret == SUCCESS);

  return TRUE;
}