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);
}
Example #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);
}
static void get_dec_status(struct vidc_1080p_dec_disp_info *dec_disp_info,
	u32 output_order, u32 *status, u32 *rsl_chg)
{
	if (output_order == VCD_DEC_ORDER_DISPLAY) {
		vidc_1080p_get_display_frame_result(dec_disp_info);
		*status = dec_disp_info->display_status;
		*rsl_chg = dec_disp_info->disp_resl_change;
	} else {
		vidc_1080p_get_decode_frame_result(dec_disp_info);
		*status = dec_disp_info->decode_status;
		*rsl_chg = dec_disp_info->dec_resl_change;
	}
}
static void get_dec_status(struct ddl_client_context *ddl,
	 struct vidc_1080p_dec_disp_info *dec_disp_info,
	u32 output_order, u32 *status, u32 *rsl_chg)
{
	if (output_order == VCD_DEC_ORDER_DISPLAY) {
		vidc_1080p_get_display_frame_result(dec_disp_info);
		*status = dec_disp_info->display_status;
		*rsl_chg = dec_disp_info->disp_resl_change;
	} else {
		vidc_1080p_get_decode_frame_result(dec_disp_info);
		vidc_sm_get_dec_order_resl(
			&ddl->shared_mem[ddl->command_channel],
			&dec_disp_info->img_size_x,
			&dec_disp_info->img_size_y);
		*status = dec_disp_info->decode_status;
		*rsl_chg = dec_disp_info->dec_resl_change;
	}
}