All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [PATCH 6/8] rkvdec: Use vb2_find_buffer
Date: Fri, 8 Jul 2022 20:45:44 +0900	[thread overview]
Message-ID: <CAAFQd5B4KMo5=O2zDit3e3BFottnzuDpC9kgvHHAr+y4yhannw@mail.gmail.com> (raw)
In-Reply-To: <YsgTM1zYMDHa2HJd@eze-laptop>

On Fri, Jul 8, 2022 at 8:21 PM Ezequiel Garcia
<ezequiel@vanguardiasur.com.ar> wrote:
>
> Hi Tomasz,
>
> On Fri, Jul 08, 2022 at 01:40:53PM +0900, Tomasz Figa wrote:
> > Hi Ezequiel,
> >
> > On Thu, Jul 7, 2022 at 3:27 AM Ezequiel Garcia
> > <ezequiel@vanguardiasur.com.ar> wrote:
> > >
> > > Use the newly introduced vb2_find_buffer API to get a vb2_buffer
> > > given a buffer timestamp.
> > >
> > > Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> > > ---
> > >  drivers/staging/media/rkvdec/rkvdec-h264.c | 41 ++++++++--------------
> > >  drivers/staging/media/rkvdec/rkvdec-vp9.c  | 10 +++---
> > >  2 files changed, 19 insertions(+), 32 deletions(-)
> > >
> > > diff --git a/drivers/staging/media/rkvdec/rkvdec-h264.c b/drivers/staging/media/rkvdec/rkvdec-h264.c
> > > index 2992fb87cf72..4af5a831bde0 100644
> > > --- a/drivers/staging/media/rkvdec/rkvdec-h264.c
> > > +++ b/drivers/staging/media/rkvdec/rkvdec-h264.c
> > > @@ -109,7 +109,7 @@ struct rkvdec_h264_run {
> > >         const struct v4l2_ctrl_h264_sps *sps;
> > >         const struct v4l2_ctrl_h264_pps *pps;
> > >         const struct v4l2_ctrl_h264_scaling_matrix *scaling_matrix;
> > > -       int ref_buf_idx[V4L2_H264_NUM_DPB_ENTRIES];
> > > +       struct vb2_buffer *ref_buf[V4L2_H264_NUM_DPB_ENTRIES];
> >
> > How do we guarantee that those pointers remain valid through the
> > lifetime of this structure?
> >
>
> The rkvdec_h264_run is populated in .device_run, and used to program
> the hardware for each decode job.
>
> So these videobuf2 buffer won't outlive a given decode job. The vb2
> queue can't be released (so buffers can't be released) while
> a job is runnning (i.e. the driver is in a "streaming" state).
>
> We should be good, right?

Makes sense, thanks!

I think the only other comment was about the new helper being
initially inline and then turned back into a regular function, so if
we don't get any other comments in a few more days, feel free to
ignore that one.

Best regards,
Tomasz

>
> Thanks for the review,
> Ezequiel
>
> > Best regards,
> > Tomasz
> >
> > >  };
> > >
> > >  struct rkvdec_h264_ctx {
> > > @@ -742,17 +742,16 @@ static void lookup_ref_buf_idx(struct rkvdec_ctx *ctx,
> > >                 struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
> > >                 const struct v4l2_h264_dpb_entry *dpb = run->decode_params->dpb;
> > >                 struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
> > > -               int buf_idx = -1;
> > > +               struct vb2_buffer *buf = NULL;
> > >
> > >                 if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE) {
> > > -                       buf_idx = vb2_find_timestamp(cap_q,
> > > -                                                    dpb[i].reference_ts, 0);
> > > -                       if (buf_idx < 0)
> > > +                       buf = vb2_find_buffer(cap_q, dpb[i].reference_ts);
> > > +                       if (!buf)
> > >                                 pr_debug("No buffer for reference_ts %llu",
> > >                                          dpb[i].reference_ts);
> > >                 }
> > >
> > > -               run->ref_buf_idx[i] = buf_idx;
> > > +               run->ref_buf[i] = buf;
> > >         }
> > >  }
> > >
> > > @@ -805,7 +804,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
> > >                         if (WARN_ON(ref->index >= ARRAY_SIZE(dec_params->dpb)))
> > >                                 continue;
> > >
> > > -                       dpb_valid = run->ref_buf_idx[ref->index] >= 0;
> > > +                       dpb_valid = run->ref_buf[ref->index] != NULL;
> > >                         bottom = ref->fields == V4L2_H264_BOTTOM_FIELD_REF;
> > >
> > >                         set_ps_field(hw_rps, DPB_INFO(i, j),
> > > @@ -881,24 +880,6 @@ static const u32 poc_reg_tbl_bottom_field[16] = {
> > >         RKVDEC_REG_H264_POC_REFER2(1)
> > >  };
> > >
> > > -static struct vb2_buffer *
> > > -get_ref_buf(struct rkvdec_ctx *ctx, struct rkvdec_h264_run *run,
> > > -           unsigned int dpb_idx)
> > > -{
> > > -       struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
> > > -       struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
> > > -       int buf_idx = run->ref_buf_idx[dpb_idx];
> > > -
> > > -       /*
> > > -        * If a DPB entry is unused or invalid, address of current destination
> > > -        * buffer is returned.
> > > -        */
> > > -       if (buf_idx < 0)
> > > -               return &run->base.bufs.dst->vb2_buf;
> > > -
> > > -       return vb2_get_buffer(cap_q, buf_idx);
> > > -}
> > > -
> > >  static void config_registers(struct rkvdec_ctx *ctx,
> > >                              struct rkvdec_h264_run *run)
> > >  {
> > > @@ -971,8 +952,14 @@ static void config_registers(struct rkvdec_ctx *ctx,
> > >
> > >         /* config ref pic address & poc */
> > >         for (i = 0; i < ARRAY_SIZE(dec_params->dpb); i++) {
> > > -               struct vb2_buffer *vb_buf = get_ref_buf(ctx, run, i);
> > > -
> > > +               struct vb2_buffer *vb_buf = run->ref_buf[i];
> > > +
> > > +               /*
> > > +                * If a DPB entry is unused or invalid, address of current destination
> > > +                * buffer is returned.
> > > +                */
> > > +               if (!vb_buf)
> > > +                       vb_buf = &dst_buf->vb2_buf;
> > >                 refer_addr = vb2_dma_contig_plane_dma_addr(vb_buf, 0);
> > >
> > >                 if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)
> > > diff --git a/drivers/staging/media/rkvdec/rkvdec-vp9.c b/drivers/staging/media/rkvdec/rkvdec-vp9.c
> > > index c2f42e76be10..d8c1c0db15c7 100644
> > > --- a/drivers/staging/media/rkvdec/rkvdec-vp9.c
> > > +++ b/drivers/staging/media/rkvdec/rkvdec-vp9.c
> > > @@ -383,17 +383,17 @@ get_ref_buf(struct rkvdec_ctx *ctx, struct vb2_v4l2_buffer *dst, u64 timestamp)
> > >  {
> > >         struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
> > >         struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
> > > -       int buf_idx;
> > > +       struct vb2_buffer *buf;
> > >
> > >         /*
> > >          * If a ref is unused or invalid, address of current destination
> > >          * buffer is returned.
> > >          */
> > > -       buf_idx = vb2_find_timestamp(cap_q, timestamp, 0);
> > > -       if (buf_idx < 0)
> > > -               return vb2_to_rkvdec_decoded_buf(&dst->vb2_buf);
> > > +       buf = vb2_find_buffer(cap_q, timestamp);
> > > +       if (!buf)
> > > +               buf = &dst->vb2_buf;
> > >
> > > -       return vb2_to_rkvdec_decoded_buf(vb2_get_buffer(cap_q, buf_idx));
> > > +       return vb2_to_rkvdec_decoded_buf(buf);
> > >  }
> > >
> > >  static dma_addr_t get_mv_base_addr(struct rkvdec_decoded_buffer *buf)
> > > --
> > > 2.34.3
> > >

  reply	other threads:[~2022-07-08 11:46 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-06 18:26 [PATCH 0/8] videobuf2: Replace vb2_find_timestamp() with vb2_find_buffer() Ezequiel Garcia
2022-07-06 18:26 ` [PATCH 1/8] videobuf2: Introduce vb2_find_buffer() Ezequiel Garcia
2022-07-06 18:26 ` [PATCH 2/8] mediatek: vcodec: Use vb2_find_buffer Ezequiel Garcia
2022-07-06 18:26 ` [PATCH 3/8] tegra-vde: " Ezequiel Garcia
2022-07-06 18:26 ` [PATCH 4/8] vicodec: " Ezequiel Garcia
2022-07-06 18:26 ` [PATCH 5/8] hantro: " Ezequiel Garcia
2022-07-06 18:26 ` [PATCH 6/8] rkvdec: " Ezequiel Garcia
2022-07-08  4:40   ` Tomasz Figa
2022-07-08 11:21     ` Ezequiel Garcia
2022-07-08 11:45       ` Tomasz Figa [this message]
2022-07-06 18:26 ` [PATCH 7/8] cedrus: " Ezequiel Garcia
2022-07-11 18:33   ` Jernej Škrabec
2022-07-06 18:26 ` [PATCH 8/8] videobuf2: Remove vb2_find_timestamp() Ezequiel Garcia
2022-07-08  4:45   ` Tomasz Figa
2022-07-08 11:15     ` Ezequiel Garcia
2022-07-08  4:47 ` [PATCH 0/8] videobuf2: Replace vb2_find_timestamp() with vb2_find_buffer() Tomasz Figa
2022-07-08 11:47   ` Tomasz Figa

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='CAAFQd5B4KMo5=O2zDit3e3BFottnzuDpC9kgvHHAr+y4yhannw@mail.gmail.com' \
    --to=tfiga@chromium.org \
    --cc=ezequiel@vanguardiasur.com.ar \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.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.