aboutsummaryrefslogtreecommitdiffstats
path: root/testing/linux-amlogic/0037-meson-vdec-introduce-controls-and-V4L2_CID_MIN_BUFFE.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/linux-amlogic/0037-meson-vdec-introduce-controls-and-V4L2_CID_MIN_BUFFE.patch')
-rw-r--r--testing/linux-amlogic/0037-meson-vdec-introduce-controls-and-V4L2_CID_MIN_BUFFE.patch153
1 files changed, 153 insertions, 0 deletions
diff --git a/testing/linux-amlogic/0037-meson-vdec-introduce-controls-and-V4L2_CID_MIN_BUFFE.patch b/testing/linux-amlogic/0037-meson-vdec-introduce-controls-and-V4L2_CID_MIN_BUFFE.patch
new file mode 100644
index 0000000000..3c120117b1
--- /dev/null
+++ b/testing/linux-amlogic/0037-meson-vdec-introduce-controls-and-V4L2_CID_MIN_BUFFE.patch
@@ -0,0 +1,153 @@
+From e36802c6297adb0c560f3a6c1672546eb380c458 Mon Sep 17 00:00:00 2001
+From: Maxime Jourdan <mjourdan@baylibre.com>
+Date: Wed, 10 Oct 2018 17:22:27 +0200
+Subject: [PATCH] meson: vdec: introduce controls and
+ V4L2_CID_MIN_BUFFERS_FOR_CAPTURE
+
+---
+ drivers/media/platform/meson/vdec/Makefile | 2 +-
+ drivers/media/platform/meson/vdec/vdec.c | 7 ++++
+ drivers/media/platform/meson/vdec/vdec.h | 2 ++
+ drivers/media/platform/meson/vdec/vdec_ctrls.c | 45 ++++++++++++++++++++++++++
+ drivers/media/platform/meson/vdec/vdec_ctrls.h | 8 +++++
+ 5 files changed, 63 insertions(+), 1 deletion(-)
+ create mode 100644 drivers/media/platform/meson/vdec/vdec_ctrls.c
+ create mode 100644 drivers/media/platform/meson/vdec/vdec_ctrls.h
+
+diff --git a/drivers/media/platform/meson/vdec/Makefile b/drivers/media/platform/meson/vdec/Makefile
+index 6bea129..eba8608 100644
+--- a/drivers/media/platform/meson/vdec/Makefile
++++ b/drivers/media/platform/meson/vdec/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ # Makefile for Amlogic meson video decoder driver
+
+-meson-vdec-objs = esparser.o vdec.o vdec_helpers.o vdec_platform.o
++meson-vdec-objs = esparser.o vdec.o vdec_ctrls.o vdec_helpers.o vdec_platform.o
+ meson-vdec-objs += vdec_1.o
+ meson-vdec-objs += codec_mpeg12.o
+
+diff --git a/drivers/media/platform/meson/vdec/vdec.c b/drivers/media/platform/meson/vdec/vdec.c
+index d8db52c..1c5d3e9 100644
+--- a/drivers/media/platform/meson/vdec/vdec.c
++++ b/drivers/media/platform/meson/vdec/vdec.c
+@@ -21,6 +21,7 @@
+ #include "vdec.h"
+ #include "esparser.h"
+ #include "vdec_helpers.h"
++#include "vdec_ctrls.h"
+
+ struct dummy_buf {
+ struct vb2_v4l2_buffer vb;
+@@ -290,6 +291,7 @@ static int vdec_start_streaming(struct vb2_queue *q, unsigned int count)
+ sess->keyframe_found = 0;
+ sess->last_offset = 0;
+ sess->wrap_count = 0;
++ sess->dpb_size = 0;
+ sess->pixelaspect.numerator = 1;
+ sess->pixelaspect.denominator = 1;
+ atomic_set(&sess->esparser_queued_bufs, 0);
+@@ -812,6 +814,10 @@ static int vdec_open(struct file *file)
+ goto err_m2m_release;
+ }
+
++ ret = amvdec_init_ctrls(&sess->ctrl_handler);
++ if (ret)
++ goto err_m2m_release;
++
+ sess->pixfmt_cap = formats[0].pixfmts_cap[0];
+ sess->fmt_out = &formats[0];
+ sess->width = 1280;
+@@ -827,6 +833,7 @@ static int vdec_open(struct file *file)
+ spin_lock_init(&sess->ts_spinlock);
+
+ v4l2_fh_init(&sess->fh, core->vdev_dec);
++ sess->fh.ctrl_handler = &sess->ctrl_handler;
+ v4l2_fh_add(&sess->fh);
+ sess->fh.m2m_ctx = sess->m2m_ctx;
+ file->private_data = &sess->fh;
+diff --git a/drivers/media/platform/meson/vdec/vdec.h b/drivers/media/platform/meson/vdec/vdec.h
+index 4e8c3f1..6be7de2 100644
+--- a/drivers/media/platform/meson/vdec/vdec.h
++++ b/drivers/media/platform/meson/vdec/vdec.h
+@@ -203,6 +203,7 @@ struct amvdec_session {
+ struct v4l2_fh fh;
+ struct v4l2_m2m_dev *m2m_dev;
+ struct v4l2_m2m_ctx *m2m_ctx;
++ struct v4l2_ctrl_handler ctrl_handler;
+ struct mutex lock;
+
+ const struct amvdec_format *fmt_out;
+@@ -242,6 +243,7 @@ struct amvdec_session {
+ u64 last_irq_jiffies;
+ u32 last_offset;
+ u32 wrap_count;
++ u32 dpb_size;
+
+ void *priv;
+ };
+diff --git a/drivers/media/platform/meson/vdec/vdec_ctrls.c b/drivers/media/platform/meson/vdec/vdec_ctrls.c
+new file mode 100644
+index 0000000..cd6dd6d
+--- /dev/null
++++ b/drivers/media/platform/meson/vdec/vdec_ctrls.c
+@@ -0,0 +1,45 @@
++#include "vdec_ctrls.h"
++
++static int vdec_op_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
++{
++ struct amvdec_session *sess =
++ container_of(ctrl->handler, struct amvdec_session, ctrl_handler);
++
++ switch (ctrl->id) {
++ case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
++ ctrl->val = sess->dpb_size;
++ break;
++ default:
++ return -EINVAL;
++ };
++
++ return 0;
++}
++
++static const struct v4l2_ctrl_ops vdec_ctrl_ops = {
++ .g_volatile_ctrl = vdec_op_g_volatile_ctrl,
++};
++
++int amvdec_init_ctrls(struct v4l2_ctrl_handler *ctrl_handler)
++{
++ int ret;
++ struct v4l2_ctrl *ctrl;
++
++ ret = v4l2_ctrl_handler_init(ctrl_handler, 1);
++ if (ret)
++ return ret;
++
++ ctrl = v4l2_ctrl_new_std(ctrl_handler, &vdec_ctrl_ops,
++ V4L2_CID_MIN_BUFFERS_FOR_CAPTURE, 1, 32, 1, 1);
++ if (ctrl)
++ ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
++
++ ret = ctrl_handler->error;
++ if (ret) {
++ v4l2_ctrl_handler_free(ctrl_handler);
++ return ret;
++ }
++
++ return 0;
++}
++EXPORT_SYMBOL_GPL(amvdec_init_ctrls);
+diff --git a/drivers/media/platform/meson/vdec/vdec_ctrls.h b/drivers/media/platform/meson/vdec/vdec_ctrls.h
+new file mode 100644
+index 0000000..4bcc5e6
+--- /dev/null
++++ b/drivers/media/platform/meson/vdec/vdec_ctrls.h
+@@ -0,0 +1,8 @@
++#ifndef __MESON_VDEC_CTRLS_H_
++#define __MESON_VDEC_CTRLS_H_
++
++#include "vdec.h"
++
++int amvdec_init_ctrls(struct v4l2_ctrl_handler *ctrl_handler);
++
++#endif