Loading drivers/media/platform/msm/vidc/msm_vdec.c +35 −32 Original line number Diff line number Diff line Loading @@ -799,6 +799,7 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) inst->capability.secure_output2_threshold.max = 0; inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_DYNAMIC; inst->stream_output_mode = HAL_VIDEO_DECODER_PRIMARY; /* To start with, both ports are 1 plane each */ inst->bufq[OUTPUT_PORT].num_planes = 1; inst->bufq[CAPTURE_PORT].num_planes = 1; Loading Loading @@ -1082,20 +1083,31 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) rc = call_hfi_op(hdev, session_set_property, (void *) inst->session, HAL_PARAM_VDEC_MULTI_STREAM, pdata); if (rc) if (rc) { dprintk(VIDC_ERR, "Failed:Disabling OUTPUT2 port : %d\n", rc); bufreq_out2 = get_buff_req_buffer(inst, HAL_BUFFER_OUTPUT2); if (!bufreq_out2) break; } /* * If stream output mode was secondary earlier then * populate output bufreqs with output2 bufreqs */ if (is_secondary_output_mode(inst)) { msm_comm_copy_bufreqs(inst, HAL_BUFFER_OUTPUT2, HAL_BUFFER_OUTPUT); msm_comm_copy_bufreqs(inst, HAL_BUFFER_EXTRADATA_OUTPUT2, HAL_BUFFER_EXTRADATA_OUTPUT); } bufreq_out2->buffer_count_min = bufreq_out2->buffer_count_min_host = bufreq_out2->buffer_count_actual = 0; /* reset output2 buffer requirements */ msm_comm_reset_bufreqs(inst, HAL_BUFFER_OUTPUT2); msm_comm_reset_bufreqs(inst, HAL_BUFFER_EXTRADATA_OUTPUT2); msm_comm_set_stream_output_mode(inst, HAL_VIDEO_DECODER_PRIMARY); break; case V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_SECONDARY: switch (inst->bit_depth) { Loading Loading @@ -1158,23 +1170,25 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) frame_sz.height); rc = call_hfi_op(hdev, session_set_property, (void *) inst->session, HAL_PARAM_FRAME_SIZE, pdata); if (rc) if (rc) { dprintk(VIDC_ERR, "Failed setting OUTPUT2 size : %d\n", rc); /* Populate output2 bufreqs with output bufreqs */ bufreq = get_buff_req_buffer(inst, HAL_BUFFER_OUTPUT); if (!bufreq) break; } /* Populate output2 bufreqs with output bufreqs */ msm_comm_copy_bufreqs(inst, HAL_BUFFER_OUTPUT, HAL_BUFFER_OUTPUT2); msm_comm_copy_bufreqs(inst, HAL_BUFFER_EXTRADATA_OUTPUT, HAL_BUFFER_EXTRADATA_OUTPUT2); bufreq_out2 = get_buff_req_buffer(inst, HAL_BUFFER_OUTPUT2); if (!bufreq_out2) break; memcpy(bufreq_out2, bufreq, sizeof(struct hal_buffer_requirements)); bufreq_out2->buffer_type = HAL_BUFFER_OUTPUT2; rc = msm_comm_set_buffer_count(inst, bufreq_out2->buffer_count_min_host, bufreq_out2->buffer_count_actual, Loading @@ -1182,23 +1196,11 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) if (rc) { dprintk(VIDC_ERR, "%s: Failed to set opb buffer count to FW\n"); return -EINVAL; } /* Do the same for extradata but no set is required */ bufreq = get_buff_req_buffer(inst, HAL_BUFFER_EXTRADATA_OUTPUT); if (!bufreq) break; bufreq_out2 = get_buff_req_buffer(inst, HAL_BUFFER_EXTRADATA_OUTPUT2); if (!bufreq_out2) break; } memcpy(bufreq_out2, bufreq, sizeof(struct hal_buffer_requirements)); bufreq_out2->buffer_type = HAL_BUFFER_EXTRADATA_OUTPUT2; msm_comm_set_stream_output_mode(inst, HAL_VIDEO_DECODER_SECONDARY); break; default: dprintk(VIDC_ERR, Loading Loading @@ -1292,8 +1294,9 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) if (!rc && property_id) { dprintk(VIDC_DBG, "Control: Name = %s, ID = 0x%x Value = %d\n", ctrl->name, ctrl->id, ctrl->val); "Control: %x : Name = %s, ID = 0x%x Value = %d\n", hash32_ptr(inst->session), ctrl->name, ctrl->id, ctrl->val); rc = call_hfi_op(hdev, session_set_property, (void *) inst->session, property_id, pdata); } Loading drivers/media/platform/msm/vidc/msm_venc.c +3 −2 Original line number Diff line number Diff line Loading @@ -2136,8 +2136,9 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) if (!rc && property_id) { dprintk(VIDC_DBG, "Control: Name = %s, ID = 0x%x Value = %d\n", ctrl->name, ctrl->id, ctrl->val); "Control: %x : Name = %s, ID = 0x%x Value = %d\n", hash32_ptr(inst->session), ctrl->name, ctrl->id, ctrl->val); rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, property_id, pdata); } Loading drivers/media/platform/msm/vidc/msm_vidc.c +4 −0 Original line number Diff line number Diff line Loading @@ -1631,6 +1631,8 @@ static int try_get_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) return -EINVAL; } ctrl->val = bufreq->buffer_count_min_host; dprintk(VIDC_DBG, "g_min: %x : hal_buffer %d min buffers %d\n", hash32_ptr(inst->session), buffer_type, ctrl->val); break; case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT: bufreq = get_buff_req_buffer(inst, HAL_BUFFER_INPUT); Loading @@ -1651,6 +1653,8 @@ static int try_get_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) MIN_NUM_OUTPUT_BUFFERS_VP9; ctrl->val = bufreq->buffer_count_min_host; dprintk(VIDC_DBG, "g_min: %x : hal_buffer %d min buffers %d\n", hash32_ptr(inst->session), HAL_BUFFER_INPUT, ctrl->val); break; case V4L2_CID_MPEG_VIDC_VIDEO_TME_PAYLOAD_VERSION: ctrl->val = inst->capability.tme_version; Loading drivers/media/platform/msm/vidc/msm_vidc_common.c +105 −9 Original line number Diff line number Diff line Loading @@ -707,16 +707,46 @@ int msm_comm_ctrl_deinit(struct msm_vidc_inst *inst) return 0; } int msm_comm_set_stream_output_mode(struct msm_vidc_inst *inst, enum multi_stream mode) { if (!inst) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } if (!is_decode_session(inst)) { dprintk(VIDC_DBG, "%s: not a decode session %x\n", __func__, hash32_ptr(inst->session)); return -EINVAL; } if (mode == HAL_VIDEO_DECODER_SECONDARY) inst->stream_output_mode = HAL_VIDEO_DECODER_SECONDARY; else inst->stream_output_mode = HAL_VIDEO_DECODER_PRIMARY; return 0; } enum multi_stream msm_comm_get_stream_output_mode(struct msm_vidc_inst *inst) { switch (msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_MODE)) { case V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_SECONDARY: return HAL_VIDEO_DECODER_SECONDARY; case V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_PRIMARY: default: if (!inst) { dprintk(VIDC_ERR, "%s: invalid params, return default mode\n", __func__); return HAL_VIDEO_DECODER_PRIMARY; } if (!is_decode_session(inst)) { dprintk(VIDC_DBG, "%s: not a decode session %x\n", __func__, hash32_ptr(inst->session)); return HAL_VIDEO_DECODER_PRIMARY; } if (inst->stream_output_mode == HAL_VIDEO_DECODER_SECONDARY) return HAL_VIDEO_DECODER_SECONDARY; else return HAL_VIDEO_DECODER_PRIMARY; } static int msm_comm_get_mbs_per_sec(struct msm_vidc_inst *inst) Loading Loading @@ -1742,6 +1772,9 @@ static void handle_event_change(enum hal_command_response cmd, void *data) bufreq->buffer_count_min_host = bufreq->buffer_count_min + extra_buff_count; } dprintk(VIDC_DBG, "%s: buffer[%d] count: min %d min_host %d\n", __func__, bufreq->buffer_type, bufreq->buffer_count_min, bufreq->buffer_count_min_host); mutex_unlock(&inst->lock); Loading Loading @@ -3099,6 +3132,11 @@ static int msm_comm_init_buffer_count(struct msm_vidc_inst *inst) bufreq->buffer_count_min_host = bufreq->buffer_count_actual = bufreq->buffer_count_min + extra_buff_count; dprintk(VIDC_DBG, "%s: %x : input min %d min_host %d actual %d\n", __func__, hash32_ptr(inst->session), bufreq->buffer_count_min, bufreq->buffer_count_min_host, bufreq->buffer_count_actual); rc = msm_comm_set_buffer_count(inst, bufreq->buffer_count_min_host, bufreq->buffer_count_actual, HAL_BUFFER_INPUT); Loading Loading @@ -3128,6 +3166,11 @@ static int msm_comm_init_buffer_count(struct msm_vidc_inst *inst) bufreq->buffer_count_min_host = bufreq->buffer_count_actual = bufreq->buffer_count_min + extra_buff_count; dprintk(VIDC_DBG, "%s: %x : output min %d min_host %d actual %d\n", __func__, hash32_ptr(inst->session), bufreq->buffer_count_min, bufreq->buffer_count_min_host, bufreq->buffer_count_actual); rc = msm_comm_set_buffer_count(inst, bufreq->buffer_count_min_host, bufreq->buffer_count_actual, HAL_BUFFER_OUTPUT); Loading Loading @@ -3476,6 +3519,58 @@ static int get_flipped_state(int present_state, return flipped_state; } int msm_comm_reset_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer buf_type) { struct hal_buffer_requirements *bufreqs; if (!inst) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } bufreqs = get_buff_req_buffer(inst, buf_type); if (!bufreqs) { dprintk(VIDC_ERR, "%s: invalid buf type %d\n", __func__, buf_type); return -EINVAL; } bufreqs->buffer_size = bufreqs->buffer_region_size = bufreqs->buffer_count_min = bufreqs->buffer_count_min_host = bufreqs->buffer_count_actual = bufreqs->contiguous = bufreqs->buffer_alignment = 0; return 0; } int msm_comm_copy_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer src_type, enum hal_buffer dst_type) { struct hal_buffer_requirements *src_bufreqs; struct hal_buffer_requirements *dst_bufreqs; if (!inst) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } src_bufreqs = get_buff_req_buffer(inst, src_type); dst_bufreqs = get_buff_req_buffer(inst, dst_type); if (!src_bufreqs || !dst_bufreqs) { dprintk(VIDC_ERR, "%s: invalid buf type: src %d dst %d\n", __func__, src_type, dst_type); return -EINVAL; } dst_bufreqs->buffer_size = src_bufreqs->buffer_size; dst_bufreqs->buffer_region_size = src_bufreqs->buffer_region_size; dst_bufreqs->buffer_count_min = src_bufreqs->buffer_count_min; dst_bufreqs->buffer_count_min_host = src_bufreqs->buffer_count_min_host; dst_bufreqs->buffer_count_actual = src_bufreqs->buffer_count_actual; dst_bufreqs->contiguous = src_bufreqs->contiguous; dst_bufreqs->buffer_alignment = src_bufreqs->buffer_alignment; return 0; } struct hal_buffer_requirements *get_buff_req_buffer( struct msm_vidc_inst *inst, enum hal_buffer buffer_type) { Loading Loading @@ -4827,8 +4922,9 @@ int msm_comm_set_buffer_count(struct msm_vidc_inst *inst, buf_count.buffer_type = type; buf_count.buffer_count_actual = act_count; buf_count.buffer_count_min_host = host_count; dprintk(VIDC_DBG, "%s : Act count = %d Host count = %d\n", __func__, act_count, host_count); dprintk(VIDC_DBG, "%s: %x : hal_buffer %d min_host %d actual %d\n", __func__, hash32_ptr(inst->session), type, host_count, act_count); rc = call_hfi_op(hdev, session_set_property, inst->session, HAL_PARAM_BUFFER_COUNT_ACTUAL, &buf_count); if (rc) Loading drivers/media/platform/msm/vidc/msm_vidc_common.h +16 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,16 @@ static inline bool is_encode_session(struct msm_vidc_inst *inst) return inst->session_type == MSM_VIDC_ENCODER; } static inline bool is_primary_output_mode(struct msm_vidc_inst *inst) { return inst->stream_output_mode == HAL_VIDEO_DECODER_PRIMARY; } static inline bool is_secondary_output_mode(struct msm_vidc_inst *inst) { return inst->stream_output_mode == HAL_VIDEO_DECODER_SECONDARY; } static inline int msm_comm_g_ctrl(struct msm_vidc_inst *inst, struct v4l2_control *ctrl) { Loading Loading @@ -128,6 +138,10 @@ int msm_comm_force_cleanup(struct msm_vidc_inst *inst); int msm_comm_suspend(int core_id); enum hal_extradata_id msm_comm_get_hal_extradata_index( enum v4l2_mpeg_vidc_extradata index); int msm_comm_reset_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer buf_type); int msm_comm_copy_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer src_type, enum hal_buffer dst_type); struct hal_buffer_requirements *get_buff_req_buffer( struct msm_vidc_inst *inst, u32 buffer_type); #define IS_PRIV_CTRL(idx) (\ Loading @@ -138,6 +152,8 @@ int msm_comm_kill_session(struct msm_vidc_inst *inst); void msm_comm_generate_session_error(struct msm_vidc_inst *inst); void msm_comm_generate_sys_error(struct msm_vidc_inst *inst); enum multi_stream msm_comm_get_stream_output_mode(struct msm_vidc_inst *inst); int msm_comm_set_stream_output_mode(struct msm_vidc_inst *inst, enum multi_stream mode); enum hal_buffer msm_comm_get_hal_output_buffer(struct msm_vidc_inst *inst); int msm_comm_smem_alloc(struct msm_vidc_inst *inst, size_t size, u32 align, u32 flags, enum hal_buffer buffer_type, int map_kernel, Loading Loading
drivers/media/platform/msm/vidc/msm_vdec.c +35 −32 Original line number Diff line number Diff line Loading @@ -799,6 +799,7 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) inst->capability.secure_output2_threshold.max = 0; inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC; inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_DYNAMIC; inst->stream_output_mode = HAL_VIDEO_DECODER_PRIMARY; /* To start with, both ports are 1 plane each */ inst->bufq[OUTPUT_PORT].num_planes = 1; inst->bufq[CAPTURE_PORT].num_planes = 1; Loading Loading @@ -1082,20 +1083,31 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) rc = call_hfi_op(hdev, session_set_property, (void *) inst->session, HAL_PARAM_VDEC_MULTI_STREAM, pdata); if (rc) if (rc) { dprintk(VIDC_ERR, "Failed:Disabling OUTPUT2 port : %d\n", rc); bufreq_out2 = get_buff_req_buffer(inst, HAL_BUFFER_OUTPUT2); if (!bufreq_out2) break; } /* * If stream output mode was secondary earlier then * populate output bufreqs with output2 bufreqs */ if (is_secondary_output_mode(inst)) { msm_comm_copy_bufreqs(inst, HAL_BUFFER_OUTPUT2, HAL_BUFFER_OUTPUT); msm_comm_copy_bufreqs(inst, HAL_BUFFER_EXTRADATA_OUTPUT2, HAL_BUFFER_EXTRADATA_OUTPUT); } bufreq_out2->buffer_count_min = bufreq_out2->buffer_count_min_host = bufreq_out2->buffer_count_actual = 0; /* reset output2 buffer requirements */ msm_comm_reset_bufreqs(inst, HAL_BUFFER_OUTPUT2); msm_comm_reset_bufreqs(inst, HAL_BUFFER_EXTRADATA_OUTPUT2); msm_comm_set_stream_output_mode(inst, HAL_VIDEO_DECODER_PRIMARY); break; case V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_SECONDARY: switch (inst->bit_depth) { Loading Loading @@ -1158,23 +1170,25 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) frame_sz.height); rc = call_hfi_op(hdev, session_set_property, (void *) inst->session, HAL_PARAM_FRAME_SIZE, pdata); if (rc) if (rc) { dprintk(VIDC_ERR, "Failed setting OUTPUT2 size : %d\n", rc); /* Populate output2 bufreqs with output bufreqs */ bufreq = get_buff_req_buffer(inst, HAL_BUFFER_OUTPUT); if (!bufreq) break; } /* Populate output2 bufreqs with output bufreqs */ msm_comm_copy_bufreqs(inst, HAL_BUFFER_OUTPUT, HAL_BUFFER_OUTPUT2); msm_comm_copy_bufreqs(inst, HAL_BUFFER_EXTRADATA_OUTPUT, HAL_BUFFER_EXTRADATA_OUTPUT2); bufreq_out2 = get_buff_req_buffer(inst, HAL_BUFFER_OUTPUT2); if (!bufreq_out2) break; memcpy(bufreq_out2, bufreq, sizeof(struct hal_buffer_requirements)); bufreq_out2->buffer_type = HAL_BUFFER_OUTPUT2; rc = msm_comm_set_buffer_count(inst, bufreq_out2->buffer_count_min_host, bufreq_out2->buffer_count_actual, Loading @@ -1182,23 +1196,11 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) if (rc) { dprintk(VIDC_ERR, "%s: Failed to set opb buffer count to FW\n"); return -EINVAL; } /* Do the same for extradata but no set is required */ bufreq = get_buff_req_buffer(inst, HAL_BUFFER_EXTRADATA_OUTPUT); if (!bufreq) break; bufreq_out2 = get_buff_req_buffer(inst, HAL_BUFFER_EXTRADATA_OUTPUT2); if (!bufreq_out2) break; } memcpy(bufreq_out2, bufreq, sizeof(struct hal_buffer_requirements)); bufreq_out2->buffer_type = HAL_BUFFER_EXTRADATA_OUTPUT2; msm_comm_set_stream_output_mode(inst, HAL_VIDEO_DECODER_SECONDARY); break; default: dprintk(VIDC_ERR, Loading Loading @@ -1292,8 +1294,9 @@ int msm_vdec_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) if (!rc && property_id) { dprintk(VIDC_DBG, "Control: Name = %s, ID = 0x%x Value = %d\n", ctrl->name, ctrl->id, ctrl->val); "Control: %x : Name = %s, ID = 0x%x Value = %d\n", hash32_ptr(inst->session), ctrl->name, ctrl->id, ctrl->val); rc = call_hfi_op(hdev, session_set_property, (void *) inst->session, property_id, pdata); } Loading
drivers/media/platform/msm/vidc/msm_venc.c +3 −2 Original line number Diff line number Diff line Loading @@ -2136,8 +2136,9 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) if (!rc && property_id) { dprintk(VIDC_DBG, "Control: Name = %s, ID = 0x%x Value = %d\n", ctrl->name, ctrl->id, ctrl->val); "Control: %x : Name = %s, ID = 0x%x Value = %d\n", hash32_ptr(inst->session), ctrl->name, ctrl->id, ctrl->val); rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, property_id, pdata); } Loading
drivers/media/platform/msm/vidc/msm_vidc.c +4 −0 Original line number Diff line number Diff line Loading @@ -1631,6 +1631,8 @@ static int try_get_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) return -EINVAL; } ctrl->val = bufreq->buffer_count_min_host; dprintk(VIDC_DBG, "g_min: %x : hal_buffer %d min buffers %d\n", hash32_ptr(inst->session), buffer_type, ctrl->val); break; case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT: bufreq = get_buff_req_buffer(inst, HAL_BUFFER_INPUT); Loading @@ -1651,6 +1653,8 @@ static int try_get_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) MIN_NUM_OUTPUT_BUFFERS_VP9; ctrl->val = bufreq->buffer_count_min_host; dprintk(VIDC_DBG, "g_min: %x : hal_buffer %d min buffers %d\n", hash32_ptr(inst->session), HAL_BUFFER_INPUT, ctrl->val); break; case V4L2_CID_MPEG_VIDC_VIDEO_TME_PAYLOAD_VERSION: ctrl->val = inst->capability.tme_version; Loading
drivers/media/platform/msm/vidc/msm_vidc_common.c +105 −9 Original line number Diff line number Diff line Loading @@ -707,16 +707,46 @@ int msm_comm_ctrl_deinit(struct msm_vidc_inst *inst) return 0; } int msm_comm_set_stream_output_mode(struct msm_vidc_inst *inst, enum multi_stream mode) { if (!inst) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } if (!is_decode_session(inst)) { dprintk(VIDC_DBG, "%s: not a decode session %x\n", __func__, hash32_ptr(inst->session)); return -EINVAL; } if (mode == HAL_VIDEO_DECODER_SECONDARY) inst->stream_output_mode = HAL_VIDEO_DECODER_SECONDARY; else inst->stream_output_mode = HAL_VIDEO_DECODER_PRIMARY; return 0; } enum multi_stream msm_comm_get_stream_output_mode(struct msm_vidc_inst *inst) { switch (msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_MODE)) { case V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_SECONDARY: return HAL_VIDEO_DECODER_SECONDARY; case V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_PRIMARY: default: if (!inst) { dprintk(VIDC_ERR, "%s: invalid params, return default mode\n", __func__); return HAL_VIDEO_DECODER_PRIMARY; } if (!is_decode_session(inst)) { dprintk(VIDC_DBG, "%s: not a decode session %x\n", __func__, hash32_ptr(inst->session)); return HAL_VIDEO_DECODER_PRIMARY; } if (inst->stream_output_mode == HAL_VIDEO_DECODER_SECONDARY) return HAL_VIDEO_DECODER_SECONDARY; else return HAL_VIDEO_DECODER_PRIMARY; } static int msm_comm_get_mbs_per_sec(struct msm_vidc_inst *inst) Loading Loading @@ -1742,6 +1772,9 @@ static void handle_event_change(enum hal_command_response cmd, void *data) bufreq->buffer_count_min_host = bufreq->buffer_count_min + extra_buff_count; } dprintk(VIDC_DBG, "%s: buffer[%d] count: min %d min_host %d\n", __func__, bufreq->buffer_type, bufreq->buffer_count_min, bufreq->buffer_count_min_host); mutex_unlock(&inst->lock); Loading Loading @@ -3099,6 +3132,11 @@ static int msm_comm_init_buffer_count(struct msm_vidc_inst *inst) bufreq->buffer_count_min_host = bufreq->buffer_count_actual = bufreq->buffer_count_min + extra_buff_count; dprintk(VIDC_DBG, "%s: %x : input min %d min_host %d actual %d\n", __func__, hash32_ptr(inst->session), bufreq->buffer_count_min, bufreq->buffer_count_min_host, bufreq->buffer_count_actual); rc = msm_comm_set_buffer_count(inst, bufreq->buffer_count_min_host, bufreq->buffer_count_actual, HAL_BUFFER_INPUT); Loading Loading @@ -3128,6 +3166,11 @@ static int msm_comm_init_buffer_count(struct msm_vidc_inst *inst) bufreq->buffer_count_min_host = bufreq->buffer_count_actual = bufreq->buffer_count_min + extra_buff_count; dprintk(VIDC_DBG, "%s: %x : output min %d min_host %d actual %d\n", __func__, hash32_ptr(inst->session), bufreq->buffer_count_min, bufreq->buffer_count_min_host, bufreq->buffer_count_actual); rc = msm_comm_set_buffer_count(inst, bufreq->buffer_count_min_host, bufreq->buffer_count_actual, HAL_BUFFER_OUTPUT); Loading Loading @@ -3476,6 +3519,58 @@ static int get_flipped_state(int present_state, return flipped_state; } int msm_comm_reset_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer buf_type) { struct hal_buffer_requirements *bufreqs; if (!inst) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } bufreqs = get_buff_req_buffer(inst, buf_type); if (!bufreqs) { dprintk(VIDC_ERR, "%s: invalid buf type %d\n", __func__, buf_type); return -EINVAL; } bufreqs->buffer_size = bufreqs->buffer_region_size = bufreqs->buffer_count_min = bufreqs->buffer_count_min_host = bufreqs->buffer_count_actual = bufreqs->contiguous = bufreqs->buffer_alignment = 0; return 0; } int msm_comm_copy_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer src_type, enum hal_buffer dst_type) { struct hal_buffer_requirements *src_bufreqs; struct hal_buffer_requirements *dst_bufreqs; if (!inst) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } src_bufreqs = get_buff_req_buffer(inst, src_type); dst_bufreqs = get_buff_req_buffer(inst, dst_type); if (!src_bufreqs || !dst_bufreqs) { dprintk(VIDC_ERR, "%s: invalid buf type: src %d dst %d\n", __func__, src_type, dst_type); return -EINVAL; } dst_bufreqs->buffer_size = src_bufreqs->buffer_size; dst_bufreqs->buffer_region_size = src_bufreqs->buffer_region_size; dst_bufreqs->buffer_count_min = src_bufreqs->buffer_count_min; dst_bufreqs->buffer_count_min_host = src_bufreqs->buffer_count_min_host; dst_bufreqs->buffer_count_actual = src_bufreqs->buffer_count_actual; dst_bufreqs->contiguous = src_bufreqs->contiguous; dst_bufreqs->buffer_alignment = src_bufreqs->buffer_alignment; return 0; } struct hal_buffer_requirements *get_buff_req_buffer( struct msm_vidc_inst *inst, enum hal_buffer buffer_type) { Loading Loading @@ -4827,8 +4922,9 @@ int msm_comm_set_buffer_count(struct msm_vidc_inst *inst, buf_count.buffer_type = type; buf_count.buffer_count_actual = act_count; buf_count.buffer_count_min_host = host_count; dprintk(VIDC_DBG, "%s : Act count = %d Host count = %d\n", __func__, act_count, host_count); dprintk(VIDC_DBG, "%s: %x : hal_buffer %d min_host %d actual %d\n", __func__, hash32_ptr(inst->session), type, host_count, act_count); rc = call_hfi_op(hdev, session_set_property, inst->session, HAL_PARAM_BUFFER_COUNT_ACTUAL, &buf_count); if (rc) Loading
drivers/media/platform/msm/vidc/msm_vidc_common.h +16 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,16 @@ static inline bool is_encode_session(struct msm_vidc_inst *inst) return inst->session_type == MSM_VIDC_ENCODER; } static inline bool is_primary_output_mode(struct msm_vidc_inst *inst) { return inst->stream_output_mode == HAL_VIDEO_DECODER_PRIMARY; } static inline bool is_secondary_output_mode(struct msm_vidc_inst *inst) { return inst->stream_output_mode == HAL_VIDEO_DECODER_SECONDARY; } static inline int msm_comm_g_ctrl(struct msm_vidc_inst *inst, struct v4l2_control *ctrl) { Loading Loading @@ -128,6 +138,10 @@ int msm_comm_force_cleanup(struct msm_vidc_inst *inst); int msm_comm_suspend(int core_id); enum hal_extradata_id msm_comm_get_hal_extradata_index( enum v4l2_mpeg_vidc_extradata index); int msm_comm_reset_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer buf_type); int msm_comm_copy_bufreqs(struct msm_vidc_inst *inst, enum hal_buffer src_type, enum hal_buffer dst_type); struct hal_buffer_requirements *get_buff_req_buffer( struct msm_vidc_inst *inst, u32 buffer_type); #define IS_PRIV_CTRL(idx) (\ Loading @@ -138,6 +152,8 @@ int msm_comm_kill_session(struct msm_vidc_inst *inst); void msm_comm_generate_session_error(struct msm_vidc_inst *inst); void msm_comm_generate_sys_error(struct msm_vidc_inst *inst); enum multi_stream msm_comm_get_stream_output_mode(struct msm_vidc_inst *inst); int msm_comm_set_stream_output_mode(struct msm_vidc_inst *inst, enum multi_stream mode); enum hal_buffer msm_comm_get_hal_output_buffer(struct msm_vidc_inst *inst); int msm_comm_smem_alloc(struct msm_vidc_inst *inst, size_t size, u32 align, u32 flags, enum hal_buffer buffer_type, int map_kernel, Loading