Message ID | 20190424135642.31973-14-andrealmeid@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: vimc: Add support for multiplanar formats | expand |
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@collabora.com> > --- > 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; > } >
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; + + 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; }
Adapt vimc-capture to support multiplanar formats, copying each plane to the correct buffer. Signed-off-by: André Almeida <andrealmeid@collabora.com> --- 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(-)