void sh_css_sp_start_binary_copy(unsigned int pipe_num, struct ia_css_frame *out_frame, unsigned two_ppc) { enum ia_css_pipe_id pipe_id; unsigned int thread_id; struct sh_css_sp_pipeline *pipe; uint8_t stage_num = 0; assert(out_frame != NULL); pipe_id = IA_CSS_PIPE_ID_CAPTURE; ia_css_pipeline_get_sp_thread_id(pipe_num, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.bin.bytes_available = out_frame->data_bytes; pipe->num_stages = 1; pipe->pipe_id = pipe_id; pipe->pipe_num = pipe_num; pipe->thread_id = thread_id; pipe->pipe_config = 0x0; /* No parameters */ if(pipe->inout_port_config == 0) { SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE,1); SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE,1); ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "sh_css_sp_start_binary_copy pipe_id %d port_config %08x\n",pipe->pipe_id,pipe->inout_port_config); } ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "sh_css_sp_start_binary_copy pipe_id %d port_config %08x\n",pipe->pipe_id,pipe->inout_port_config); #if !defined(HAS_NO_INPUT_FORMATTER) sh_css_sp_group.config.input_formatter.isp_2ppc = (uint8_t)two_ppc; #else (void)two_ppc; #endif sh_css_sp_stage.num = stage_num; sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)IA_CSS_PIPELINE_BIN_COPY; set_output_frame_buffer(out_frame,pipe_num, stage_num); /* sp_bin_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, pipe_num, &sh_css_sp_fw); }
static void construct_sppipeline( struct sh_css_sp_pipeline *sp_pipeline, hrt_vaddress sp_stage_addr, uint32_t required_bds_factor, uint32_t dvs_frame_delay) { struct sh_css_sp_pipeline *this_pipeline = sp_pipeline; ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "construct_sppipeline(): enter\n"); assert(this_pipeline != NULL); memset(this_pipeline, 0 , sizeof(struct sh_css_sp_pipeline)); this_pipeline->num_stages = 1; this_pipeline->pipe_qos_config = QOS_INVALID; SH_CSS_PIPE_PORT_CONFIG_SET(this_pipeline->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE,1); SH_CSS_PIPE_PORT_CONFIG_SET(this_pipeline->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE,1); this_pipeline->required_bds_factor = required_bds_factor; this_pipeline->sp_stage_addr[0] = sp_stage_addr; ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, "construct_sppipeline(): exit\n"); this_pipeline->dvs_frame_delay = dvs_frame_delay; }
static void ia_css_pipeline_configure_inout_port(struct ia_css_pipeline *me, bool continuous) { ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "ia_css_pipeline_configure_inout_port() enter: pipe_id(%d) continuous(%d)\n", me->pipe_id, continuous); switch (me->pipe_id) { case IA_CSS_PIPE_ID_PREVIEW: case IA_CSS_PIPE_ID_VIDEO: SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)(continuous ? SH_CSS_COPYSINK_TYPE : SH_CSS_HOST_TYPE), 1); SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); break; case IA_CSS_PIPE_ID_COPY: /*Copy pipe ports configured to "offline" mode*/ SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); if (continuous) { SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_COPYSINK_TYPE, 1); SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_TAGGERSINK_TYPE, 1); } else { SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); } break; case IA_CSS_PIPE_ID_CAPTURE: SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)(continuous ? SH_CSS_TAGGERSINK_TYPE : SH_CSS_HOST_TYPE), 1); SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); break; case IA_CSS_PIPE_ID_YUVPP: SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)(SH_CSS_HOST_TYPE), 1); SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); break; case IA_CSS_PIPE_ID_ACC: SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); SH_CSS_PIPE_PORT_CONFIG_SET(me->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE, 1); break; default: break; } ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "ia_css_pipeline_configure_inout_port() leave: inout_port_config(%x)\n", me->inout_port_config); }
static void sh_css_sp_start_raw_copy(struct ia_css_frame *out_frame, unsigned pipe_num, unsigned two_ppc, unsigned max_input_width, enum sh_css_pipe_config_override pipe_conf_override, unsigned int if_config_index) { enum ia_css_pipe_id pipe_id; unsigned int thread_id; uint8_t stage_num = 0; struct sh_css_sp_pipeline *pipe; assert(out_frame != NULL); { /** * Clear sh_css_sp_stage for easy debugging. * program_input_circuit must be saved as it is set outside * this function. */ uint8_t program_input_circuit; program_input_circuit = sh_css_sp_stage.program_input_circuit; memset(&sh_css_sp_stage, 0, sizeof(sh_css_sp_stage)); sh_css_sp_stage.program_input_circuit = program_input_circuit; } pipe_id = IA_CSS_PIPE_ID_COPY; ia_css_pipeline_get_sp_thread_id(pipe_num, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.raw.height = out_frame->info.res.height; pipe->copy.raw.width = out_frame->info.res.width; pipe->copy.raw.padded_width = out_frame->info.padded_width; pipe->copy.raw.raw_bit_depth = out_frame->info.raw_bit_depth; pipe->copy.raw.max_input_width = max_input_width; pipe->num_stages = 1; pipe->pipe_id = pipe_id; /* TODO: next indicates from which queues parameters need to be sampled, needs checking/improvement */ if (pipe_conf_override == SH_CSS_PIPE_CONFIG_OVRD_NO_OVRD) pipe->pipe_config = (SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS << thread_id); else pipe->pipe_config = pipe_conf_override; if(pipe->inout_port_config == 0) { SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE,1); SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE,1); ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "sh_css_sp_start_raw_copy pipe_id %d port_config %08x\n",pipe->pipe_id,pipe->inout_port_config); } #if !defined(HAS_NO_INPUT_FORMATTER) sh_css_sp_group.config.input_formatter.isp_2ppc = (uint8_t)two_ppc; #else (void)two_ppc; #endif sh_css_sp_stage.num = stage_num; #if 0 sh_css_sp_stage.xmem_bin_addr = binary->info->xmem_addr; #else sh_css_sp_stage.xmem_bin_addr = 0x0; #endif sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)IA_CSS_PIPELINE_RAW_COPY; sh_css_sp_stage.if_config_index = (uint8_t) if_config_index; set_output_frame_buffer(out_frame, (unsigned)pipe_id, stage_num); #if 0 /* sp_raw_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, 0, &sh_css_sp_fw); #endif ia_css_debug_pipe_graph_dump_sp_raw_copy(out_frame); }