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);
}
示例#2
0
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);
}