|
@@ -2508,100 +2508,6 @@ int msm_vdec_g_selection(struct msm_vidc_inst* inst, struct v4l2_selection* s)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-int msm_vdec_s_param(struct msm_vidc_inst *inst,
|
|
|
|
- struct v4l2_streamparm *s_parm)
|
|
|
|
-{
|
|
|
|
- int rc = 0;
|
|
|
|
- struct msm_vidc_inst_capability *capability = NULL;
|
|
|
|
- struct v4l2_fract *timeperframe = NULL;
|
|
|
|
- u32 q16_rate, max_rate, default_rate;
|
|
|
|
- u64 us_per_frame = 0, input_rate = 0;
|
|
|
|
- bool is_frame_rate = false;
|
|
|
|
-
|
|
|
|
- if (!inst || !s_parm) {
|
|
|
|
- d_vpr_e("%s: invalid params\n", __func__);
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
- capability = inst->capabilities;
|
|
|
|
-
|
|
|
|
- if (s_parm->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
|
|
|
|
- timeperframe = &s_parm->parm.output.timeperframe;
|
|
|
|
- max_rate = capability->cap[FRAME_RATE].max >> 16;
|
|
|
|
- default_rate = capability->cap[FRAME_RATE].value >> 16;
|
|
|
|
- is_frame_rate = true;
|
|
|
|
- } else {
|
|
|
|
- timeperframe = &s_parm->parm.capture.timeperframe;
|
|
|
|
- max_rate = capability->cap[OPERATING_RATE].max >> 16;
|
|
|
|
- default_rate = capability->cap[OPERATING_RATE].value >> 16;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!timeperframe->denominator || !timeperframe->numerator) {
|
|
|
|
- i_vpr_e(inst, "%s: type %s, invalid rate\n", __func__,
|
|
|
|
- v4l2_type_name(s_parm->type));
|
|
|
|
- input_rate = default_rate;
|
|
|
|
- goto set_default;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- us_per_frame = timeperframe->numerator * (u64)USEC_PER_SEC;
|
|
|
|
- do_div(us_per_frame, timeperframe->denominator);
|
|
|
|
-
|
|
|
|
- if (!us_per_frame) {
|
|
|
|
- i_vpr_e(inst, "%s: us_per_frame is zero\n", __func__);
|
|
|
|
- rc = -EINVAL;
|
|
|
|
- goto exit;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- input_rate = (u64)USEC_PER_SEC;
|
|
|
|
- do_div(input_rate, us_per_frame);
|
|
|
|
-
|
|
|
|
-set_default:
|
|
|
|
- i_vpr_h(inst, "%s: type %s, %s value %llu\n",
|
|
|
|
- __func__, v4l2_type_name(s_parm->type),
|
|
|
|
- is_frame_rate ? "frame rate" : "operating rate", input_rate);
|
|
|
|
-
|
|
|
|
- q16_rate = (u32)input_rate << 16;
|
|
|
|
- msm_vidc_update_cap_value(inst, is_frame_rate ? FRAME_RATE : OPERATING_RATE,
|
|
|
|
- q16_rate, __func__);
|
|
|
|
-
|
|
|
|
- if (is_frame_rate)
|
|
|
|
- capability->cap[FRAME_RATE].flags |= CAP_FLAG_CLIENT_SET;
|
|
|
|
- else
|
|
|
|
- capability->cap[OPERATING_RATE].flags |= CAP_FLAG_CLIENT_SET;
|
|
|
|
-
|
|
|
|
-exit:
|
|
|
|
- return rc;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int msm_vdec_g_param(struct msm_vidc_inst *inst,
|
|
|
|
- struct v4l2_streamparm *s_parm)
|
|
|
|
-{
|
|
|
|
- struct msm_vidc_inst_capability *capability = NULL;
|
|
|
|
- struct v4l2_fract *timeperframe = NULL;
|
|
|
|
-
|
|
|
|
- if (!inst || !s_parm) {
|
|
|
|
- d_vpr_e("%s: invalid params\n", __func__);
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
- capability = inst->capabilities;
|
|
|
|
-
|
|
|
|
- if (s_parm->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
|
|
|
|
- timeperframe = &s_parm->parm.output.timeperframe;
|
|
|
|
- timeperframe->numerator = 1;
|
|
|
|
- timeperframe->denominator =
|
|
|
|
- capability->cap[FRAME_RATE].value >> 16;
|
|
|
|
- } else {
|
|
|
|
- timeperframe = &s_parm->parm.capture.timeperframe;
|
|
|
|
- timeperframe->numerator = 1;
|
|
|
|
- timeperframe->denominator =
|
|
|
|
- capability->cap[OPERATING_RATE].value >> 16;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- i_vpr_h(inst, "%s: type %u, num %u denom %u\n",
|
|
|
|
- __func__, s_parm->type, timeperframe->numerator,
|
|
|
|
- timeperframe->denominator);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
int msm_vdec_subscribe_event(struct msm_vidc_inst *inst,
|
|
int msm_vdec_subscribe_event(struct msm_vidc_inst *inst,
|
|
const struct v4l2_event_subscription *sub)
|
|
const struct v4l2_event_subscription *sub)
|
|
{
|
|
{
|