void vdin_reg_vf_provider(void) { #ifdef CONFIG_AMLOGIC_VIDEOIN_MANAGER vf_reg_provider(&vdin_vf_prov); #else vf_reg_provider(&vdin_vf_prov); #endif /* CONFIG_AMLOGIC_VIDEOIN_MANAGER */ }
const vframe_receiver_op_t* vf_ppmgr_reg_provider(void) { const vframe_receiver_op_t *r = NULL; mutex_lock(&ppmgr_mutex); vf_local_init(); //vf_reg_provider(&ppmgr_vf_prov); if(ppmgr_device.video_out==0) { vf_reg_provider(&ppmgr_vf_prov); } # ifdef CONFIG_V4L_AMLOGIC_VIDEO else { v4l_reg_provider(&ppmgr_vf_prov); } # endif if (start_ppmgr_task() == 0) { r = &ppmgr_vf_receiver; } mutex_unlock(&ppmgr_mutex); return r; }
static int d2d3_receiver_event_fun(int type, void* data, void* arg) { int i, ret=0; d2d3_param_t *parm = &d2d3_devp->param; if((type == VFRAME_EVENT_PROVIDER_UNREG)|| (type == VFRAME_EVENT_PROVIDER_LIGHT_UNREG)){ prov = NULL; if(d2d3_devp->flag & D2D3_BYPASS){ d2d3_enable_hw(false); d2d3_enable_path(false, parm); } vf_notify_receiver(d2d3_devp->vfm_name,VFRAME_EVENT_PROVIDER_UNREG,NULL); vf_unreg_provider(&d2d3_vf_prov); d2d3_devp->flag &= (~D2D3_REG); // keep flag when unreg pr_info("[d2d3]%s: provider unregister,disable d2d3.\n",__func__); } else if(type == VFRAME_EVENT_PROVIDER_REG){ char* provider_name = (char*)data; if((strcmp(provider_name, "deinterlace")==0)||(strcmp(provider_name, "ppmgr")==0)){ have_process_fun_private_data = 1; } else{ have_process_fun_private_data = 0; } vf_reg_provider(&d2d3_vf_prov); for(i=0; i<D2D3_IDX_MAX; i++){ d2d3_devnox[i].vf = NULL; } prov = vf_get_provider(d2d3_devp->vfm_name); d2d3_devp->flag |= D2D3_REG; vf_notify_receiver(d2d3_devp->vfm_name,VFRAME_EVENT_PROVIDER_START,NULL); } else if((VFRAME_EVENT_PROVIDER_DPBUF_CONFIG == type) && (D2D3_DPG_MUX_NRW == parm->dpg_path)) { vframe_t * vf = (vframe_t*)data; struct di_buf_s *di_buf = vf->private_data; d2d3_devp->dpg_addr = di_buf->dp_buf_adr; /*just update the dpg canvas config with the addr from di*/ d2d3_config_dpg_canvas(d2d3_devp); pre_count++; } else if(VFRAME_EVENT_PROVIDER_FR_HINT == type) { vf_notify_receiver(d2d3_devp->vfm_name,VFRAME_EVENT_PROVIDER_FR_HINT,data); } else if(VFRAME_EVENT_PROVIDER_FR_END_HINT == type) { vf_notify_receiver(d2d3_devp->vfm_name,VFRAME_EVENT_PROVIDER_FR_END_HINT,data); } return ret; }
static vframe_receiver_op_t* vf_vm_reg_provider( ) { ulong flags; spin_lock_irqsave(&lock, flags); spin_unlock_irqrestore(&lock, flags); vf_reg_provider(&vm_vf_prov); start_vm_task(); #if 0 start_simulate_task(); #endif return &vm_vf_receiver; }
static vframe_receiver_op_t* vf_vm_reg_provider( ) { ulong flags; spin_lock_irqsave(&lock, flags); spin_unlock_irqrestore(&lock, flags); vm_buffer_init(); #ifndef CONFIG_AMLOGIC_VM_DISABLE_VIDEOLAYER vf_reg_provider(&vm_vf_prov); #endif start_vm_task(); #if 0 start_simulate_task(); #endif return &vm_vf_receiver; }
static int jpeg_decode(logo_object_t *plogo) { ulong timeout; jpeg_private_t *priv=(jpeg_private_t*)plogo->parser->priv; #ifdef CONFIG_AM_STREAMING amvdec_start(); #endif feed_vb(plogo->parser->logo_pic_info.size); timeout = jiffies + HZ * 2;//wait 2s while (time_before(jiffies, timeout)) { if (priv->state == PIC_DECODED) { /* disable OSD layer to expose logo on video layer */ amlog_mask_level(LOG_MASK_PARSER,LOG_LEVEL_LOW,"[jpeglogo]: logo decoded.\n"); break; } } #ifdef CONFIG_AM_STREAMING amvdec_stop(); #endif free_irq(INT_MAILBOX_1A, (void *)hardware_init); if (priv->state > PIC_NA) { if(plogo->para.output_dev_type == LOGO_DEV_VID) { #ifdef CONFIG_AM_VIDEO vf_provider_init(&jpeglogo_vf_prov, "jpeglogo_provider", &jpeglogo_vf_provider_op, NULL); vf_reg_provider(&jpeglogo_vf_prov); #endif kernel_thread(thread_progress, plogo, 0); }else { plogo->parser->decoder.jpg.out_canvas_index=priv->canvas_index; kfree(priv); } } else { amlog_mask_level(LOG_MASK_PARSER,LOG_LEVEL_LOW,"deocod jpeg uncompleted\n"); return FAIL; } return SUCCESS; }
void vdin_reg_vf_provider(void) { vf_reg_provider(&vdin_vf_provider); }