Hi André, On 4/24/19 10:56 AM, André Almeida wrote: > Adapt vimc-capture to support multiplanar formats, copying > each plane to the correct buffer. > > Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxxxxx> > --- > Change in v3: > - Adapt to new vimc_frame > > Change in v2: none > > drivers/media/platform/vimc/vimc-capture.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/platform/vimc/vimc-capture.c b/drivers/media/platform/vimc/vimc-capture.c > index d5b72c858af7..2592ea982ff8 100644 > --- a/drivers/media/platform/vimc/vimc-capture.c > +++ b/drivers/media/platform/vimc/vimc-capture.c > @@ -485,6 +485,8 @@ static struct vimc_frame *vimc_cap_process_frame(struct vimc_ent_device *ved, > struct vimc_cap_device *vcap = container_of(ved, struct vimc_cap_device, > ved); > struct vimc_cap_buffer *vimc_buf; > + unsigned long plane_size; > + unsigned int i; > void *vbuf; > > spin_lock(&vcap->qlock); > @@ -507,13 +509,17 @@ static struct vimc_frame *vimc_cap_process_frame(struct vimc_ent_device *ved, > vimc_buf->vb2.sequence = vcap->sequence++; > vimc_buf->vb2.field = vcap->format.fmt.pix.field; > > - vbuf = vb2_plane_vaddr(&vimc_buf->vb2.vb2_buf, 0); > + /* For each plane, copy the pixels */ > + for (i = 0; i < vimc_buf->vb2.vb2_buf.num_planes; i++) { > + vbuf = vb2_plane_vaddr(&vimc_buf->vb2.vb2_buf, i); > + plane_size = frame->fmt.plane_fmt[i].sizeimage; I think you should keep the same type, frame->fmt.plane_fmt[i].sizeimage is __u32. Helen > + > + memcpy(vbuf, frame->plane_addr[i], plane_size);> > - memcpy(vbuf, frame->plane_addr[0], vcap->format.fmt.pix.sizeimage); > + /* Set it as ready */ > + vb2_set_plane_payload(&vimc_buf->vb2.vb2_buf, i, plane_size); > + } > > - /* Set it as ready */ > - vb2_set_plane_payload(&vimc_buf->vb2.vb2_buf, 0, > - vcap->format.fmt.pix.sizeimage); > vb2_buffer_done(&vimc_buf->vb2.vb2_buf, VB2_BUF_STATE_DONE); > return NULL; > } >