From: ayaka <ayaka@soulik.info> To: linux-media@vger.kernel.org Cc: ayaka <ayaka@soulik.info>, acourbot@chromium.org, nicolas@ndufresne.ca, paul.kocialkowski@bootlin.com, randy.li@rock-chips.com, jernej.skrabec@gmail.com, linux-kernel@vger.kernel.org, joro@8bytes.org, linux-arm-kernel@lists.infradead.org, mchehab@kernel.org, maxime.ripard@bootlin.com, hverkuil@xs4all.nl, ezequiel@collabora.com, thomas.petazzoni@bootlin.com, linux-rockchip@lists.infradead.org Subject: [PATCH 3/4] [TEST]: rockchip: mpp: support qtable Date: Thu, 31 Jan 2019 11:13:32 +0800 [thread overview] Message-ID: <20190131031333.11905-4-ayaka@soulik.info> (raw) In-Reply-To: <20190131031333.11905-1-ayaka@soulik.info> Yes, the buffer won't be freed. I don't want to store buffers for a session. I just want to use it to verify the FFmpeg. Signed-off-by: ayaka <ayaka@soulik.info> --- drivers/staging/rockchip-mpp/mpp_dev_common.h | 3 ++ drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c | 3 ++ drivers/staging/rockchip-mpp/vdpu2/mpeg2.c | 42 +++++++++++++++---- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/drivers/staging/rockchip-mpp/mpp_dev_common.h b/drivers/staging/rockchip-mpp/mpp_dev_common.h index 36770af53a95..33d7725be67b 100644 --- a/drivers/staging/rockchip-mpp/mpp_dev_common.h +++ b/drivers/staging/rockchip-mpp/mpp_dev_common.h @@ -100,6 +100,9 @@ struct mpp_session { struct v4l2_ctrl_handler ctrl_handler; /* TODO: FIXME: slower than helper function ? */ struct v4l2_ctrl **ctrls; + + dma_addr_t qtable_addr; + void *qtable_vaddr; }; /* The context for the a task */ diff --git a/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c b/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c index 03ed080bb35c..9e00501c3577 100644 --- a/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c +++ b/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c @@ -402,6 +402,9 @@ static int rkvdpu_open(struct file *filp) return error; } + session->qtable_vaddr = dmam_alloc_coherent(mpp_dev->dev, 64 * 4, + &session->qtable_addr, + GFP_KERNEL); filp->private_data = &session->fh; mpp_debug_leave(); diff --git a/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c b/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c index a16f7629a811..416348630779 100644 --- a/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c +++ b/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c @@ -27,6 +27,34 @@ #define DEC_LITTLE_ENDIAN (1) +static const u8 zigzag[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static void mpeg2_dec_copy_qtable(u8 *qtable, + const struct v4l2_ctrl_mpeg2_quantization *ctrl) +{ + int i, n; + + if (!qtable || !ctrl) + return; + + for (i = 0; i < 64; i++) { + n = zigzag[i]; + qtable[n + 0] = ctrl->intra_quantiser_matrix[i]; + qtable[n + 64] = ctrl->non_intra_quantiser_matrix[i]; + qtable[n + 128] = ctrl->chroma_intra_quantiser_matrix[i]; + qtable[n + 192] = ctrl->chroma_non_intra_quantiser_matrix[i]; + } +} + static void init_hw_cfg(struct vdpu2_regs *p_regs) { p_regs->sw54.dec_strm_wordsp = 1; @@ -61,7 +89,6 @@ int rkvdpu_mpeg2_gen_reg(struct mpp_session *session, void *regs, struct vb2_v4l2_buffer *src_buf) { const struct v4l2_ctrl_mpeg2_slice_params *params; - const struct v4l2_ctrl_mpeg2_quantization *quantization; const struct v4l2_mpeg2_sequence *sequence; const struct v4l2_mpeg2_picture *picture; struct sg_table *sgt; @@ -69,9 +96,6 @@ int rkvdpu_mpeg2_gen_reg(struct mpp_session *session, void *regs, params = rockchip_mpp_get_cur_ctrl(session, V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS); - quantization = rockchip_mpp_get_cur_ctrl(session, - V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION); - if (!params) return -EINVAL; @@ -164,6 +188,7 @@ int rkvdpu_mpeg2_prepare_buf(struct mpp_session *session, void *regs) { const struct v4l2_ctrl_mpeg2_slice_params *params; const struct v4l2_mpeg2_sequence *sequence; + const struct v4l2_ctrl_mpeg2_quantization *quantization; const struct v4l2_mpeg2_picture *picture; struct vb2_v4l2_buffer *dst_buf; dma_addr_t cur_addr, fwd_addr, bwd_addr; @@ -177,6 +202,9 @@ int rkvdpu_mpeg2_prepare_buf(struct mpp_session *session, void *regs) picture = ¶ms->picture; sequence = ¶ms->sequence; + quantization = rockchip_mpp_get_cur_ctrl(session, + V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION); + dst_buf = v4l2_m2m_next_dst_buf(session->fh.m2m_ctx); sgt = vb2_dma_sg_plane_desc(&dst_buf->vb2_buf, 0); @@ -219,9 +247,7 @@ int rkvdpu_mpeg2_prepare_buf(struct mpp_session *session, void *regs) p_regs->sw134.refer2_base = bwd_addr >> 2; p_regs->sw135.refer3_base = bwd_addr >> 2; -#if 0 - //ref & qtable config - p_regs->sw61.qtable_base = mpp_buffer_get_fd(ctx->qp_table); -#endif + mpeg2_dec_copy_qtable(session->qtable_vaddr, quantization); + p_regs->sw61.qtable_base = session->qtable_addr; return 0; } -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: ayaka <ayaka@soulik.info> To: linux-media@vger.kernel.org Cc: hverkuil@xs4all.nl, acourbot@chromium.org, maxime.ripard@bootlin.com, joro@8bytes.org, ayaka <ayaka@soulik.info>, randy.li@rock-chips.com, linux-kernel@vger.kernel.org, jernej.skrabec@gmail.com, nicolas@ndufresne.ca, paul.kocialkowski@bootlin.com, linux-rockchip@lists.infradead.org, thomas.petazzoni@bootlin.com, mchehab@kernel.org, ezequiel@collabora.com, linux-arm-kernel@lists.infradead.org Subject: [PATCH 3/4] [TEST]: rockchip: mpp: support qtable Date: Thu, 31 Jan 2019 11:13:32 +0800 [thread overview] Message-ID: <20190131031333.11905-4-ayaka@soulik.info> (raw) In-Reply-To: <20190131031333.11905-1-ayaka@soulik.info> Yes, the buffer won't be freed. I don't want to store buffers for a session. I just want to use it to verify the FFmpeg. Signed-off-by: ayaka <ayaka@soulik.info> --- drivers/staging/rockchip-mpp/mpp_dev_common.h | 3 ++ drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c | 3 ++ drivers/staging/rockchip-mpp/vdpu2/mpeg2.c | 42 +++++++++++++++---- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/drivers/staging/rockchip-mpp/mpp_dev_common.h b/drivers/staging/rockchip-mpp/mpp_dev_common.h index 36770af53a95..33d7725be67b 100644 --- a/drivers/staging/rockchip-mpp/mpp_dev_common.h +++ b/drivers/staging/rockchip-mpp/mpp_dev_common.h @@ -100,6 +100,9 @@ struct mpp_session { struct v4l2_ctrl_handler ctrl_handler; /* TODO: FIXME: slower than helper function ? */ struct v4l2_ctrl **ctrls; + + dma_addr_t qtable_addr; + void *qtable_vaddr; }; /* The context for the a task */ diff --git a/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c b/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c index 03ed080bb35c..9e00501c3577 100644 --- a/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c +++ b/drivers/staging/rockchip-mpp/mpp_dev_vdpu2.c @@ -402,6 +402,9 @@ static int rkvdpu_open(struct file *filp) return error; } + session->qtable_vaddr = dmam_alloc_coherent(mpp_dev->dev, 64 * 4, + &session->qtable_addr, + GFP_KERNEL); filp->private_data = &session->fh; mpp_debug_leave(); diff --git a/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c b/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c index a16f7629a811..416348630779 100644 --- a/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c +++ b/drivers/staging/rockchip-mpp/vdpu2/mpeg2.c @@ -27,6 +27,34 @@ #define DEC_LITTLE_ENDIAN (1) +static const u8 zigzag[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +static void mpeg2_dec_copy_qtable(u8 *qtable, + const struct v4l2_ctrl_mpeg2_quantization *ctrl) +{ + int i, n; + + if (!qtable || !ctrl) + return; + + for (i = 0; i < 64; i++) { + n = zigzag[i]; + qtable[n + 0] = ctrl->intra_quantiser_matrix[i]; + qtable[n + 64] = ctrl->non_intra_quantiser_matrix[i]; + qtable[n + 128] = ctrl->chroma_intra_quantiser_matrix[i]; + qtable[n + 192] = ctrl->chroma_non_intra_quantiser_matrix[i]; + } +} + static void init_hw_cfg(struct vdpu2_regs *p_regs) { p_regs->sw54.dec_strm_wordsp = 1; @@ -61,7 +89,6 @@ int rkvdpu_mpeg2_gen_reg(struct mpp_session *session, void *regs, struct vb2_v4l2_buffer *src_buf) { const struct v4l2_ctrl_mpeg2_slice_params *params; - const struct v4l2_ctrl_mpeg2_quantization *quantization; const struct v4l2_mpeg2_sequence *sequence; const struct v4l2_mpeg2_picture *picture; struct sg_table *sgt; @@ -69,9 +96,6 @@ int rkvdpu_mpeg2_gen_reg(struct mpp_session *session, void *regs, params = rockchip_mpp_get_cur_ctrl(session, V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS); - quantization = rockchip_mpp_get_cur_ctrl(session, - V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION); - if (!params) return -EINVAL; @@ -164,6 +188,7 @@ int rkvdpu_mpeg2_prepare_buf(struct mpp_session *session, void *regs) { const struct v4l2_ctrl_mpeg2_slice_params *params; const struct v4l2_mpeg2_sequence *sequence; + const struct v4l2_ctrl_mpeg2_quantization *quantization; const struct v4l2_mpeg2_picture *picture; struct vb2_v4l2_buffer *dst_buf; dma_addr_t cur_addr, fwd_addr, bwd_addr; @@ -177,6 +202,9 @@ int rkvdpu_mpeg2_prepare_buf(struct mpp_session *session, void *regs) picture = ¶ms->picture; sequence = ¶ms->sequence; + quantization = rockchip_mpp_get_cur_ctrl(session, + V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION); + dst_buf = v4l2_m2m_next_dst_buf(session->fh.m2m_ctx); sgt = vb2_dma_sg_plane_desc(&dst_buf->vb2_buf, 0); @@ -219,9 +247,7 @@ int rkvdpu_mpeg2_prepare_buf(struct mpp_session *session, void *regs) p_regs->sw134.refer2_base = bwd_addr >> 2; p_regs->sw135.refer3_base = bwd_addr >> 2; -#if 0 - //ref & qtable config - p_regs->sw61.qtable_base = mpp_buffer_get_fd(ctx->qp_table); -#endif + mpeg2_dec_copy_qtable(session->qtable_vaddr, quantization); + p_regs->sw61.qtable_base = session->qtable_addr; return 0; } -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-01-31 3:14 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-31 3:13 [PATCH 0/4] WIP: rockchip mpp for v4l2 video decoder ayaka 2019-01-31 3:13 ` ayaka 2019-01-31 3:13 ` [PATCH 1/4] [WIP]: staging: video: rockchip: add v4l2 common ayaka 2019-01-31 3:13 ` [PATCH 2/4] [WIP] staging: video: rockchip: vdpu2 ayaka 2019-01-31 3:13 ` ayaka 2019-01-31 3:13 ` ayaka [this message] 2019-01-31 3:13 ` [PATCH 3/4] [TEST]: rockchip: mpp: support qtable ayaka 2019-01-31 3:13 ` [PATCH 4/4] staging: video: rockchip: add video codec ayaka 2019-01-31 3:13 ` ayaka 2019-02-01 15:30 ` kbuild test robot 2019-02-01 15:30 ` kbuild test robot 2019-02-01 15:30 ` kbuild test robot 2019-01-31 14:03 ` [PATCH 0/4] WIP: rockchip mpp for v4l2 video decoder Ezequiel Garcia 2019-01-31 14:03 ` Ezequiel Garcia 2019-01-31 15:01 ` Ayaka 2019-01-31 15:01 ` Ayaka
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=20190131031333.11905-4-ayaka@soulik.info \ --to=ayaka@soulik.info \ --cc=acourbot@chromium.org \ --cc=ezequiel@collabora.com \ --cc=hverkuil@xs4all.nl \ --cc=jernej.skrabec@gmail.com \ --cc=joro@8bytes.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=linux-rockchip@lists.infradead.org \ --cc=maxime.ripard@bootlin.com \ --cc=mchehab@kernel.org \ --cc=nicolas@ndufresne.ca \ --cc=paul.kocialkowski@bootlin.com \ --cc=randy.li@rock-chips.com \ --cc=thomas.petazzoni@bootlin.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: linkBe 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.