Lines Matching defs:vscaler

136 vimc_scaler_pad_format(struct vimc_scaler_device *vscaler,
141 return v4l2_subdev_get_try_format(&vscaler->sd, sd_state, pad);
143 return &vscaler->fmt[pad];
147 vimc_scaler_pad_crop(struct vimc_scaler_device *vscaler,
152 return v4l2_subdev_get_try_crop(&vscaler->sd, sd_state,
155 return &vscaler->crop_rect;
162 struct vimc_scaler_device *vscaler = v4l2_get_subdevdata(sd);
164 format->format = *vimc_scaler_pad_format(vscaler, sd_state, format->pad,
173 struct vimc_scaler_device *vscaler = v4l2_get_subdevdata(sd);
177 if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE && vscaler->src_frame)
180 fmt = vimc_scaler_pad_format(vscaler, sd_state, format->pad, format->which);
218 crop = vimc_scaler_pad_crop(vscaler, sd_state, format->which);
224 src_fmt = vimc_scaler_pad_format(vscaler, sd_state, VIMC_SCALER_SRC,
238 struct vimc_scaler_device *vscaler = v4l2_get_subdevdata(sd);
246 sel->r = *vimc_scaler_pad_crop(vscaler, sd_state, sel->which);
249 sink_fmt = vimc_scaler_pad_format(vscaler, sd_state, VIMC_SCALER_SINK,
275 struct vimc_scaler_device *vscaler = v4l2_get_subdevdata(sd);
283 if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE && vscaler->src_frame)
286 crop_rect = vimc_scaler_pad_crop(vscaler, sd_state, sel->which);
287 sink_fmt = vimc_scaler_pad_format(vscaler, sd_state, VIMC_SCALER_SINK,
307 struct vimc_scaler_device *vscaler = v4l2_get_subdevdata(sd);
313 if (vscaler->src_frame)
317 vpix = vimc_pix_map_by_code(vscaler->fmt[VIMC_SCALER_SINK].code);
318 vscaler->bpp = vpix->bpp;
321 frame_size = vscaler->fmt[VIMC_SCALER_SRC].width
322 * vscaler->fmt[VIMC_SCALER_SRC].height * vscaler->bpp;
327 vscaler->src_frame = vmalloc(frame_size);
328 if (!vscaler->src_frame)
332 if (!vscaler->src_frame)
335 vfree(vscaler->src_frame);
336 vscaler->src_frame = NULL;
351 static void vimc_scaler_fill_src_frame(const struct vimc_scaler_device *const vscaler,
354 const struct v4l2_mbus_framefmt *src_fmt = &vscaler->fmt[VIMC_SCALER_SRC];
355 const struct v4l2_rect *r = &vscaler->crop_rect;
356 unsigned int snk_width = vscaler->fmt[VIMC_SCALER_SINK].width;
358 u8 *walker = vscaler->src_frame;
365 y_offset = snk_y * snk_width * vscaler->bpp;
371 x_offset = snk_x * vscaler->bpp;
373 memcpy(walker, &sink_frame[index], vscaler->bpp);
374 walker += vscaler->bpp;
382 struct vimc_scaler_device *vscaler = container_of(ved, struct vimc_scaler_device,
386 if (!vscaler->src_frame)
389 vimc_scaler_fill_src_frame(vscaler, sink_frame);
391 return vscaler->src_frame;
396 struct vimc_scaler_device *vscaler =
399 media_entity_cleanup(vscaler->ved.ent);
400 kfree(vscaler);
407 struct vimc_scaler_device *vscaler;
410 /* Allocate the vscaler struct */
411 vscaler = kzalloc(sizeof(*vscaler), GFP_KERNEL);
412 if (!vscaler)
416 vscaler->pads[VIMC_SCALER_SINK].flags = MEDIA_PAD_FL_SINK;
417 vscaler->pads[VIMC_SCALER_SRC].flags = MEDIA_PAD_FL_SOURCE;
419 ret = vimc_ent_sd_register(&vscaler->ved, &vscaler->sd, v4l2_dev,
422 vscaler->pads, &vimc_scaler_ops);
424 kfree(vscaler);
428 vscaler->ved.process_frame = vimc_scaler_process_frame;
429 vscaler->ved.dev = vimc->mdev.dev;
432 vscaler->fmt[VIMC_SCALER_SINK] = fmt_default;
433 vscaler->fmt[VIMC_SCALER_SRC] = fmt_default;
436 vscaler->crop_rect = crop_rect_default;
438 return &vscaler->ved;