/* 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); }
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; }