From: "Xiang, Haihao" <haihao.xiang-at-intel.com@ffmpeg.org> To: "ffmpeg-devel@ffmpeg.org" <ffmpeg-devel@ffmpeg.org> Cc: "ruijing.dong@amd.com" <ruijing.dong@amd.com>, "Wang, Fei W" <fei.w.wang@intel.com>, "nst799610810@gmail.com" <nst799610810@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH v3] avcodec/av1_vaapi: add direct film grain mode Date: Tue, 22 Nov 2022 04:37:33 +0000 Message-ID: <dce2b45de9cc09eaa95235b4ea93263b2a2fb9d6.camel@intel.com> (raw) In-Reply-To: <20221121195048.240417-1-ruijing.dong@amd.com> On Mon, 2022-11-21 at 14:50 -0500, Ruijing Dong wrote: > Add flag AV_VAAPI_DRIVER_QUIRK_DIRCT_FILM_GRAIN_ATTRIBUTES to > specify a direct film grain mode for AMD av1 decoder. > > issue: > By using AMD av1 decoder via VAAPI, when used with film > grain content, the output displays black screen with > incorrect frame order. > > The issue being discussed in here: > https://gitlab.freedesktop.org/mesa/mesa/-/issues/6903#note_1613807 > > Signed-off-by: Ruijing Dong <ruijing.dong@amd.com> > Signed-off-by: nyanmisaka <nst799610810@gmail.com> > --- > > update: using driver_quirks to identify AMD driver instead of > extra AV_HWACCEL_FLAG. > > libavcodec/avcodec.h | 1 - > libavcodec/vaapi_av1.c | 6 ++++-- > libavutil/hwcontext_vaapi.c | 5 +++++ > libavutil/hwcontext_vaapi.h | 6 ++++++ > 4 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > index 3edd8e2636..51adb8a1dc 100644 > --- a/libavcodec/avcodec.h > +++ b/libavcodec/avcodec.h > @@ -2252,7 +2252,6 @@ typedef struct AVHWAccel { > * while indicating success. > */ > #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) > - This change is not needed Thanks Haihao > /** > * @} > */ > diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c > index d0339b2705..1eb6b87264 100644 > --- a/libavcodec/vaapi_av1.c > +++ b/libavcodec/vaapi_av1.c > @@ -127,6 +127,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, > int8_t bit_depth_idx; > int err = 0; > int apply_grain = !(avctx->export_side_data & > AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; > + int direct_film_grain = ctx->base.hwctx->driver_quirks & > AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES; > uint8_t remap_lr_type[4] = {AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE, > AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ}; > uint8_t segmentation_feature_signed[AV1_SEG_LVL_MAX] = {1, 1, 1, 1, 1, 0, > 0, 0}; > uint8_t segmentation_feature_max[AV1_SEG_LVL_MAX] = {255, > AV1_MAX_LOOP_FILTER, > @@ -136,7 +137,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, > if (bit_depth_idx < 0) > goto fail; > > - if (apply_grain) { > + if (apply_grain && !direct_film_grain) { > if (ctx->tmp_frame->buf[0]) > ff_thread_release_buffer(avctx, ctx->tmp_frame); > err = ff_thread_get_buffer(avctx, ctx->tmp_frame, > AV_GET_BUFFER_FLAG_REF); > @@ -375,6 +376,7 @@ static int vaapi_av1_end_frame(AVCodecContext *avctx) > VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; > > int apply_grain = !(avctx->export_side_data & > AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; > + int direct_film_grain = ctx->base.hwctx->driver_quirks & > AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES; > int ret; > ret = ff_vaapi_decode_issue(avctx, pic); > if (ret < 0) > @@ -385,7 +387,7 @@ static int vaapi_av1_end_frame(AVCodecContext *avctx) > if (ctx->ref_tab[i].frame->buf[0]) > ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame); > > - if (apply_grain) { > + if (apply_grain && !direct_film_grain) { > ret = av_frame_ref(ctx->ref_tab[i].frame, ctx->tmp_frame); > if (ret < 0) > return ret; > diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c > index 4bcde74f62..dced6e9401 100644 > --- a/libavutil/hwcontext_vaapi.c > +++ b/libavutil/hwcontext_vaapi.c > @@ -371,6 +371,11 @@ static const struct { > "Splitted-Desktop Systems VDPAU backend for VA-API", > AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES, > }, > + { > + "AMD Radeon", > + "AMD Radeon", > + AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES, > + } > }; > > static int vaapi_device_init(AVHWDeviceContext *hwdev) > diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h > index 0b2e071cb3..b93d676423 100644 > --- a/libavutil/hwcontext_vaapi.h > +++ b/libavutil/hwcontext_vaapi.h > @@ -58,6 +58,12 @@ enum { > * and the results of the vaQuerySurfaceAttributes() call will be faked. > */ > AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), > + > + /** > + * The identified driver which suppports film grain direct output mode. > + * and this is to avoid av1 decoding film grain corruption. > + */ > + AV_VAAPI_DRIVER_QUIRK_DIRECT_FILM_GRAIN_ATTRIBUTES = (1 << 4), > }; > > /** > -- > 2.25.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-11-22 4:37 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-11-18 15:34 [FFmpeg-devel] [PATCH] " Ruijing Dong 2022-11-20 2:59 ` [FFmpeg-devel] [PATCH v2] " Ruijing Dong 2022-11-20 16:44 ` Mark Thompson 2022-11-22 19:18 ` Dong, Ruijing 2022-11-22 20:26 ` Mark Thompson 2022-11-22 20:59 ` Mark Thompson 2022-11-22 23:34 ` Mark Thompson 2022-11-23 2:43 ` Dong, Ruijing 2022-11-24 15:27 ` Dong, Ruijing 2022-11-24 21:09 ` Mark Thompson 2022-11-24 21:22 ` Dong, Ruijing 2022-11-21 19:50 ` [FFmpeg-devel] [PATCH v3] " Ruijing Dong 2022-11-21 22:03 ` Lynne 2022-11-22 4:37 ` Xiang, Haihao [this message] 2022-11-22 16:28 ` [FFmpeg-devel] [PATCH v4] " Ruijing Dong
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=dce2b45de9cc09eaa95235b4ea93263b2a2fb9d6.camel@intel.com \ --to=haihao.xiang-at-intel.com@ffmpeg.org \ --cc=fei.w.wang@intel.com \ --cc=ffmpeg-devel@ffmpeg.org \ --cc=nst799610810@gmail.com \ --cc=ruijing.dong@amd.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
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git