本文整理汇总了C++中ddl_client_fatal_cb函数的典型用法代码示例。如果您正苦于以下问题:C++ ddl_client_fatal_cb函数的具体用法?C++ ddl_client_fatal_cb怎么用?C++ ddl_client_fatal_cb使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ddl_client_fatal_cb函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ddl_handle_npf_decoding_error
static void ddl_handle_npf_decoding_error(struct ddl_client_context_type *p_ddl)
{
struct vidc_1080p_dec_disp_info_type *p_dec_disp_info =
&(p_ddl->codec_data.decoder.dec_disp_info);
if (!p_ddl->b_decoding) {
DDL_MSG_ERROR("VIDC_FW_ISSUE_ENC_NPF");
ddl_client_fatal_cb(p_ddl);
} else {
vidc_sm_get_frame_tags(
&p_ddl->shared_mem[p_ddl->n_command_channel],
&p_dec_disp_info->n_tag_top,
&p_dec_disp_info->n_tag_bottom);
ddl_vidc_decode_dynamic_property(p_ddl, FALSE);
p_ddl->output_frame.vcd_frm.n_ip_frm_tag =
p_dec_disp_info->n_tag_top;
p_ddl->output_frame.vcd_frm.p_physical = NULL;
p_ddl->output_frame.vcd_frm.p_virtual = NULL;
p_ddl->output_frame.b_frm_trans_end = FALSE;
p_ddl->p_ddl_context->ddl_callback(VCD_EVT_RESP_OUTPUT_DONE,
VCD_ERR_INTRLCD_FIELD_DROP, &(p_ddl->output_frame),
sizeof(struct ddl_frame_data_type_tag),
(u32 *) p_ddl, p_ddl->p_client_data);
ddl_vidc_decode_frame_run(p_ddl);
}
}
开发者ID:Anteus,项目名称:kernel_u8800,代码行数:26,代码来源:vcd_ddl_errors.c
示例2: ddl_encoder_seq_done_callback
static u32 ddl_encoder_seq_done_callback(struct ddl_context *ddl_context,
struct ddl_client_context *ddl)
{
struct ddl_encoder_data *encoder;
DDL_MSG_MED("ddl_encoder_seq_done_callback");
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_INITCODECDONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-INITCODEC");
ddl_client_fatal_cb(ddl);
return true;
}
if (vidc_msg_timing)
ddl_calc_core_proc_time(__func__, ENC_OP_TIME);
ddl->cmd_state = DDL_CMD_INVALID;
DDL_MSG_LOW("ddl_state_transition: %s ~~> DDL_CLIENT_WAIT_FOR_FRAME",
ddl_get_state_string(ddl->client_state));
ddl->client_state = DDL_CLIENT_WAIT_FOR_FRAME;
DDL_MSG_LOW("INIT_CODEC_DONE");
encoder = &ddl->codec_data.encoder;
vidc_1080p_get_encoder_sequence_header_size(
&encoder->seq_header_length);
if ((encoder->codec.codec == VCD_CODEC_H264) &&
(encoder->profile.profile == VCD_PROFILE_H264_BASELINE))
if ((encoder->seq_header.align_virtual_addr) &&
(encoder->seq_header_length > 6))
encoder->seq_header.align_virtual_addr[6] = 0xC0;
ddl_context->ddl_callback(VCD_EVT_RESP_START, VCD_S_SUCCESS,
NULL, 0, (u32 *) ddl, ddl->client_data);
ddl_release_command_channel(ddl_context,
ddl->command_channel);
return true;
}
开发者ID:nickcttm,项目名称:HTC-JetStream-HC-Kernel,代码行数:32,代码来源:vcd_ddl_interrupt_handler.c
示例3: ddl_encoder_eos_done
static void ddl_encoder_eos_done(struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl;
u32 channel_inst_id;
vidc_1080p_get_returned_channel_inst_id(&channel_inst_id);
vidc_1080p_clear_returned_channel_inst_id();
ddl = ddl_get_current_ddl_client_for_channel_id(ddl_context,
ddl_context->response_cmd_ch_id);
if (!ddl || (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_EOS_DONE))) {
DDL_MSG_ERROR("STATE-CRITICAL-EOSFRMDONE");
ddl_client_fatal_cb(ddl);
} else {
struct ddl_encoder_data *encoder = &(ddl->codec_data.encoder);
vidc_1080p_get_encode_frame_info(&encoder->enc_frame_info);
ddl_handle_enc_frame_done(ddl);
DDL_MSG_LOW("encoder_eos_done");
ddl->cmd_state = DDL_CMD_INVALID;
DDL_MSG_LOW("ddl_state_transition: %s ~~>"
"DDL_CLIENT_WAIT_FOR_FRAME",
ddl_get_state_string(ddl->client_state));
ddl->client_state = DDL_CLIENT_WAIT_FOR_FRAME;
DDL_MSG_LOW("eos_done");
ddl_context->ddl_callback(VCD_EVT_RESP_EOS_DONE,
VCD_S_SUCCESS, NULL, 0,
(u32 *)ddl, ddl->client_data);
ddl_release_command_channel(ddl_context,
ddl->command_channel);
}
}
开发者ID:nickcttm,项目名称:HTC-JetStream-HC-Kernel,代码行数:30,代码来源:vcd_ddl_interrupt_handler.c
示例4: ddl_handle_client_fatal_errors
static u32 ddl_handle_client_fatal_errors(struct ddl_context
*ddl_context)
{
u32 status = false;
switch (ddl_context->cmd_err_status) {
case MB_NUM_INVALID:
case FRAME_RATE_NOT_SUPPORTED:
case INVALID_QP_VALUE:
case INVALID_RC_REACTION_COEFFICIENT:
case INVALID_CPB_SIZE_AT_GIVEN_LEVEL:
case ALLOC_DPB_SIZE_NOT_SUFFICIENT:
case ALLOC_DB_SIZE_NOT_SUFFICIENT:
case ALLOC_COMV_SIZE_NOT_SUFFICIENT:
case NUM_BUF_OUT_OF_RANGE:
case NULL_CONTEXT_POINTER:
case NULL_COMAMND_CONTROL_COMM_POINTER:
case NULL_METADATA_INPUT_POINTER:
case NULL_DPB_POINTER:
case NULL_COMV_POINTER:
{
status = true;
break;
}
}
if (!status)
ERR("UNKNOWN-OP-FAILED");
ddl_client_fatal_cb(ddl_context);
return true;
}
开发者ID:MiniBlu,项目名称:cm11_kernel_htc_msm8974a3ul,代码行数:34,代码来源:vcd_ddl_errors.c
示例5: ddl_encoder_seq_done_callback
static u32 ddl_encoder_seq_done_callback(struct ddl_context_type *p_ddl_context,
struct ddl_client_context_type *p_ddl)
{
struct ddl_encoder_data_type *p_encoder;
DDL_MSG_MED("ddl_encoder_seq_done_callback");
if (!DDLCLIENT_STATE_IS(p_ddl, DDL_CLIENT_WAIT_FOR_INITCODECDONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-INITCODEC");
ddl_client_fatal_cb(p_ddl);
return TRUE;
}
p_ddl->e_cmd_state = DDL_CMD_INVALID;
DDL_MSG_LOW("ddl_state_transition: %s ~~> DDL_CLIENT_WAIT_FOR_FRAME",
ddl_get_state_string(p_ddl->e_client_state));
p_ddl->e_client_state = DDL_CLIENT_WAIT_FOR_FRAME;
DDL_MSG_LOW("INIT_CODEC_DONE");
p_encoder = &p_ddl->codec_data.encoder;
vidc_1080p_get_encoder_sequence_header_size(
&p_encoder->n_seq_header_length);
p_ddl_context->ddl_callback(VCD_EVT_RESP_START, VCD_S_SUCCESS,
NULL, 0, (u32 *) p_ddl, p_ddl->p_client_data);
ddl_release_command_channel(p_ddl_context,
p_ddl->n_command_channel);
return TRUE;
}
开发者ID:Anteus,项目名称:kernel_u8800,代码行数:25,代码来源:vcd_ddl_interrupt_handler.c
示例6: ddl_init_codec_done_callback
static void ddl_init_codec_done_callback(struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
struct ddl_encoder_data *encoder;
if (!ddl ||
ddl->decoding ||
!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_INITCODECDONE)
) {
VIDC_LOG_STRING("STATE-CRITICAL-INITCODEC");
ddl_client_fatal_cb(ddl_context);
return;
}
ddl_move_command_state(ddl_context, DDL_CMD_INVALID);
ddl_move_client_state(ddl, DDL_CLIENT_WAIT_FOR_FRAME);
VIDC_LOG_STRING("INIT_CODEC_DONE");
encoder = &ddl->codec_data.encoder;
if (encoder->seq_header.virtual_base_addr) {
vidc_720p_encode_get_header(&encoder->seq_header.
buffer_size);
}
ddl_context->ddl_callback(VCD_EVT_RESP_START, VCD_S_SUCCESS, NULL,
0, (u32 *) ddl, ddl_context->client_data);
DDL_IDLE(ddl_context);
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:28,代码来源:vcd_ddl_interrupt_handler.c
示例7: ddl_handle_seqhdr_fail_error
u32 ddl_handle_seqhdr_fail_error(struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
struct ddl_decoder_data *decoder = &ddl->codec_data.decoder;
u32 status = false;
if (ddl_context->cmd_state == DDL_CMD_HEADER_PARSE &&
DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_INITCODECDONE)) {
switch (ddl_context->cmd_err_status) {
case UNSUPPORTED_FEATURE_IN_PROFILE:
case HEADER_NOT_FOUND:
case INVALID_SPS_ID:
case INVALID_PPS_ID:
case RESOLUTION_NOT_SUPPORTED:
ERR("SEQ-HDR-FAILED!!!");
if ((ddl_context->cmd_err_status ==
RESOLUTION_NOT_SUPPORTED) &&
(decoder->codec.codec == VCD_CODEC_H264 ||
decoder->codec.codec == VCD_CODEC_H263 ||
decoder->codec.codec == VCD_CODEC_MPEG4 ||
decoder->codec.codec == VCD_CODEC_VC1_RCV ||
decoder->codec.codec == VCD_CODEC_VC1)) {
ddl_client_fatal_cb(ddl_context);
status = true;
break;
}
if (decoder->header_in_start) {
decoder->header_in_start = false;
ddl_context->ddl_callback(VCD_EVT_RESP_START,
VCD_ERR_SEQHDR_PARSE_FAIL,
NULL, 0, (void *)ddl,
ddl_context->client_data);
} else {
if (ddl->input_frame.vcd_frm.flags &
VCD_FRAME_FLAG_EOS)
ddl->input_frame.frm_trans_end = false;
else
ddl->input_frame.frm_trans_end = true;
ddl_decode_dynamic_property(ddl, false);
ddl_context->ddl_callback(
VCD_EVT_RESP_INPUT_DONE,
VCD_ERR_SEQHDR_PARSE_FAIL,
&ddl->input_frame,
sizeof(struct ddl_frame_data_tag),
(void *)ddl, ddl_context->client_data);
if (ddl->input_frame.vcd_frm.flags &
VCD_FRAME_FLAG_EOS)
ddl_context->ddl_callback(
VCD_EVT_RESP_EOS_DONE,
VCD_S_SUCCESS, NULL,
0, (void *)ddl,
ddl_context->client_data);
}
ddl_move_client_state(ddl,
DDL_CLIENT_WAIT_FOR_INITCODEC);
DDL_IDLE(ddl_context);
status = true;
}
}
return status;
}
开发者ID:Kra1o5,项目名称:android_kernel_huawei_u8815-gb,代码行数:60,代码来源:vcd_ddl_errors.c
示例8: ddl_eos_frame_done_callback
static u32 ddl_eos_frame_done_callback(
struct ddl_client_context *ddl)
{
struct ddl_context *ddl_context = ddl->ddl_context;
struct ddl_decoder_data *decoder = &ddl->codec_data.decoder;
struct ddl_mask *dpb_mask = &decoder->dpb_mask;
u32 ret_status = true, rsl_chg;
enum vidc_1080p_display_status disp_status;
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_EOS_DONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-EOSFRMRUN");
ddl_client_fatal_cb(ddl);
} else {
DDL_MSG_LOW("EOS_FRM_RUN_DONE");
ddl->cmd_state = DDL_CMD_INVALID;
get_dec_status(&ddl->codec_data.decoder.dec_disp_info,
ddl->codec_data.decoder.output_order,
&disp_status, &rsl_chg);
ddl_vidc_decode_dynamic_property(ddl, false);
if (disp_status ==
VIDC_1080P_DISPLAY_STATUS_DPB_EMPTY) {
ddl_decoder_eos_done_callback(ddl);
} else {
struct vidc_1080p_dec_frame_start_param dec_param;
ret_status = false;
if (disp_status ==
VIDC_1080P_DISPLAY_STATUS_DISPLAY_ONLY) {
if (ddl_decoder_output_done_callback(
ddl, false))
ret_status = true;
} else if (disp_status !=
VIDC_1080P_DISPLAY_STATUS_NOOP)
DDL_MSG_ERROR("EOS-STATE-CRITICAL-"
"WRONG-DISP-STATUS");
if (!ret_status) {
ddl_decoder_dpb_transact(decoder, NULL,
DDL_DPB_OP_SET_MASK);
ddl->cmd_state = DDL_CMD_EOS;
memset(&dec_param, 0, sizeof(dec_param));
dec_param.cmd_seq_num =
++ddl_context->cmd_seq_num;
dec_param.inst_id = ddl->instance_id;
dec_param.shared_mem_addr_offset =
DDL_ADDR_OFFSET(
ddl_context->dram_base_a,
ddl->shared_mem[ddl->command_channel]);
dec_param.release_dpb_bit_mask =
dpb_mask->hw_mask;
dec_param.decode =
VIDC_1080P_DEC_TYPE_LAST_FRAME_DATA;
ddl_context->vidc_decode_frame_start[ddl->\
command_channel](&dec_param);
}
}
}
return ret_status;
}
开发者ID:victor2002,项目名称:a770k_kernel,代码行数:60,代码来源:vcd_ddl_interrupt_handler.c
示例9: ddl_eos_frame_done_callback
static u32 ddl_eos_frame_done_callback(struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
struct ddl_decoder_data *decoder = &(ddl->codec_data.decoder);
struct vidc_720p_dec_disp_info *dec_disp_info =
&(decoder->dec_disp_info);
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_EOS_DONE)) {
VIDC_LOGERR_STRING("STATE-CRITICAL-EOSFRMRUN");
ddl_client_fatal_cb(ddl_context);
return true;
}
VIDC_LOG_STRING("EOS_FRM_RUN_DONE");
ddl_move_command_state(ddl_context, DDL_CMD_INVALID);
vidc_720p_decode_display_info(dec_disp_info);
ddl_decode_dynamic_property(ddl, false);
if (dec_disp_info->disp_status == VIDC_720P_DISPLAY_ONLY) {
if (ddl_decoder_output_done_callback(ddl, false)
!= VCD_S_SUCCESS)
return true;
} else
VIDC_LOG_STRING("STATE-CRITICAL-WRONG-DISP-STATUS");
ddl_decoder_dpb_transact(decoder, NULL, DDL_DPB_OP_SET_MASK);
ddl_move_command_state(ddl_context, DDL_CMD_EOS);
vidc_720p_submit_command(ddl->channel_id,
VIDC_720P_CMD_FRAMERUN);
return false;
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:33,代码来源:vcd_ddl_interrupt_handler.c
示例10: ddl_dpb_buffers_set_done_callback
static u32 ddl_dpb_buffers_set_done_callback(
struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl;
u32 channel_inst_id, ret_status = true;
DDL_MSG_MED("ddl_dpb_buffers_set_done_callback");
vidc_1080p_get_returned_channel_inst_id(&channel_inst_id);
vidc_1080p_clear_returned_channel_inst_id();
ddl = ddl_get_current_ddl_client_for_command(ddl_context,
DDL_CMD_DECODE_SET_DPB);
if (ddl) {
ddl->cmd_state = DDL_CMD_INVALID;
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_DPBDONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-DPBDONE");
ddl_client_fatal_cb(ddl);
} else {
DDL_MSG_LOW("INTR_DPBDONE");
DDL_MSG_LOW("ddl_state_transition: %s ~~>"
"DDL_CLIENT_WAIT_FOR_FRAME",
ddl_get_state_string(ddl->client_state));
if (vidc_msg_timing) {
ddl_calc_core_proc_time(__func__, DEC_OP_TIME);
ddl_reset_core_time_variables(DEC_OP_TIME);
}
ddl->client_state = DDL_CLIENT_WAIT_FOR_FRAME;
ddl_vidc_decode_frame_run(ddl);
ret_status = false;
}
}
return ret_status;
}
开发者ID:nickcttm,项目名称:HTC-JetStream-HC-Kernel,代码行数:32,代码来源:vcd_ddl_interrupt_handler.c
示例11: ddl_handle_client_fatal_errors
static u32 ddl_handle_client_fatal_errors(
struct ddl_client_context_type *p_ddl)
{
struct ddl_context_type *p_ddl_context = p_ddl->p_ddl_context;
u32 b_status = FALSE;
switch (p_ddl_context->n_cmd_err_status) {
case VIDC_1080P_ERROR_UNSUPPORTED_FEATURE_IN_PROFILE:
case VIDC_1080P_ERROR_RESOLUTION_NOT_SUPPORTED:
case VIDC_1080P_ERROR_FRAME_RATE_NOT_SUPPORTED:
case VIDC_1080P_ERROR_INVALID_QP_VALUE:
case VIDC_1080P_ERROR_INVALID_RC_REACTION_COEFFICIENT:
case VIDC_1080P_ERROR_INVALID_CPB_SIZE_AT_GIVEN_LEVEL:
case VIDC_1080P_ERROR_ALLOC_DPB_SIZE_NOT_SUFFICIENT:
case VIDC_1080P_ERROR_NUM_DPB_OUT_OF_RANGE:
case VIDC_1080P_ERROR_NULL_METADATA_INPUT_POINTER:
case VIDC_1080P_ERROR_NULL_DPB_POINTER:
case VIDC_1080P_ERROR_NULL_OTH_EXT_BUFADDR:
case VIDC_1080P_ERROR_NULL_MV_POINTER:
b_status = TRUE;
DDL_MSG_ERROR("VIDC_CLIENT_FATAL!!");
break;
default:
break;
}
if (!b_status)
DDL_MSG_ERROR("VIDC_UNKNOWN_OP_FAILED");
ddl_client_fatal_cb(p_ddl);
return TRUE;
}
开发者ID:Anteus,项目名称:kernel_u8800,代码行数:30,代码来源:vcd_ddl_errors.c
示例12: ddl_encoder_frame_run_callback
static void ddl_encoder_frame_run_callback(struct ddl_context
*ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
struct ddl_encoder_data *encoder = &(ddl->codec_data.encoder);
u32 eos_present = false;
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_FRAME_DONE)
) {
VIDC_LOG_STRING("STATE-CRITICAL-ENCFRMRUN");
ddl_client_fatal_cb(ddl_context);
return;
}
VIDC_LOG_STRING("ENC_FRM_RUN_DONE");
ddl_move_command_state(ddl_context, DDL_CMD_INVALID);
vidc_720p_enc_frame_info(&encoder->enc_frame_info);
ddl->output_frame.vcd_frm.ip_frm_tag =
ddl->input_frame.vcd_frm.ip_frm_tag;
ddl->output_frame.vcd_frm.data_len =
encoder->enc_frame_info.enc_size;
ddl->output_frame.vcd_frm.flags |= VCD_FRAME_FLAG_ENDOFFRAME;
ddl_get_frame
(&(ddl->output_frame.vcd_frm),
encoder->enc_frame_info.frame);
ddl_process_encoder_metadata(ddl);
ddl_encode_dynamic_property(ddl, false);
ddl->input_frame.frm_trans_end = false;
ddl_context->ddl_callback(VCD_EVT_RESP_INPUT_DONE, VCD_S_SUCCESS,
&(ddl->input_frame), sizeof(struct ddl_frame_data_tag),
(u32 *) ddl, ddl_context->client_data);
if (vidc_msg_timing)
ddl_calc_core_proc_time(__func__, ENC_OP_TIME);
/* check the presence of EOS */
eos_present =
((VCD_FRAME_FLAG_EOS & ddl->input_frame.vcd_frm.flags));
ddl->output_frame.frm_trans_end = !eos_present;
ddl_context->ddl_callback(VCD_EVT_RESP_OUTPUT_DONE, VCD_S_SUCCESS,
&(ddl->output_frame), sizeof(struct ddl_frame_data_tag),
(u32 *) ddl, ddl_context->client_data);
if (eos_present) {
VIDC_LOG_STRING("ENC-EOS_DONE");
ddl_context->ddl_callback(VCD_EVT_RESP_EOS_DONE,
VCD_S_SUCCESS, NULL, 0, (u32 *)ddl,
ddl_context->client_data);
}
ddl_move_client_state(ddl, DDL_CLIENT_WAIT_FOR_FRAME);
DDL_IDLE(ddl_context);
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:58,代码来源:vcd_ddl_interrupt_handler.c
示例13: ddl_eos_done_callback
static u32 ddl_eos_done_callback(struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
u32 displaystatus, resl_change;
if (!DDLCOMMAND_STATE_IS(ddl_context, DDL_CMD_EOS)) {
VIDC_LOGERR_STRING("UNKWN_EOSDONE");
ddl_client_fatal_cb(ddl_context);
return true;
}
if (!ddl ||
!ddl->decoding ||
!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_EOS_DONE)
) {
VIDC_LOG_STRING("STATE-CRITICAL-EOSDONE");
ddl_client_fatal_cb(ddl_context);
return true;
}
ddl_move_command_state(ddl_context, DDL_CMD_INVALID);
vidc_720p_eos_info(&displaystatus, &resl_change);
if ((enum vidc_720p_display_status)displaystatus
!= VIDC_720P_EMPTY_BUFFER) {
VIDC_LOG_STRING("EOSDONE-EMPTYBUF-ISSUE");
}
ddl_decode_dynamic_property(ddl, false);
if (resl_change == 0x1) {
ddl->codec_data.decoder.header_in_start = false;
ddl->codec_data.decoder.decode_config.sequence_header =
ddl->input_frame.vcd_frm.physical;
ddl->codec_data.decoder.decode_config.sequence_header_len =
ddl->input_frame.vcd_frm.data_len;
ddl_decode_init_codec(ddl);
return false;
}
ddl_move_client_state(ddl, DDL_CLIENT_WAIT_FOR_FRAME);
VIDC_LOG_STRING("EOS_DONE");
ddl_context->ddl_callback(VCD_EVT_RESP_EOS_DONE, VCD_S_SUCCESS,
NULL, 0, (u32 *) ddl, ddl_context->client_data);
DDL_IDLE(ddl_context);
return true;
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:45,代码来源:vcd_ddl_interrupt_handler.c
示例14: ddl_decoder_eos_done_callback
static void ddl_decoder_eos_done_callback(
struct ddl_client_context_type *p_ddl)
{
struct ddl_context_type *p_ddl_context = p_ddl->p_ddl_context;
if (!p_ddl->b_decoding) {
DDL_MSG_ERROR("STATE-CRITICAL-EOSDONE");
ddl_client_fatal_cb(p_ddl);
} else {
p_ddl->e_client_state = DDL_CLIENT_WAIT_FOR_FRAME;
DDL_MSG_LOW("EOS_DONE");
p_ddl_context->ddl_callback(VCD_EVT_RESP_EOS_DONE,
VCD_S_SUCCESS, NULL, 0, (u32 *)p_ddl,
p_ddl->p_client_data);
ddl_release_command_channel(p_ddl_context,
p_ddl->n_command_channel);
}
}
开发者ID:Anteus,项目名称:kernel_u8800,代码行数:18,代码来源:vcd_ddl_interrupt_handler.c
示例15: ddl_dpb_buffers_set_done_callback
static u32 ddl_dpb_buffers_set_done_callback(struct ddl_context
*ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
ddl_move_command_state(ddl_context, DDL_CMD_INVALID);
if (!ddl ||
!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_DPBDONE)
) {
VIDC_LOG_STRING("STATE-CRITICAL-DPBDONE");
ddl_client_fatal_cb(ddl_context);
return true;
}
VIDC_LOG_STRING("INTR_DPBDONE");
ddl_move_client_state(ddl, DDL_CLIENT_WAIT_FOR_FRAME);
ddl->codec_data.decoder.dec_disp_info.img_size_x = 0;
ddl->codec_data.decoder.dec_disp_info.img_size_y = 0;
ddl_decode_frame_run(ddl);
return false;
}
开发者ID:klquicksall,项目名称:Ace-GB-DHD,代码行数:20,代码来源:vcd_ddl_interrupt_handler.c
示例16: ddl_handle_npf_decoding_error
void ddl_handle_npf_decoding_error(struct ddl_context *ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
struct ddl_decoder_data *decoder = &ddl->codec_data.decoder;
if (!ddl->decoding) {
ERR("FWISSUE-ENC-NPF!!!");
ddl_client_fatal_cb(ddl_context);
return;
}
vidc_720p_decode_display_info(&decoder->dec_disp_info);
ddl_decode_dynamic_property(ddl, false);
ddl->output_frame.vcd_frm.ip_frm_tag =
decoder->dec_disp_info.tag_top;
ddl->output_frame.vcd_frm.physical = NULL;
ddl->output_frame.frm_trans_end = false;
ddl->ddl_context->ddl_callback(
VCD_EVT_RESP_OUTPUT_DONE,
VCD_ERR_INTRLCD_FIELD_DROP,
&ddl->output_frame,
sizeof(struct ddl_frame_data_tag),
(void *)ddl,
ddl->ddl_context->client_data);
ddl_decode_frame_run(ddl);
}
开发者ID:MiniBlu,项目名称:cm11_kernel_htc_msm8974a3ul,代码行数:24,代码来源:vcd_ddl_errors.c
示例17: ddl_encoder_frame_run_callback
static void ddl_encoder_frame_run_callback(
struct ddl_client_context *ddl)
{
struct ddl_context *ddl_context = ddl->ddl_context;
struct ddl_encoder_data *encoder =
&(ddl->codec_data.encoder);
struct vcd_frame_data *output_frame =
&(ddl->output_frame.vcd_frm);
u32 bottom_frame_tag;
DDL_MSG_MED("ddl_encoder_frame_run_callback");
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_FRAME_DONE) &&
!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_EOS_DONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-ENCFRMRUN");
ddl_client_fatal_cb(ddl);
} else {
if (vidc_msg_timing)
ddl_calc_core_proc_time(__func__, ENC_OP_TIME);
DDL_MSG_LOW("ENC_FRM_RUN_DONE");
ddl->cmd_state = DDL_CMD_INVALID;
vidc_1080p_get_encode_frame_info(&encoder->enc_frame_info);
vidc_sm_get_frame_tags(&ddl->shared_mem
[ddl->command_channel],
&output_frame->ip_frm_tag, &bottom_frame_tag);
if (encoder->meta_data_enable_flag)
vidc_sm_get_metadata_status(&ddl->shared_mem
[ddl->command_channel],
&encoder->enc_frame_info.meta_data_exists);
if (encoder->enc_frame_info.enc_frame_size ||
(encoder->enc_frame_info.enc_frame ==
VIDC_1080P_ENCODE_FRAMETYPE_SKIPPED) ||
DDLCLIENT_STATE_IS(ddl,
DDL_CLIENT_WAIT_FOR_EOS_DONE)) {
u8 *input_buffer_address = NULL;
output_frame->data_len =
encoder->enc_frame_info.enc_frame_size;
output_frame->flags |= VCD_FRAME_FLAG_ENDOFFRAME;
ddl_get_encoded_frame(output_frame,
encoder->codec.codec,
encoder->enc_frame_info.enc_frame);
ddl_process_encoder_metadata(ddl);
ddl_vidc_encode_dynamic_property(ddl, false);
ddl->input_frame.frm_trans_end = false;
input_buffer_address = ddl_context->dram_base_a.\
align_physical_addr +
encoder->enc_frame_info.enc_luma_address;
ddl_get_input_frame_from_pool(ddl,
input_buffer_address);
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);
ddl->output_frame.frm_trans_end =
DDLCLIENT_STATE_IS(ddl,
DDL_CLIENT_WAIT_FOR_EOS_DONE) ? false : true;
ddl_context->ddl_callback(VCD_EVT_RESP_OUTPUT_DONE,
VCD_S_SUCCESS, &(ddl->output_frame),
sizeof(struct ddl_frame_data_tag),
(u32 *)ddl, ddl->client_data);
if (DDLCLIENT_STATE_IS(ddl,
DDL_CLIENT_WAIT_FOR_EOS_DONE) &&
encoder->i_period.b_frames) {
if ((ddl->extra_output_buf_count < 0) ||
(ddl->extra_output_buf_count >
encoder->i_period.b_frames)) {
DDL_MSG_ERROR("Invalid B frame output"
"buffer index");
} else {
struct vidc_1080p_enc_frame_start_param
enc_param;
ddl->output_frame = ddl->\
extra_output_frame[ddl->\
extra_output_buf_count];
ddl->\
extra_output_buf_count--;
output_frame =
&ddl->output_frame.\
vcd_frm;
memset(&enc_param, 0,
sizeof(enc_param));
enc_param.cmd_seq_num =
++ddl_context->cmd_seq_num;
enc_param.inst_id = ddl->instance_id;
enc_param.shared_mem_addr_offset =
DDL_ADDR_OFFSET(ddl_context->\
dram_base_a, ddl->shared_mem
[ddl->command_channel]);
enc_param.stream_buffer_addr_offset =
DDL_OFFSET(ddl_context->\
dram_base_a.\
align_physical_addr,
output_frame->physical);
enc_param.stream_buffer_size =
encoder->client_output_buf_req.sz;
enc_param.encode =
VIDC_1080P_ENC_TYPE_LAST_FRAME_DATA;
ddl->cmd_state = DDL_CMD_ENCODE_FRAME;
//.........这里部分代码省略.........
开发者ID:nickcttm,项目名称:HTC-JetStream-HC-Kernel,代码行数:101,代码来源:vcd_ddl_interrupt_handler.c
示例18: ddl_decoder_seq_done_callback
static u32 ddl_decoder_seq_done_callback(struct ddl_context *ddl_context,
struct ddl_client_context *ddl)
{
struct ddl_decoder_data *decoder = &ddl->codec_data.decoder;
struct vidc_1080p_seq_hdr_info seq_hdr_info;
u32 process_further = true;
DDL_MSG_MED("ddl_decoder_seq_done_callback");
if (!ddl->decoding ||
!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_INITCODECDONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-HDDONE");
ddl_client_fatal_cb(ddl);
} else {
ddl->cmd_state = DDL_CMD_INVALID;
DDL_MSG_LOW("ddl_state_transition: %s ~~>"
"DDL_CLIENT_WAIT_FOR_DPB",
ddl_get_state_string(ddl->client_state));
ddl->client_state = DDL_CLIENT_WAIT_FOR_DPB;
DDL_MSG_LOW("HEADER_DONE");
vidc_1080p_get_decode_seq_start_result(&seq_hdr_info);
parse_hdr_size_data(ddl, &seq_hdr_info);
if (!seq_hdr_info.img_size_x || !seq_hdr_info.img_size_y) {
DDL_MSG_ERROR("FATAL:ZeroImageSize");
ddl_client_fatal_cb(ddl);
return process_further;
}
vidc_sm_get_profile_info(&ddl->shared_mem
[ddl->command_channel],
&seq_hdr_info.profile, &seq_hdr_info.level);
ddl_get_dec_profile_level(decoder, seq_hdr_info.profile,
seq_hdr_info.level);
ddl_calculate_stride(&decoder->frame_size,
!decoder->progressive_only);
decoder->frame_size.scan_lines =
DDL_ALIGN(decoder->frame_size.height, DDL_TILE_ALIGN_HEIGHT);
decoder->frame_size.stride =
DDL_ALIGN(decoder->frame_size.width, DDL_TILE_ALIGN_WIDTH);
parse_hdr_crop_data(ddl, &seq_hdr_info);
if (decoder->codec.codec == VCD_CODEC_H264 &&
seq_hdr_info.level > VIDC_1080P_H264_LEVEL4) {
DDL_MSG_ERROR("WARNING: H264MaxLevelExceeded : %d",
seq_hdr_info.level);
}
ddl_set_default_decoder_buffer_req(decoder, false);
if (decoder->header_in_start) {
decoder->client_frame_size = decoder->frame_size;
decoder->client_output_buf_req =
decoder->actual_output_buf_req;
if ((decoder->frame_size.width *
decoder->frame_size.height) >=
VCD_DDL_WVGA_BUF_SIZE) {
if ((decoder->actual_output_buf_req.\
actual_count + 2) < 10)
decoder->client_output_buf_req.\
actual_count = 10;
else
decoder->client_output_buf_req.\
actual_count += 2;
} else
decoder->client_output_buf_req.\
actual_count = decoder->\
actual_output_buf_req.\
actual_count + 5;
decoder->client_input_buf_req =
decoder->actual_input_buf_req;
ddl_context->ddl_callback(VCD_EVT_RESP_START,
VCD_S_SUCCESS, NULL, 0, (u32 *) ddl,
ddl->client_data);
ddl_release_command_channel(ddl_context,
ddl->command_channel);
} else {
u32 seq_hdr_only_frame = false;
u32 need_reconfig = true;
struct vcd_frame_data *input_vcd_frm =
&ddl->input_frame.vcd_frm;
if ((input_vcd_frm->flags &
VCD_FRAME_FLAG_EOS) ||
((decoder->frame_size.width ==
decoder->client_frame_size.width) &&
(decoder->frame_size.height ==
decoder->client_frame_size.height) &&
(decoder->actual_output_buf_req.sz <=
decoder->client_output_buf_req.sz) &&
(decoder->actual_output_buf_req.actual_count ==
decoder->client_output_buf_req.actual_count) &&
(decoder->frame_size.scan_lines ==
decoder->client_frame_size.scan_lines) &&
(decoder->frame_size.stride ==
decoder->client_frame_size.stride)))
need_reconfig = false;
if (((input_vcd_frm->flags &
VCD_FRAME_FLAG_CODECCONFIG) &&
(!(input_vcd_frm->flags &
VCD_FRAME_FLAG_SYNCFRAME))) ||
input_vcd_frm->data_len <=
seq_hdr_info.dec_frm_size) {
seq_hdr_only_frame = true;
input_vcd_frm->offset +=
seq_hdr_info.dec_frm_size;
//.........这里部分代码省略.........
开发者ID:victor2002,项目名称:a770k_kernel,代码行数:101,代码来源:vcd_ddl_interrupt_handler.c
示例19: ddl_decoder_frame_run_callback
static u32 ddl_decoder_frame_run_callback(struct ddl_context
*ddl_context)
{
struct ddl_client_context *ddl = ddl_context->current_ddl;
struct vidc_720p_dec_disp_info *dec_disp_info =
&(ddl->codec_data.decoder.dec_disp_info);
u32 callback_end = false;
u32 status = true, eos_present = false;;
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_FRAME_DONE)) {
VIDC_LOG_STRING("STATE-CRITICAL-DECFRMRUN");
ddl_client_fatal_cb(ddl_context);
return true;
}
VIDC_LOG_STRING("DEC_FRM_RUN_DONE");
ddl_move_command_state(ddl_context, DDL_CMD_INVALID);
vidc_720p_decode_display_info(dec_disp_info);
ddl_decode_dynamic_property(ddl, false);
if (dec_disp_info->resl_change) {
VIDC_LOG_STRING
("DEC_FRM_RUN_DONE: RECONFIG");
ddl_move_client_state(ddl, DDL_CLIENT_WAIT_FOR_EOS_DONE);
ddl_move_command_state(ddl_context, DDL_CMD_EOS);
vidc_720p_submit_command(ddl->channel_id,
VIDC_720P_CMD_FRAMERUN_REALLOCATE);
return false;
}
if ((VCD_FRAME_FLAG_EOS & ddl->input_frame.vcd_frm.flags)) {
callback_end = false;
eos_present = true;
}
if (dec_disp_info->disp_status == VIDC_720P_DECODE_ONLY ||
dec_disp_info->disp_status
== VIDC_720P_DECODE_AND_DISPLAY) {
if (!eos_present)
callback_end = (dec_disp_info->disp_status
== VIDC_720P_DECODE_ONLY);
ddl_decoder_input_done_callback(ddl, callback_end);
}
if (dec_disp_info->disp_status == VIDC_720P_DECODE_AND_DISPLAY
|| dec_disp_info->disp_status == VIDC_720P_DISPLAY_ONLY) {
if (!eos_present)
callback_end =
(dec_disp_info->disp_status
== VIDC_720P_DECODE_AND_DISPLAY);
if (ddl_decoder_output_done_callback(ddl, callback_end)
!= VCD_S_SUCCESS)
return true;
}
if (dec_disp_info->disp_status == VIDC_720P_DISPLAY_ONLY ||
dec_disp_info->disp_status == VIDC_720P_EMPTY_BUFFER) {
/* send the same input once again for decoding */
ddl_decode_frame_run(ddl);
/* client need to ignore the interrupt */
status = false;
} else if (eos_present) {
/* send EOS command to HW */
ddl_decode_eos_run(ddl);
/* client need to ignore the interrupt */
status = false;
} else {
ddl_move_client_state(ddl, DDL_CLIENT_WAIT_FOR_FRAME);
/* move to Idle */
DDL_IDLE(ddl_context);
}
return status;
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:79,代码来源:vcd_ddl_interrupt_handler.c
示例20: ddl_decoder_frame_run_callback
static u32 ddl_decoder_frame_run_callback(struct ddl_client_context *ddl)
{
struct ddl_context *ddl_context = ddl->ddl_context;
u32 callback_end = false, ret_status = false;
u32 eos_present = false, rsl_chg;
enum vidc_1080p_display_status disp_status;
DDL_MSG_MED("ddl_decoder_frame_run_callback");
if (!DDLCLIENT_STATE_IS(ddl, DDL_CLIENT_WAIT_FOR_FRAME_DONE)) {
DDL_MSG_ERROR("STATE-CRITICAL-DECFRMRUN");
ddl_client_fatal_cb(ddl);
ret_status = true;
} else {
DDL_MSG_LOW("DEC_FRM_RUN_DONE");
ddl->cmd_state = DDL_CMD_INVALID;
get_dec_status(&ddl->codec_data.decoder.dec_disp_info,
ddl->codec_data.decoder.output_order,
&disp_status, &rsl_chg);
ddl_vidc_decode_dynamic_property(ddl, false);
if (rsl_chg) {
DDL_MSG_ERROR("DEC_RECONFIG_NOT_SUPPORTED");
ddl_client_fatal_cb(ddl);
#if (1) //PANTECH Qualcomm SBA Àû¿ë: Case No.517406
ret_status = true;
#endif
} else {
if ((VCD_FRAME_FLAG_EOS &
ddl->input_frame.vcd_frm.flags)) {
callback_end = false;
eos_present = true;
}
if (disp_status ==
VIDC_1080P_DISPLAY_STATUS_DECODE_ONLY ||
disp_status ==
VIDC_1080P_DISPLAY_STATUS_DECODE_AND_DISPLAY) {
if (!eos_present)
callback_end =
(disp_status ==
VIDC_1080P_DISPLAY_STATUS_DECODE_ONLY);
ddl_decoder_input_done_callback(ddl,
callback_end);
}
if (disp_status ==
VIDC_1080P_DISPLAY_STATUS_DECODE_AND_DISPLAY ||
disp_status ==
VIDC_1080P_DISPLAY_STATUS_DISPLAY_ONLY) {
if (!eos_present)
callback_end = (disp_status ==
VIDC_1080P_DISPLAY_STATUS_DECODE_AND_DISPLAY);
if (ddl_decoder_output_done_callback(
ddl, callback_end))
ret_status = true;
}
if (!ret_status) {
if (disp_status ==
VIDC_1080P_DISPLAY_STATUS_DISPLAY_ONLY
|| disp_status ==
VIDC_1080P_DISPLAY_STATUS_DPB_EMPTY ||
disp_status ==
VIDC_1080P_DISPLAY_STATUS_NOOP) {
ddl_vidc_decode_frame_run(ddl);
} else if (eos_present)
ddl_vidc_decode_eos_run(ddl);
else {
ddl->client_state =
DDL_CLIENT_WAIT_FOR_FRAME;
ddl_release_command_channel(ddl_context,
ddl->command_channel);
ret_status = true;
}
}
}
}
return ret_status;
}
开发者ID:victor2002,项目名称:a770k_kernel,代码行数:74,代码来源:vcd_ddl_interrupt_handler.c
注:本文中的ddl_client_fatal_cb函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论