Lines Matching refs:vdebayer
35 void (*set_rgb_src)(struct vimc_debayer_device *vdebayer,
156 struct vimc_debayer_device *vdebayer = v4l2_get_subdevdata(sd);
166 mf->code = vdebayer->src_code;
220 struct vimc_debayer_device *vdebayer = v4l2_get_subdevdata(sd);
225 vdebayer->sink_fmt;
229 fmt->format.code = vdebayer->src_code;
258 struct vimc_debayer_device *vdebayer = v4l2_get_subdevdata(sd);
264 if (vdebayer->src_frame)
267 sink_fmt = &vdebayer->sink_fmt;
268 src_code = &vdebayer->src_code;
291 dev_dbg(vdebayer->ved.dev, "%s: sink format update: "
293 "new:%dx%d (0x%x, %d, %d, %d, %d)\n", vdebayer->sd.name,
317 static void vimc_debayer_process_rgb_frame(struct vimc_debayer_device *vdebayer,
325 vpix = vimc_pix_map_by_code(vdebayer->src_code);
326 index = VIMC_FRAME_INDEX(lin, col, vdebayer->sink_fmt.width, 3);
330 vdebayer->src_frame[index + i] = rgb[i];
333 vdebayer->src_frame[index + i] = rgb[2 - i];
341 struct vimc_debayer_device *vdebayer = v4l2_get_subdevdata(sd);
347 if (vdebayer->src_frame)
351 vpix = vimc_pix_map_by_code(vdebayer->src_code);
352 frame_size = vdebayer->sink_fmt.width * vdebayer->sink_fmt.height *
356 vpix = vimc_pix_map_by_code(vdebayer->sink_fmt.code);
357 vdebayer->sink_bpp = vpix->bpp;
360 vdebayer->sink_pix_map =
361 vimc_debayer_pix_map_by_code(vdebayer->sink_fmt.code);
367 vdebayer->src_frame = vmalloc(frame_size);
368 if (!vdebayer->src_frame)
372 if (!vdebayer->src_frame)
375 vfree(vdebayer->src_frame);
376 vdebayer->src_frame = NULL;
410 static void vimc_debayer_calc_rgb_sink(struct vimc_debayer_device *vdebayer,
427 seek = vdebayer->mean_win_size / 2;
431 dev_dbg(vdebayer->ved.dev,
433 vdebayer->sd.name, lin, col, vdebayer->sink_fmt.height, seek);
442 wlin < lin + seek + 1 && wlin < vdebayer->sink_fmt.height;
452 wcol < col + seek + 1 && wcol < vdebayer->sink_fmt.width;
458 color = vdebayer->sink_pix_map->order[wlin % 2][wcol % 2];
461 vdebayer->sink_fmt.width,
462 vdebayer->sink_bpp);
464 dev_dbg(vdebayer->ved.dev,
466 vdebayer->sd.name, index, wlin, wcol, color);
471 vdebayer->sink_bpp);
476 dev_dbg(vdebayer->ved.dev, "deb: %s: RGB CALC: val %d, n %d\n",
477 vdebayer->sd.name, rgb[color], n_rgb[color]);
483 dev_dbg(vdebayer->ved.dev,
485 vdebayer->sd.name, lin, col, i, rgb[i], n_rgb[i]);
490 dev_dbg(vdebayer->ved.dev,
492 vdebayer->sd.name, lin, col, i, rgb[i]);
499 struct vimc_debayer_device *vdebayer =
506 if (!vdebayer->src_frame)
509 for (i = 0; i < vdebayer->sink_fmt.height; i++)
510 for (j = 0; j < vdebayer->sink_fmt.width; j++) {
511 vimc_debayer_calc_rgb_sink(vdebayer, sink_frame, i, j, rgb);
512 vdebayer->set_rgb_src(vdebayer, i, j, rgb);
515 return vdebayer->src_frame;
520 struct vimc_debayer_device *vdebayer =
525 vdebayer->mean_win_size = ctrl->val;
539 struct vimc_debayer_device *vdebayer =
542 v4l2_ctrl_handler_free(&vdebayer->hdl);
543 media_entity_cleanup(vdebayer->ved.ent);
544 kfree(vdebayer);
569 struct vimc_debayer_device *vdebayer;
572 /* Allocate the vdebayer struct */
573 vdebayer = kzalloc(sizeof(*vdebayer), GFP_KERNEL);
574 if (!vdebayer)
578 v4l2_ctrl_handler_init(&vdebayer->hdl, 2);
579 v4l2_ctrl_new_custom(&vdebayer->hdl, &vimc_debayer_ctrl_class, NULL);
580 v4l2_ctrl_new_custom(&vdebayer->hdl, &vimc_debayer_ctrl_mean_win_size, NULL);
581 vdebayer->sd.ctrl_handler = &vdebayer->hdl;
582 if (vdebayer->hdl.error) {
583 ret = vdebayer->hdl.error;
588 vdebayer->pads[0].flags = MEDIA_PAD_FL_SINK;
589 vdebayer->pads[1].flags = MEDIA_PAD_FL_SOURCE;
591 ret = vimc_ent_sd_register(&vdebayer->ved, &vdebayer->sd, v4l2_dev,
594 vdebayer->pads, &vimc_debayer_ops);
598 vdebayer->ved.process_frame = vimc_debayer_process_frame;
599 vdebayer->ved.dev = vimc->mdev.dev;
600 vdebayer->mean_win_size = vimc_debayer_ctrl_mean_win_size.def;
603 vdebayer->sink_fmt = sink_fmt_default;
610 vdebayer->src_code = MEDIA_BUS_FMT_RGB888_1X24;
611 vdebayer->set_rgb_src = vimc_debayer_process_rgb_frame;
613 return &vdebayer->ved;
616 v4l2_ctrl_handler_free(&vdebayer->hdl);
618 kfree(vdebayer);