From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: karthik poduval <karthik.poduval@gmail.com>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>,
Hans Verkuil <hverkuil@xs4all.nl>,
Linux Media Mailing List <linux-media@vger.kernel.org>,
Mauro Carvalho Chehab <mchehab@infradead.org>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Aviv Greenberg <avivgr@gmail.com>
Subject: Re: per-frame camera metadata (again)
Date: Thu, 24 Dec 2015 12:54:51 +0200 [thread overview]
Message-ID: <3419549.kxZAihUTho@avalon> (raw)
In-Reply-To: <CAFP0Ok9t53p6zAJBBu=ov7O8nfrwvn=RxJUCkOPgFmJ3xuzbEQ@mail.gmail.com>
Hello Karthik,
On Tuesday 22 December 2015 05:30:52 karthik poduval wrote:
> I have been wanting to share these thoughts for the group but was
> waiting for the right time which I think is now since Guennadi brought
> up this discussion.
>
> For the Amazon Fire phone 4 corner camera, here is how we passed
> metadata from driver to application (which was a CV client requiring
> per frame metadata).
>
> We took an unused field in struct v4l2_buffer (__u32 reserved in this
> case) and used it to pass in a pointer to a user space metadata object
> (i.e. struct app_metadata) to the driver via the VIDIOC_DQBUF ioctl
> call.
>
> struct v4l2_buffer for reference.
> http://lxr.free-electrons.com/source/include/uapi/linux/videodev2.h#L836
>
> The driver copied its local copy of the metadata object to the
> userspace metadata object using the copy_to_user primitive offered by
> the kernel.
>
> Here is how we handled the metadata in the driver code.
> https://github.com/Fire-Phone/android_kernel_amazon_kodiak/blob/master/drive
> rs/media/platform/msm/camera_v2/camera/camera.c#L235
>
> This was done before HAL V3 was available. With HAL V3, the metadata
> object can be the HAL v3 metadata buffer. Non Android devices can use
> custom metadata format (like the one we used).
>
> With this approach, the metadata always accompanies the frame data as
> it's available along with the frame buffer inside struct v4l2_buffer
> from the VIDIOC_DQBUF ioctl call.
>
> If the community likes this idea, the v4l2_buffer can now be
> officially modified to contain a pointer to user space metadata object
> v4l2_buffer.metadata and then metadata format and size can be agreed
> upon between application and driver.
> Thoughts ?
I see several issues with that approach. The first one is that the meta-data
buffer is only passed at DQBUF time. Drivers thus need to copy data using the
CPU instead of capturing meta-data directly to the buffer through DMA. If the
meta-data size is small the performance impact can be negligible, but that
might not be true in the general case.
A second issue is that the approach isn't generic enough in my opinion. If we
want to attach additional data buffers to a v4l2_buffer I agree with Sakari
that we should design a multi-part buffer API in order to not limit the
implementation to meta-data, but support other kind of information such as
statistics for instance.
Finally, it might be beneficial in some use cases to pass meta-data to
userspace before the end of the frame (assuming meta-data is available earlier
of course). That's certainly true for statistics, use cases for meta-data are
less clear to me though.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-12-24 10:54 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-16 9:37 per-frame camera metadata (again) Guennadi Liakhovetski
2015-12-16 10:02 ` Hans Verkuil
2015-12-16 11:25 ` Guennadi Liakhovetski
2015-12-21 3:41 ` Laurent Pinchart
2015-12-22 11:16 ` Guennadi Liakhovetski
2015-12-22 13:30 ` karthik poduval
2015-12-24 10:54 ` Laurent Pinchart [this message]
2015-12-23 17:40 ` Laurent Pinchart
2015-12-24 10:42 ` Guennadi Liakhovetski
2015-12-26 23:47 ` Laurent Pinchart
2016-01-01 15:43 ` Guennadi Liakhovetski
2016-01-05 11:31 ` Guennadi Liakhovetski
2016-01-25 11:14 ` Guennadi Liakhovetski
2016-01-25 19:53 ` Laurent Pinchart
2016-01-26 12:49 ` Guennadi Liakhovetski
2016-01-29 10:08 ` Guennadi Liakhovetski
2015-12-19 0:06 ` Sakari Ailus
2015-12-23 9:47 ` Guennadi Liakhovetski
2015-12-24 10:46 ` Laurent Pinchart
2015-12-24 11:17 ` hverkuil
2015-12-24 11:29 ` Laurent Pinchart
2015-12-24 12:54 ` hverkuil
2015-12-24 17:33 ` Laurent Pinchart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3419549.kxZAihUTho@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=avivgr@gmail.com \
--cc=g.liakhovetski@gmx.de \
--cc=hverkuil@xs4all.nl \
--cc=karthik.poduval@gmail.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.