Le lundi 21 juin 2021 à 20:11 -0300, Ezequiel Garcia a écrit : > When the VP8 decoders can't find a reference frame, > the driver falls back to the current output frame. > > This will probably produce some undesirable results, > leading to frame corruption, but shouldn't cause > noisy warnings. > > Signed-off-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx> Greatly appreciated fix. Acked-by: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx> > --- > drivers/staging/media/hantro/hantro_g1_vp8_dec.c | 13 ++++++++++--- > .../staging/media/hantro/rockchip_vpu2_hw_vp8_dec.c | 13 ++++++++++--- > 2 files changed, 20 insertions(+), 6 deletions(-) > > diff --git a/drivers/staging/media/hantro/hantro_g1_vp8_dec.c b/drivers/staging/media/hantro/hantro_g1_vp8_dec.c > index 96622a7f8279..7f88dcee1473 100644 > --- a/drivers/staging/media/hantro/hantro_g1_vp8_dec.c > +++ b/drivers/staging/media/hantro/hantro_g1_vp8_dec.c > @@ -376,12 +376,17 @@ static void cfg_ref(struct hantro_ctx *ctx, > vb2_dst = hantro_get_dst_buf(ctx); > > ref = hantro_get_ref(ctx, hdr->last_frame_ts); > - if (!ref) > + if (!ref) { > + vpu_debug(0, "failed to find last frame ts=%ld\n", > + hdr->last_frame_ts); > ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > + } > vdpu_write_relaxed(vpu, ref, G1_REG_ADDR_REF(0)); > > ref = hantro_get_ref(ctx, hdr->golden_frame_ts); > - WARN_ON(!ref && hdr->golden_frame_ts); > + if (!ref && hdr->golden_frame_ts) > + vpu_debug(0, "failed to find golden frame ts=%ld\n", > + hdr->golden_frame_ts); > if (!ref) > ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN) > @@ -389,7 +394,9 @@ static void cfg_ref(struct hantro_ctx *ctx, > vdpu_write_relaxed(vpu, ref, G1_REG_ADDR_REF(4)); > > ref = hantro_get_ref(ctx, hdr->alt_frame_ts); > - WARN_ON(!ref && hdr->alt_frame_ts); > + if (!ref && hdr->alt_frame_ts) > + vpu_debug(0, "failed to find alt frame ts=%ld\n", > + hdr->alt_frame_ts); > if (!ref) > ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT) > diff --git a/drivers/staging/media/hantro/rockchip_vpu2_hw_vp8_dec.c b/drivers/staging/media/hantro/rockchip_vpu2_hw_vp8_dec.c > index 951b55f58a61..cd53748efe4e 100644 > --- a/drivers/staging/media/hantro/rockchip_vpu2_hw_vp8_dec.c > +++ b/drivers/staging/media/hantro/rockchip_vpu2_hw_vp8_dec.c > @@ -453,12 +453,17 @@ static void cfg_ref(struct hantro_ctx *ctx, > vb2_dst = hantro_get_dst_buf(ctx); > > ref = hantro_get_ref(ctx, hdr->last_frame_ts); > - if (!ref) > + if (!ref) { > + vpu_debug(0, "failed to find last frame ts=%ld\n", > + hdr->last_frame_ts); > ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > + } > vdpu_write_relaxed(vpu, ref, VDPU_REG_VP8_ADDR_REF0); > > ref = hantro_get_ref(ctx, hdr->golden_frame_ts); > - WARN_ON(!ref && hdr->golden_frame_ts); > + if (!ref && hdr->golden_frame_ts) > + vpu_debug(0, "failed to find golden frame ts=%ld\n", > + hdr->golden_frame_ts); > if (!ref) > ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN) > @@ -466,7 +471,9 @@ static void cfg_ref(struct hantro_ctx *ctx, > vdpu_write_relaxed(vpu, ref, VDPU_REG_VP8_ADDR_REF2_5(2)); > > ref = hantro_get_ref(ctx, hdr->alt_frame_ts); > - WARN_ON(!ref && hdr->alt_frame_ts); > + if (!ref && hdr->alt_frame_ts) > + vpu_debug(0, "failed to find alt frame ts=%ld\n", > + hdr->alt_frame_ts); > if (!ref) > ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT)