From: Hans Verkuil <hverkuil@xs4all.nl>
To: Archit Taneja <archit@ti.com>
Cc: linux-media@vger.kernel.org, linux-omap@vger.kernel.org,
dagriego@biglakesoftware.com, dale@farnsworth.org,
pawel@osciak.com, m.szyprowski@samsung.com,
laurent.pinchart@ideasonboard.com, tomi.valkeinen@ti.com
Subject: Re: [PATCH 4/6] v4l: ti-vpe: Add de-interlacer support in VPE
Date: Fri, 02 Aug 2013 16:40:23 +0200 [thread overview]
Message-ID: <51FBC4D7.2010802@xs4all.nl> (raw)
In-Reply-To: <1375452223-30524-5-git-send-email-archit@ti.com>
More comments...
On 08/02/2013 04:03 PM, Archit Taneja wrote:
> Add support for the de-interlacer block in VPE.
>
> For de-interlacer to work, we need to enable 2 more sets of VPE input ports
> which fetch data from the 'last' and 'last to last' fields of the interlaced
> video. Apart from that, we need to enable the Motion vector output and input
> ports, and also allocate DMA buffers for them.
>
> We need to make sure that two most recent fields in the source queue are
> available and in the 'READY' state. Once a mem2mem context gets access to the
> VPE HW(in device_run), it extracts the addresses of the 3 buffers, and provides
> it to the data descriptors for the 3 sets of input ports((LUMA1, CHROMA1),
> (LUMA2, CHROMA2), and (LUMA3, CHROMA3)) respectively for the 3 consecutive
> fields. The motion vector and output port descriptors are configured and the
> list is submitted to VPDMA.
>
> Once the transaction is done, the v4l2 buffer corresponding to the oldest
> field(the 3rd one) is changed to the state 'DONE', and the buffers corresponding
> to 1st and 2nd fields become the 2nd and 3rd field for the next de-interlace
> operation. This way, for each deinterlace operation, we have the 3 most recent
> fields. After each transaction, we also swap the motion vector buffers, the new
> input motion vector buffer contains the resultant motion information of all the
> previous frames, and the new output motion vector buffer will be used to hold
> the updated motion vector to capture the motion changes in the next field.
>
> The de-interlacer is removed from bypass mode, it requires some extra default
> configurations which are now added. The chrominance upsampler coefficients are
> added for interlaced frames. Some VPDMA parameters like frame start event and
> line mode are configured for the 2 extra sets of input ports.
>
> Signed-off-by: Archit Taneja <archit@ti.com>
> ---
> drivers/media/platform/ti-vpe/vpe.c | 372 ++++++++++++++++++++++++++++++++----
> 1 file changed, 337 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform/ti-vpe/vpe.c
> index 14a292b..5b1410c 100644
> --- a/drivers/media/platform/ti-vpe/vpe.c
> +++ b/drivers/media/platform/ti-vpe/vpe.c
...
> @@ -1035,7 +1310,8 @@ static int __vpe_try_fmt(struct vpe_ctx *ctx, struct v4l2_format *f,
>
> if (pix->field == V4L2_FIELD_ANY)
> pix->field = V4L2_FIELD_NONE;
> - else if (V4L2_FIELD_NONE != pix->field)
> + else if (V4L2_FIELD_NONE != pix->field &&
> + V4L2_FIELD_ALTERNATE != pix->field)
> return -EINVAL;
As mentioned before, this shouldn't result in an error, but map to a valid
field format.
For a deinterlacer I would expect NONE for the output of the deinterlacer (or
capture buffer type) and ALTERNATE for the input of the deinterlacer (or output
buffer type).
>
> v4l_bound_align_image(&pix->width, MIN_W, MAX_W, W_ALIGN,
> @@ -1104,6 +1380,7 @@ static int __vpe_s_fmt(struct vpe_ctx *ctx, struct v4l2_format *f)
> q_data->width = pix->width;
> q_data->height = pix->height;
> q_data->colorspace = pix->colorspace;
> + q_data->field = pix->field;
>
> for (i = 0; i < pix->num_planes; i++) {
> plane_fmt = &pix->plane_fmt[i];
> @@ -1117,6 +1394,11 @@ static int __vpe_s_fmt(struct vpe_ctx *ctx, struct v4l2_format *f)
> q_data->c_rect.width = q_data->width;
> q_data->c_rect.height = q_data->height;
>
> + if (q_data->field == V4L2_FIELD_ALTERNATE)
> + q_data->flags |= Q_DATA_INTERLACED;
> + else
> + q_data->flags &= ~Q_DATA_INTERLACED;
> +
> vpe_dbg(ctx->dev, "Setting format for type %d, wxh: %dx%d, fmt: %d bpl_y %d",
> f->type, q_data->width, q_data->height, q_data->fmt->fourcc,
> q_data->bytesperline[VPE_LUMA]);
> @@ -1194,6 +1476,22 @@ static int vpe_streamoff(struct file *file, void *priv, enum v4l2_buf_type type)
> return v4l2_m2m_streamoff(file, ctx->m2m_ctx, type);
> }
>
> +static void set_dei_shadow_registers(struct vpe_ctx *ctx)
> +{
> + struct vpe_mmr_adb *mmr_adb = ctx->mmr_adb.addr;
> + u32 *dei_mmr = &mmr_adb->dei_regs[0];
> + struct vpe_dei_regs *cur = &dei_regs;
> +
> + dei_mmr[2] = cur->mdt_spacial_freq_thr_reg;
> + dei_mmr[3] = cur->edi_config_reg;
> + dei_mmr[4] = cur->edi_lut_reg0;
> + dei_mmr[5] = cur->edi_lut_reg1;
> + dei_mmr[6] = cur->edi_lut_reg2;
> + dei_mmr[7] = cur->edi_lut_reg3;
> +
> + ctx->load_mmrs = true;
> +}
> +
> #define V4L2_CID_TRANS_NUM_BUFS (V4L2_CID_USER_BASE)
>
> static int vpe_s_ctrl(struct v4l2_ctrl *ctrl)
> @@ -1425,6 +1723,7 @@ static int vpe_open(struct file *file)
> s_q_data->sizeimage[VPE_LUMA] = (s_q_data->width * s_q_data->height *
> s_q_data->fmt->vpdma_fmt[VPE_LUMA]->depth) >> 3;
> s_q_data->colorspace = V4L2_COLORSPACE_SMPTE240M;
> + s_q_data->field = V4L2_FIELD_NONE;
> s_q_data->c_rect.left = 0;
> s_q_data->c_rect.top = 0;
> s_q_data->c_rect.width = s_q_data->width;
> @@ -1433,6 +1732,7 @@ static int vpe_open(struct file *file)
>
> ctx->q_data[Q_DATA_DST] = *s_q_data;
>
> + set_dei_shadow_registers(ctx);
> set_src_registers(ctx);
> set_dst_registers(ctx);
> ret = set_srcdst_params(ctx);
> @@ -1487,6 +1787,8 @@ static int vpe_release(struct file *file)
> vpe_dbg(dev, "releasing instance %p\n", ctx);
>
> mutex_lock(&dev->dev_mutex);
> + free_vbs(ctx);
> + free_mv_buffers(ctx);
> vpdma_free_desc_list(&ctx->desc_list);
> vpdma_buf_free(&ctx->mmr_adb);
>
>
Regards,
Hans
next prev parent reply other threads:[~2013-08-02 14:40 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-02 14:03 [PATCH 0/6] v4l: VPE mem to mem driver Archit Taneja
2013-08-02 14:03 ` [PATCH 1/6] v4l: ti-vpe: Create a vpdma helper library Archit Taneja
2013-08-05 8:13 ` Tomi Valkeinen
2013-08-05 11:26 ` Archit Taneja
2013-08-05 12:26 ` Tomi Valkeinen
2013-08-08 21:35 ` Laurent Pinchart
2013-08-14 10:19 ` Archit Taneja
2013-08-08 22:04 ` Laurent Pinchart
2013-08-14 10:57 ` Archit Taneja
2013-08-20 11:39 ` Laurent Pinchart
2013-08-20 12:51 ` Archit Taneja
2013-08-20 13:16 ` Archit Taneja
2013-08-20 13:56 ` Laurent Pinchart
2013-08-21 6:47 ` Archit Taneja
2013-08-02 14:03 ` [PATCH 2/6] v4l: ti-vpe: Add helpers for creating VPDMA descriptors Archit Taneja
2013-08-05 9:11 ` Tomi Valkeinen
2013-08-05 12:05 ` Archit Taneja
2013-08-05 13:03 ` Tomi Valkeinen
2013-08-02 14:03 ` [PATCH 3/6] v4l: ti-vpe: Add VPE mem to mem driver Archit Taneja
2013-08-02 14:36 ` Hans Verkuil
2013-08-02 14:55 ` Archit Taneja
2013-08-05 9:18 ` Tomi Valkeinen
2013-08-02 14:03 ` [PATCH 4/6] v4l: ti-vpe: Add de-interlacer support in VPE Archit Taneja
2013-08-02 14:40 ` Hans Verkuil [this message]
2013-08-02 14:03 ` [PATCH 5/6] arm: dra7xx: hwmod data: add VPE hwmod data and ocp_if info Archit Taneja
2013-08-02 14:03 ` [PATCH 6/6] experimental: arm: dts: dra7xx: Add a DT node for VPE Archit Taneja
2013-08-08 22:11 ` Laurent Pinchart
2013-10-25 10:35 ` Archit Taneja
2013-12-03 10:08 ` Archit Taneja
2013-08-20 11:00 ` [PATCH v2 0/6] v4l: VPE mem to mem driver Archit Taneja
2013-08-20 11:00 ` [PATCH v2 1/6] v4l: ti-vpe: Create a vpdma helper library Archit Taneja
2013-08-20 11:00 ` [PATCH v2 2/6] v4l: ti-vpe: Add helpers for creating VPDMA descriptors Archit Taneja
2013-08-20 11:00 ` [PATCH v2 3/6] v4l: ti-vpe: Add VPE mem to mem driver Archit Taneja
2013-08-20 11:00 ` [PATCH v2 4/6] v4l: ti-vpe: Add de-interlacer support in VPE Archit Taneja
2013-08-20 11:00 ` [PATCH v2 5/6] arm: dra7xx: hwmod data: add VPE hwmod data and ocp_if info Archit Taneja
2013-08-20 11:00 ` [PATCH v2 6/6] experimental: arm: dts: dra7xx: Add a DT node for VPE Archit Taneja
2013-08-29 12:32 ` [PATCH v3 0/6] v4l: VPE mem to mem driver Archit Taneja
2013-08-29 12:32 ` [PATCH v3 1/6] v4l: ti-vpe: Create a vpdma helper library Archit Taneja
2013-08-29 12:32 ` [PATCH v3 2/6] v4l: ti-vpe: Add helpers for creating VPDMA descriptors Archit Taneja
2013-08-29 12:32 ` [PATCH v3 3/6] v4l: ti-vpe: Add VPE mem to mem driver Archit Taneja
2013-08-29 13:28 ` Hans Verkuil
2013-08-30 6:47 ` Archit Taneja
2013-08-30 7:07 ` Hans Verkuil
2013-08-30 10:05 ` Archit Taneja
2013-08-30 10:44 ` Hans Verkuil
2013-09-05 5:56 ` Archit Taneja
2013-08-29 12:32 ` [PATCH v3 4/6] v4l: ti-vpe: Add de-interlacer support in VPE Archit Taneja
2013-08-29 12:32 ` [PATCH v3 5/6] arm: dra7xx: hwmod data: add VPE hwmod data and ocp_if info Archit Taneja
2013-08-29 12:42 ` Rajendra Nayak
2013-08-29 13:42 ` Archit Taneja
2013-08-29 12:32 ` [PATCH v3 6/6] experimental: arm: dts: dra7xx: Add a DT node for VPE Archit Taneja
2013-09-06 10:12 ` [PATCH v4 0/4] v4l: VPE mem to mem driver Archit Taneja
2013-09-06 10:12 ` [PATCH v4 1/4] v4l: ti-vpe: Create a vpdma helper library Archit Taneja
2013-10-07 7:46 ` Hans Verkuil
2013-09-06 10:12 ` [PATCH v4 2/4] v4l: ti-vpe: Add helpers for creating VPDMA descriptors Archit Taneja
2013-10-07 7:46 ` Hans Verkuil
2013-09-06 10:12 ` [PATCH v4 3/4] v4l: ti-vpe: Add VPE mem to mem driver Archit Taneja
2013-10-07 7:55 ` Hans Verkuil
2013-10-07 9:16 ` Archit Taneja
2013-10-07 9:34 ` Hans Verkuil
2013-10-07 10:22 ` Archit Taneja
2013-10-07 14:02 ` Hans Verkuil
2013-10-07 14:34 ` Archit Taneja
2013-09-06 10:12 ` [PATCH v4 4/4] v4l: ti-vpe: Add de-interlacer support in VPE Archit Taneja
2013-10-07 7:57 ` Hans Verkuil
2013-09-16 6:59 ` [PATCH v4 0/4] v4l: VPE mem to mem driver Archit Taneja
2013-10-07 6:39 ` Archit Taneja
2013-10-09 14:29 ` [PATCH v5 3/4] v4l: ti-vpe: Add " Archit Taneja
2013-10-11 7:46 ` Hans Verkuil
2013-10-15 13:47 ` Archit Taneja
2013-10-15 13:51 ` Hans Verkuil
2013-10-15 14:13 ` Kamil Debski
2013-10-15 15:54 ` Kamil Debski
2013-10-16 5:08 ` Archit Taneja
2013-10-16 5:36 ` [PATCH v5 0/4] v4l: " Archit Taneja
2013-10-16 5:36 ` [PATCH v5 1/4] v4l: ti-vpe: Create a vpdma helper library Archit Taneja
2013-10-16 5:36 ` [PATCH v5 2/4] v4l: ti-vpe: Add helpers for creating VPDMA descriptors Archit Taneja
2013-10-16 5:36 ` [PATCH v5 3/4] v4l: ti-vpe: Add VPE mem to mem driver Archit Taneja
2013-10-16 5:36 ` [PATCH v5 4/4] v4l: ti-vpe: Add de-interlacer support in VPE Archit Taneja
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=51FBC4D7.2010802@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=archit@ti.com \
--cc=dagriego@biglakesoftware.com \
--cc=dale@farnsworth.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=pawel@osciak.com \
--cc=tomi.valkeinen@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).