media: mediatek/vcodec: Enable incoherent buffer allocation
Set allow_cache_hints to 1 for the vb2_queue source and destination queues in the mediatek vcodec V4L2 driver. This allows us to allocate buffers with the V4L2_MEMORY_FLAG_NON_COHERENT set. On Mediatek SoCs, this enables caching for this memory, which vastly improves performance when being read from CPU. Read performance for these buffers is in turn important for detiling MM21 video frames in userspace software, such as libyuv or gstreamer. This change should be safe from race conditions since videobuf2 already invalidates or flushes the appropriate cache lines in its prepare() and finish() methods. Tested on a MT8183 SoC. Resulted in both correct detiling and a 10X speedup. Signed-off-by: Justin Green <greenjustin@chromium.org> Suggested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
54b4d1911e
commit
377301bfb6
@ -979,6 +979,7 @@ int mtk_vcodec_dec_queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
src_vq->lock = &ctx->dev->dev_mutex;
|
||||
src_vq->dev = &ctx->dev->plat_dev->dev;
|
||||
src_vq->allow_cache_hints = 1;
|
||||
|
||||
ret = vb2_queue_init(src_vq);
|
||||
if (ret) {
|
||||
@ -994,6 +995,7 @@ int mtk_vcodec_dec_queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
dst_vq->lock = &ctx->dev->dev_mutex;
|
||||
dst_vq->dev = &ctx->dev->plat_dev->dev;
|
||||
dst_vq->allow_cache_hints = 1;
|
||||
|
||||
ret = vb2_queue_init(dst_vq);
|
||||
if (ret)
|
||||
|
Loading…
x
Reference in New Issue
Block a user