static int mxc_vidioc_s_crop(struct file *file, void *fh,
const struct v4l2_crop *crop)
{
- struct mxc_vout_output *vout = fh, pre_vout;
+ struct mxc_vout_output *vout = fh, *pre_vout;
struct v4l2_rect *b = &vout->crop_bounds;
struct v4l2_crop fix_up_crop;
int ret = 0;
return 0;
}
+ pre_vout = vmalloc(sizeof(*pre_vout));
+ if (!pre_vout)
+ return -ENOMEM;
+
/* wait current work finish */
if (vout->vbq.streaming)
flush_workqueue(vout->v4l_wq);
mutex_lock(&vout->task_lock);
- memcpy(&pre_vout, vout, sizeof(*vout));
+ memcpy(pre_vout, vout, sizeof(*vout));
if (vout->disp_support_windows) {
vout->task.output.crop.pos.x = 0;
goto done;
}
- if (mxc_vout_need_fb_reconfig(vout, &pre_vout)) {
+ if (mxc_vout_need_fb_reconfig(vout, pre_vout)) {
ret = config_disp_output(vout);
if (ret < 0)
v4l2_err(vout->vfd->v4l2_dev,
}
done:
+ vfree(pre_vout);
mutex_unlock(&vout->task_lock);
return ret;
struct v4l2_control *ctrl)
{
int ret = 0;
- struct mxc_vout_output *vout = fh, pre_vout;
+ struct mxc_vout_output *vout = fh, *pre_vout;
+
+ pre_vout = vmalloc(sizeof(*pre_vout));
+ if (!pre_vout)
+ return -ENOMEM;
/* wait current work finish */
if (vout->vbq.streaming)
mutex_lock(&vout->task_lock);
- memcpy(&pre_vout, vout, sizeof(*vout));
+ memcpy(pre_vout, vout, sizeof(*vout));
switch (ctrl->id) {
case V4L2_CID_ROTATE:
goto done;
}
- if (mxc_vout_need_fb_reconfig(vout, &pre_vout)) {
+ if (mxc_vout_need_fb_reconfig(vout, pre_vout)) {
ret = config_disp_output(vout);
if (ret < 0)
v4l2_err(vout->vfd->v4l2_dev,
}
done:
+ vfree(pre_vout);
mutex_unlock(&vout->task_lock);
return ret;