static void ddl_decoder_input_done_callback( struct ddl_client_context *ddl, u32 frame_transact_end) { struct ddl_context *ddl_context = ddl->ddl_context; struct ddl_decoder_data *decoder = &(ddl->codec_data.decoder); struct vidc_1080p_dec_disp_info *dec_disp_info = &decoder->dec_disp_info; struct vcd_frame_data *input_vcd_frm = &(ddl->input_frame.vcd_frm); u32 is_interlaced; vidc_1080p_get_decoded_frame_size( &dec_disp_info->input_bytes_consumed); vidc_sm_set_start_byte_number(&ddl->shared_mem [ddl->command_channel], 0); vidc_1080p_get_decode_frame(&dec_disp_info->input_frame); ddl_get_decoded_frame(input_vcd_frm, dec_disp_info->input_frame); vidc_1080p_get_decode_frame_result(dec_disp_info); is_interlaced = (dec_disp_info->decode_coding == VIDC_1080P_DISPLAY_CODING_INTERLACED); if (decoder->output_order == VCD_DEC_ORDER_DECODE) { dec_disp_info->tag_bottom = is_interlaced ? dec_disp_info->tag_top : VCD_FRAMETAG_INVALID; dec_disp_info->tag_top = input_vcd_frm->ip_frm_tag; } input_vcd_frm->interlaced = is_interlaced; input_vcd_frm->offset += dec_disp_info->input_bytes_consumed; input_vcd_frm->data_len -= dec_disp_info->input_bytes_consumed; ddl->input_frame.frm_trans_end = frame_transact_end; if (vidc_msg_timing) ddl_calc_core_proc_time(__func__, DEC_IP_TIME); ddl_context->ddl_callback(VCD_EVT_RESP_INPUT_DONE, VCD_S_SUCCESS, &ddl->input_frame, sizeof(struct ddl_frame_data_tag), (u32 *)ddl, ddl->client_data); }
static void ddl_decoder_input_done_callback( struct ddl_client_context *ddl, u32 frame_transact_end) { struct ddl_context *ddl_context = ddl->ddl_context; struct ddl_decoder_data *decoder = &(ddl->codec_data.decoder); struct vidc_1080p_dec_disp_info *dec_disp_info = &decoder->dec_disp_info; struct vcd_frame_data *input_vcd_frm = &(ddl->input_frame.vcd_frm); vidc_1080p_get_decoded_frame_size( &dec_disp_info->input_bytes_consumed); vidc_sm_set_start_byte_number(&ddl->shared_mem [ddl->command_channel], 0); vidc_1080p_get_decode_frame(&dec_disp_info->input_frame); ddl_get_decoded_frame(input_vcd_frm, dec_disp_info->input_frame); vidc_1080p_get_decode_frame_result(dec_disp_info); input_vcd_frm->interlaced = (dec_disp_info->decode_coding != VIDC_1080P_DISPLAY_CODING_PROGRESSIVE_SCAN); input_vcd_frm->offset += dec_disp_info->input_bytes_consumed; input_vcd_frm->data_len -= dec_disp_info->input_bytes_consumed; ddl->input_frame.frm_trans_end = frame_transact_end; ddl_context->ddl_callback(VCD_EVT_RESP_INPUT_DONE, VCD_S_SUCCESS, &ddl->input_frame, sizeof(struct ddl_frame_data_tag), (u32 *)ddl, ddl->client_data); }