u32 ddl_encode_frame(u32 *ddl_handle, struct ddl_frame_data_tag *input_frame, struct ddl_frame_data_tag *output_bit, void *client_data) { struct ddl_client_context *ddl = (struct ddl_client_context *)ddl_handle; struct ddl_context *ddl_context = ddl_get_context(); if (vidc_msg_timing) ddl_set_core_start_time(__func__, ENC_OP_TIME); if (!DDL_IS_INITIALIZED(ddl_context)) { VIDC_LOGERR_STRING("ddl_enc_frame:Not_inited"); return VCD_ERR_ILLEGAL_OP; } if (DDL_IS_BUSY(ddl_context)) { VIDC_LOGERR_STRING("ddl_enc_frame:Ddl_busy"); return VCD_ERR_BUSY; } if (!ddl || ddl->decoding) { VIDC_LOGERR_STRING("ddl_enc_frame:Bad_handle"); return VCD_ERR_BAD_HANDLE; } if (!input_frame || !input_frame->vcd_frm.physical || ddl->codec_data.encoder.input_buf_req.sz != input_frame->vcd_frm.data_len) { VIDC_LOGERR_STRING("ddl_enc_frame:Bad_input_params"); return VCD_ERR_ILLEGAL_PARM; } if ((((u32) input_frame->vcd_frm.physical + input_frame->vcd_frm.offset) & (DDL_STREAMBUF_ALIGN_GUARD_BYTES) ) ) { VIDC_LOGERR_STRING ("ddl_enc_frame:Un_aligned_yuv_start_address"); return VCD_ERR_ILLEGAL_PARM; } if (!output_bit || !output_bit->vcd_frm.physical || !output_bit->vcd_frm.alloc_len) { VIDC_LOGERR_STRING("ddl_enc_frame:Bad_output_params"); return VCD_ERR_ILLEGAL_PARM; } if ((ddl->codec_data.encoder.output_buf_req.sz + output_bit->vcd_frm.offset) > output_bit->vcd_frm.alloc_len) { VIDC_LOGERR_STRING ("ddl_enc_frame:offset_large, Exceeds_min_buf_size"); } if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_FRAME)) { VIDC_LOGERR_STRING("ddl_enc_frame:Wrong_state"); return VCD_ERR_ILLEGAL_OP; } DDL_BUSY(ddl_context); ddl_context->current_ddl = ddl; ddl_context->client_data = client_data; ddl->input_frame = *input_frame; ddl->output_frame = *output_bit; ddl_encode_frame_run(ddl); return VCD_S_SUCCESS; }
u32 ddl_encode_frame(u32 *ddl_handle, struct ddl_frame_data_type_tag *p_input_frame, struct ddl_frame_data_type_tag *p_output_bit, void *p_client_data) { struct ddl_client_context_type *p_ddl = (struct ddl_client_context_type *)ddl_handle; struct ddl_context_type *p_ddl_context = ddl_get_context(); #ifdef CORE_TIMING_INFO ddl_get_core_start_time(1); #endif if (!DDL_IS_INITIALIZED(p_ddl_context)) { VIDC_LOGERR_STRING("ddl_enc_frame:Not_inited"); return VCD_ERR_ILLEGAL_OP; } if (DDL_IS_BUSY(p_ddl_context)) { VIDC_LOGERR_STRING("ddl_enc_frame:Ddl_busy"); return VCD_ERR_BUSY; } if (NULL == p_ddl || TRUE == p_ddl->b_decoding) { VIDC_LOGERR_STRING("ddl_enc_frame:Bad_handle"); return VCD_ERR_BAD_HANDLE; } if (NULL == p_input_frame || NULL == p_input_frame->vcd_frm.p_physical || p_ddl->codec_data.encoder.input_buf_req.n_size != p_input_frame->vcd_frm.n_data_len) { VIDC_LOGERR_STRING("ddl_enc_frame:Bad_input_params"); return VCD_ERR_ILLEGAL_PARM; } if (0 != (((u32) p_input_frame->vcd_frm.p_physical + p_input_frame->vcd_frm.n_offset) & (DDL_STREAMBUF_ALIGN_GUARD_BYTES) ) ) { VIDC_LOGERR_STRING ("ddl_enc_frame:Un_aligned_yuv_start_address"); return VCD_ERR_ILLEGAL_PARM; } if (NULL == p_output_bit || NULL == p_output_bit->vcd_frm.p_physical || 0 == p_output_bit->vcd_frm.n_alloc_len) { VIDC_LOGERR_STRING("ddl_enc_frame:Bad_output_params"); return VCD_ERR_ILLEGAL_PARM; } if ((p_ddl->codec_data.encoder.output_buf_req.n_size + p_output_bit->vcd_frm.n_offset) > p_output_bit->vcd_frm.n_alloc_len) { VIDC_LOGERR_STRING ("ddl_enc_frame:n_offset_large, Exceeds_min_buf_size"); } if (!DDLCLIENT_STATE_IS(p_ddl, DDL_CLIENT_WAIT_FOR_FRAME)) { VIDC_LOGERR_STRING("ddl_enc_frame:Wrong_state"); return VCD_ERR_ILLEGAL_OP; } DDL_BUSY(p_ddl_context); p_ddl_context->p_current_ddl = p_ddl; p_ddl_context->p_client_data = p_client_data; p_ddl->input_frame = *p_input_frame; p_ddl->output_frame = *p_output_bit; ddl_encode_frame_run(p_ddl); return VCD_S_SUCCESS; }