.. | .. |
---|
57 | 57 | |
---|
58 | 58 | static void rpf_configure_stream(struct vsp1_entity *entity, |
---|
59 | 59 | struct vsp1_pipeline *pipe, |
---|
| 60 | + struct vsp1_dl_list *dl, |
---|
60 | 61 | struct vsp1_dl_body *dlb) |
---|
61 | 62 | { |
---|
62 | 63 | struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev); |
---|
.. | .. |
---|
108 | 109 | vsp1_rpf_write(rpf, dlb, VI6_RPF_INFMT, infmt); |
---|
109 | 110 | vsp1_rpf_write(rpf, dlb, VI6_RPF_DSWAP, fmtinfo->swap); |
---|
110 | 111 | |
---|
111 | | - /* Output location */ |
---|
| 112 | + /* Output location. */ |
---|
112 | 113 | if (pipe->brx) { |
---|
113 | 114 | const struct v4l2_rect *compose; |
---|
114 | 115 | |
---|
.. | .. |
---|
290 | 291 | + crop.left * fmtinfo->bpp[0] / 8; |
---|
291 | 292 | |
---|
292 | 293 | if (format->num_planes > 1) { |
---|
| 294 | + unsigned int bpl = format->plane_fmt[1].bytesperline; |
---|
293 | 295 | unsigned int offset; |
---|
294 | 296 | |
---|
295 | | - offset = crop.top * format->plane_fmt[1].bytesperline |
---|
296 | | - + crop.left / fmtinfo->hsub |
---|
297 | | - * fmtinfo->bpp[1] / 8; |
---|
| 297 | + offset = crop.top / fmtinfo->vsub * bpl |
---|
| 298 | + + crop.left / fmtinfo->hsub * fmtinfo->bpp[1] / 8; |
---|
298 | 299 | mem.addr[1] += offset; |
---|
299 | 300 | mem.addr[2] += offset; |
---|
300 | 301 | } |
---|
.. | .. |
---|
309 | 310 | |
---|
310 | 311 | /* |
---|
311 | 312 | * Interlaced pipelines will use the extended pre-cmd to process |
---|
312 | | - * SRCM_ADDR_{Y,C0,C1} |
---|
| 313 | + * SRCM_ADDR_{Y,C0,C1}. |
---|
313 | 314 | */ |
---|
314 | 315 | if (pipe->interlaced) { |
---|
315 | 316 | vsp1_rpf_configure_autofld(rpf, dl); |
---|