Message ID | BYAPR04MB52226F77C99DCC4861E7637FBAB20@BYAPR04MB5222.namprd04.prod.outlook.com |
---|---|
State | Withdrawn, archived |
Headers | show |
Series | [FFmpeg-devel,v2] avfilter/qsvvpp: Work around a bug in MSDK where VPP processing hangs under certain conditions | expand |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/configure | warning | Failed to apply patch |
On Mon, May 25, 2020 at 12:40 AM Soft Works <softworkz@hotmail.com> wrote: > These are: > - Dimensions are already aligned (e.g. 1920x800) > - No scaling is done > - Color format conversion (e.g. 10bit to 8bit) > > Example command: > ffmpeg -c:v hevc_qsv -hwaccel qsv -i hevc_10bit_1920_800.mkv > -filter_complex "scale_qsv=format=nv12" -c:v h264_qsv out.mkv > > Fix: > - Increase the frame height to the next alignment value > > V2: > - removed empty line > - removed duplicated line > --- > libavfilter/qsvvpp.c | 7 ++++++- > libavfilter/vf_scale_qsv.c | 9 ++++++++- > 2 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c > index 1bbb7a7e68..98d2353d1c 100644 > --- a/libavfilter/qsvvpp.c > +++ b/libavfilter/qsvvpp.c > @@ -420,6 +420,7 @@ static int init_vpp_session(AVFilterContext *avctx, > QSVVPPContext *s) > mfxHandleType handle_type; > mfxVersion ver; > mfxIMPL impl; > + int height_align_adjust = 0; > int ret, i; > > if (inlink->hw_frames_ctx) { > @@ -463,9 +464,13 @@ static int init_vpp_session(AVFilterContext *avctx, > QSVVPPContext *s) > out_frames_ctx = (AVHWFramesContext *)out_frames_ref->data; > out_frames_hwctx = out_frames_ctx->hwctx; > > + /* work around a bug in MSDK where VPP processing hangs under > certain conditions */ > + if (inlink->h == outlink->h) > + height_align_adjust = 1; > + > out_frames_ctx->format = AV_PIX_FMT_QSV; > out_frames_ctx->width = FFALIGN(outlink->w, 32); > - out_frames_ctx->height = FFALIGN(outlink->h, 32); > + out_frames_ctx->height = FFALIGN(outlink->h + > height_align_adjust, 32); > out_frames_ctx->sw_format = s->out_sw_format; > out_frames_ctx->initial_pool_size = 64; > if (avctx->extra_hw_frames > 0) > diff --git a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c > index 5259104a4f..303d2101a9 100644 > --- a/libavfilter/vf_scale_qsv.c > +++ b/libavfilter/vf_scale_qsv.c > @@ -181,8 +181,10 @@ static int init_out_pool(AVFilterContext *ctx, > AVQSVFramesContext *out_frames_hwctx; > enum AVPixelFormat in_format; > enum AVPixelFormat out_format; > + int height_align_adjust = 0; > int i, ret; > > /* check that we have a hw context */ > if (!ctx->inputs[0]->hw_frames_ctx) { > av_log(ctx, AV_LOG_ERROR, "No hw context provided on input\n"); > @@ -191,6 +193,7 @@ static int init_out_pool(AVFilterContext *ctx, > in_frames_ctx = > (AVHWFramesContext*)ctx->inputs[0]->hw_frames_ctx->data; > in_frames_hwctx = in_frames_ctx->hwctx; > > in_format = in_frames_ctx->sw_format; > out_format = (s->format == AV_PIX_FMT_NONE) ? in_format : > s->format; > > @@ -200,9 +203,13 @@ static int init_out_pool(AVFilterContext *ctx, > out_frames_ctx = (AVHWFramesContext*)outlink->hw_frames_ctx->data; > out_frames_hwctx = out_frames_ctx->hwctx; > > + /* work around a bug in MSDK where VPP processing hangs under certain > conditions */ > + if (in_frames_ctx->height == out_height) > + height_align_adjust = 1; > + > out_frames_ctx->format = AV_PIX_FMT_QSV; > out_frames_ctx->width = FFALIGN(out_width, 16); > - out_frames_ctx->height = FFALIGN(out_height, 16); > + out_frames_ctx->height = FFALIGN(out_height + > height_align_adjust, 16); > out_frames_ctx->sw_format = out_format; > out_frames_ctx->initial_pool_size = 4; > > -- > 2.26.2.windows.1 > > patch seems to be manually edited and cannot be applied automatically. During my tests, I couldn't see any change of behavior with and without patch, more details needed for patch justification. regards Max
> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Max Dmitrichenko > Sent: Friday, June 5, 2020 3:09 PM > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter/qsvvpp: Work around a bug > in MSDK where VPP processing hangs under certain conditions > > On Mon, May 25, 2020 at 12:40 AM Soft Works <softworkz@hotmail.com> > wrote: > > > These are: > > - Dimensions are already aligned (e.g. 1920x800) > > - No scaling is done > > - Color format conversion (e.g. 10bit to 8bit) > > > > Example command: > > ffmpeg -c:v hevc_qsv -hwaccel qsv -i hevc_10bit_1920_800.mkv > > -filter_complex "scale_qsv=format=nv12" -c:v h264_qsv out.mkv > > > > Fix: > > - Increase the frame height to the next alignment value > > > > V2: > > - removed empty line > > - removed duplicated line > > --- > > libavfilter/qsvvpp.c | 7 ++++++- > > libavfilter/vf_scale_qsv.c | 9 ++++++++- > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index > > 1bbb7a7e68..98d2353d1c 100644 > > --- a/libavfilter/qsvvpp.c > > +++ b/libavfilter/qsvvpp.c > > @@ -420,6 +420,7 @@ static int init_vpp_session(AVFilterContext > > *avctx, QSVVPPContext *s) > > mfxHandleType handle_type; > > mfxVersion ver; > > mfxIMPL impl; > > + int height_align_adjust = 0; > > int ret, i; > > > > if (inlink->hw_frames_ctx) { > > @@ -463,9 +464,13 @@ static int init_vpp_session(AVFilterContext > > *avctx, QSVVPPContext *s) > > out_frames_ctx = (AVHWFramesContext *)out_frames_ref->data; > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > + /* work around a bug in MSDK where VPP processing hangs under > > certain conditions */ > > + if (inlink->h == outlink->h) > > + height_align_adjust = 1; > > + > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > out_frames_ctx->width = FFALIGN(outlink->w, 32); > > - out_frames_ctx->height = FFALIGN(outlink->h, 32); > > + out_frames_ctx->height = FFALIGN(outlink->h + > > height_align_adjust, 32); > > out_frames_ctx->sw_format = s->out_sw_format; > > out_frames_ctx->initial_pool_size = 64; > > if (avctx->extra_hw_frames > 0) diff --git > > a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index > > 5259104a4f..303d2101a9 100644 > > --- a/libavfilter/vf_scale_qsv.c > > +++ b/libavfilter/vf_scale_qsv.c > > @@ -181,8 +181,10 @@ static int init_out_pool(AVFilterContext *ctx, > > AVQSVFramesContext *out_frames_hwctx; > > enum AVPixelFormat in_format; > > enum AVPixelFormat out_format; > > + int height_align_adjust = 0; > > int i, ret; > > > > /* check that we have a hw context */ > > if (!ctx->inputs[0]->hw_frames_ctx) { > > av_log(ctx, AV_LOG_ERROR, "No hw context provided on > > input\n"); @@ -191,6 +193,7 @@ static int init_out_pool(AVFilterContext > *ctx, > > in_frames_ctx = > > (AVHWFramesContext*)ctx->inputs[0]->hw_frames_ctx->data; > > in_frames_hwctx = in_frames_ctx->hwctx; > > > > in_format = in_frames_ctx->sw_format; > > out_format = (s->format == AV_PIX_FMT_NONE) ? in_format : > > s->format; > > > > @@ -200,9 +203,13 @@ static int init_out_pool(AVFilterContext *ctx, > > out_frames_ctx = (AVHWFramesContext*)outlink->hw_frames_ctx- > >data; > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > + /* work around a bug in MSDK where VPP processing hangs under > > + certain > > conditions */ > > + if (in_frames_ctx->height == out_height) > > + height_align_adjust = 1; > > + > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > out_frames_ctx->width = FFALIGN(out_width, 16); > > - out_frames_ctx->height = FFALIGN(out_height, 16); > > + out_frames_ctx->height = FFALIGN(out_height + > > height_align_adjust, 16); > > out_frames_ctx->sw_format = out_format; > > out_frames_ctx->initial_pool_size = 4; > > > > -- > > 2.26.2.windows.1 > > > > > patch seems to be manually edited and cannot be applied automatically. > > During my tests, I couldn't see any change of behavior with and without > patch, more details needed for patch justification. Well, before talking about the patch - the question is whether you can reproduce the hang with the video file I sent you and the command line above? It should be reproducible with drivers corresponding to MSDK 1.31 I haven't tried with the latest ones (1.32). Maybe I haven't specified "hang" well enough. In that case, "hang" means that ffmpeg totally gets stuck and does nothing, so you need to kill it. BTW: We have deployed the patch to release last week and the affected users have reported that it's resolved for them. softworkz
On Sat, Jun 6, 2020 at 7:29 AM Soft Works <softworkz@hotmail.com> wrote: > > > > -----Original Message----- > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > Max Dmitrichenko > > Sent: Friday, June 5, 2020 3:09 PM > > To: FFmpeg development discussions and patches <ffmpeg- > > devel@ffmpeg.org> > > Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter/qsvvpp: Work around a bug > > in MSDK where VPP processing hangs under certain conditions > > > > On Mon, May 25, 2020 at 12:40 AM Soft Works <softworkz@hotmail.com> > > wrote: > > > > > These are: > > > - Dimensions are already aligned (e.g. 1920x800) > > > - No scaling is done > > > - Color format conversion (e.g. 10bit to 8bit) > > > > > > Example command: > > > ffmpeg -c:v hevc_qsv -hwaccel qsv -i hevc_10bit_1920_800.mkv > > > -filter_complex "scale_qsv=format=nv12" -c:v h264_qsv out.mkv > > > > > > Fix: > > > - Increase the frame height to the next alignment value > > > > > > V2: > > > - removed empty line > > > - removed duplicated line > > > --- > > > libavfilter/qsvvpp.c | 7 ++++++- > > > libavfilter/vf_scale_qsv.c | 9 ++++++++- > > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > > > diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index > > > 1bbb7a7e68..98d2353d1c 100644 > > > --- a/libavfilter/qsvvpp.c > > > +++ b/libavfilter/qsvvpp.c > > > @@ -420,6 +420,7 @@ static int init_vpp_session(AVFilterContext > > > *avctx, QSVVPPContext *s) > > > mfxHandleType handle_type; > > > mfxVersion ver; > > > mfxIMPL impl; > > > + int height_align_adjust = 0; > > > int ret, i; > > > > > > if (inlink->hw_frames_ctx) { > > > @@ -463,9 +464,13 @@ static int init_vpp_session(AVFilterContext > > > *avctx, QSVVPPContext *s) > > > out_frames_ctx = (AVHWFramesContext *)out_frames_ref->data; > > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > > > + /* work around a bug in MSDK where VPP processing hangs under > > > certain conditions */ > > > + if (inlink->h == outlink->h) > > > + height_align_adjust = 1; > > > + > > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > > out_frames_ctx->width = FFALIGN(outlink->w, 32); > > > - out_frames_ctx->height = FFALIGN(outlink->h, 32); > > > + out_frames_ctx->height = FFALIGN(outlink->h + > > > height_align_adjust, 32); > > > out_frames_ctx->sw_format = s->out_sw_format; > > > out_frames_ctx->initial_pool_size = 64; > > > if (avctx->extra_hw_frames > 0) diff --git > > > a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index > > > 5259104a4f..303d2101a9 100644 > > > --- a/libavfilter/vf_scale_qsv.c > > > +++ b/libavfilter/vf_scale_qsv.c > > > @@ -181,8 +181,10 @@ static int init_out_pool(AVFilterContext *ctx, > > > AVQSVFramesContext *out_frames_hwctx; > > > enum AVPixelFormat in_format; > > > enum AVPixelFormat out_format; > > > + int height_align_adjust = 0; > > > int i, ret; > > > > > > /* check that we have a hw context */ > > > if (!ctx->inputs[0]->hw_frames_ctx) { > > > av_log(ctx, AV_LOG_ERROR, "No hw context provided on > > > input\n"); @@ -191,6 +193,7 @@ static int init_out_pool(AVFilterContext > > *ctx, > > > in_frames_ctx = > > > (AVHWFramesContext*)ctx->inputs[0]->hw_frames_ctx->data; > > > in_frames_hwctx = in_frames_ctx->hwctx; > > > > > > in_format = in_frames_ctx->sw_format; > > > out_format = (s->format == AV_PIX_FMT_NONE) ? in_format : > > > s->format; > > > > > > @@ -200,9 +203,13 @@ static int init_out_pool(AVFilterContext *ctx, > > > out_frames_ctx = (AVHWFramesContext*)outlink->hw_frames_ctx- > > >data; > > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > > > + /* work around a bug in MSDK where VPP processing hangs under > > > + certain > > > conditions */ > > > + if (in_frames_ctx->height == out_height) > > > + height_align_adjust = 1; > > > + > > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > > out_frames_ctx->width = FFALIGN(out_width, 16); > > > - out_frames_ctx->height = FFALIGN(out_height, 16); > > > + out_frames_ctx->height = FFALIGN(out_height + > > > height_align_adjust, 16); > > > out_frames_ctx->sw_format = out_format; > > > out_frames_ctx->initial_pool_size = 4; > > > > > > -- > > > 2.26.2.windows.1 > > > > > > > > patch seems to be manually edited and cannot be applied automatically. > > > > During my tests, I couldn't see any change of behavior with and without > > patch, more details needed for patch justification. > > Well, before talking about the patch - the question is whether you can > reproduce the hang with the video file I sent you and the command line > above? > > It should be reproducible with drivers corresponding to MSDK 1.31 > I haven't tried with the latest ones (1.32). > Exact driver version is more important than MSDK API version, as there can be the same MSDK API version across different versions of GPU driver. No hang is visible with the latest drivers. regards Max
> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Max Dmitrichenko > Sent: Saturday, June 6, 2020 2:54 PM > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter/qsvvpp: Work around a bug > in MSDK where VPP processing hangs under certain conditions > > On Sat, Jun 6, 2020 at 7:29 AM Soft Works <softworkz@hotmail.com> wrote: > > > > > > > > -----Original Message----- > > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > > Max Dmitrichenko > > > Sent: Friday, June 5, 2020 3:09 PM > > > To: FFmpeg development discussions and patches <ffmpeg- > > > devel@ffmpeg.org> > > > Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter/qsvvpp: Work around > > > a bug in MSDK where VPP processing hangs under certain conditions > > > > > > On Mon, May 25, 2020 at 12:40 AM Soft Works > <softworkz@hotmail.com> > > > wrote: > > > > > > > These are: > > > > - Dimensions are already aligned (e.g. 1920x800) > > > > - No scaling is done > > > > - Color format conversion (e.g. 10bit to 8bit) > > > > > > > > Example command: > > > > ffmpeg -c:v hevc_qsv -hwaccel qsv -i hevc_10bit_1920_800.mkv > > > > -filter_complex "scale_qsv=format=nv12" -c:v h264_qsv out.mkv > > > > > > > > Fix: > > > > - Increase the frame height to the next alignment value > > > > > > > > V2: > > > > - removed empty line > > > > - removed duplicated line > > > > --- > > > > libavfilter/qsvvpp.c | 7 ++++++- > > > > libavfilter/vf_scale_qsv.c | 9 ++++++++- > > > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index > > > > 1bbb7a7e68..98d2353d1c 100644 > > > > --- a/libavfilter/qsvvpp.c > > > > +++ b/libavfilter/qsvvpp.c > > > > @@ -420,6 +420,7 @@ static int init_vpp_session(AVFilterContext > > > > *avctx, QSVVPPContext *s) > > > > mfxHandleType handle_type; > > > > mfxVersion ver; > > > > mfxIMPL impl; > > > > + int height_align_adjust = 0; > > > > int ret, i; > > > > > > > > if (inlink->hw_frames_ctx) { > > > > @@ -463,9 +464,13 @@ static int init_vpp_session(AVFilterContext > > > > *avctx, QSVVPPContext *s) > > > > out_frames_ctx = (AVHWFramesContext *)out_frames_ref- > >data; > > > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > > > > > + /* work around a bug in MSDK where VPP processing hangs > > > > + under > > > > certain conditions */ > > > > + if (inlink->h == outlink->h) > > > > + height_align_adjust = 1; > > > > + > > > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > > > out_frames_ctx->width = FFALIGN(outlink->w, 32); > > > > - out_frames_ctx->height = FFALIGN(outlink->h, 32); > > > > + out_frames_ctx->height = FFALIGN(outlink->h + > > > > height_align_adjust, 32); > > > > out_frames_ctx->sw_format = s->out_sw_format; > > > > out_frames_ctx->initial_pool_size = 64; > > > > if (avctx->extra_hw_frames > 0) diff --git > > > > a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index > > > > 5259104a4f..303d2101a9 100644 > > > > --- a/libavfilter/vf_scale_qsv.c > > > > +++ b/libavfilter/vf_scale_qsv.c > > > > @@ -181,8 +181,10 @@ static int init_out_pool(AVFilterContext *ctx, > > > > AVQSVFramesContext *out_frames_hwctx; > > > > enum AVPixelFormat in_format; > > > > enum AVPixelFormat out_format; > > > > + int height_align_adjust = 0; > > > > int i, ret; > > > > > > > > /* check that we have a hw context */ > > > > if (!ctx->inputs[0]->hw_frames_ctx) { > > > > av_log(ctx, AV_LOG_ERROR, "No hw context provided on > > > > input\n"); @@ -191,6 +193,7 @@ static int > > > > init_out_pool(AVFilterContext > > > *ctx, > > > > in_frames_ctx = > > > > (AVHWFramesContext*)ctx->inputs[0]->hw_frames_ctx->data; > > > > in_frames_hwctx = in_frames_ctx->hwctx; > > > > > > > > in_format = in_frames_ctx->sw_format; > > > > out_format = (s->format == AV_PIX_FMT_NONE) ? in_format : > > > > s->format; > > > > > > > > @@ -200,9 +203,13 @@ static int init_out_pool(AVFilterContext *ctx, > > > > out_frames_ctx = (AVHWFramesContext*)outlink- > >hw_frames_ctx- > > > >data; > > > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > > > > > + /* work around a bug in MSDK where VPP processing hangs under > > > > + certain > > > > conditions */ > > > > + if (in_frames_ctx->height == out_height) > > > > + height_align_adjust = 1; > > > > + > > > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > > > out_frames_ctx->width = FFALIGN(out_width, 16); > > > > - out_frames_ctx->height = FFALIGN(out_height, 16); > > > > + out_frames_ctx->height = FFALIGN(out_height + > > > > height_align_adjust, 16); > > > > out_frames_ctx->sw_format = out_format; > > > > out_frames_ctx->initial_pool_size = 4; > > > > > > > > -- > > > > 2.26.2.windows.1 > > > > > > > > > > > patch seems to be manually edited and cannot be applied automatically. > > > > > > During my tests, I couldn't see any change of behavior with and > > > without patch, more details needed for patch justification. > > > > Well, before talking about the patch - the question is whether you can > > reproduce the hang with the video file I sent you and the command line > > above? > > > > It should be reproducible with drivers corresponding to MSDK 1.31 I > > haven't tried with the latest ones (1.32). > > > > Exact driver version is more important than MSDK API version, as there can > be the same MSDK API version across different versions of GPU driver. > > No hang is visible with the latest drivers. Hi Max, thanks for replying. Intel Driver Numbers are difficult to understand. At the low-level it's those numbers: "DeviceName": "\\\\.\\DISPLAY5", "DirectXType": "DX9", "Description": "Intel(R) HD Graphics 530", "Driver": "igdumdim64.dll", "DeviceId": 6418, "VendorId": 32902, "DriverVersionMajor": 1703956, "DriverVersionMinor": 6561470, "SubSysId": 2257850435, "DeviceGuid": "{d7b78e66-5a52-11cf-4d6d-f0a6bdc2d735}", "ApiVersionMajor": 1, "ApiVersionMinor": 31
> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Max Dmitrichenko > Sent: Saturday, June 6, 2020 2:54 PM > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter/qsvvpp: Work around a bug > in MSDK where VPP processing hangs under certain conditions > > On Sat, Jun 6, 2020 at 7:29 AM Soft Works <softworkz@hotmail.com> wrote: > > > > > > > > -----Original Message----- > > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > > Max Dmitrichenko > > > Sent: Friday, June 5, 2020 3:09 PM > > > To: FFmpeg development discussions and patches <ffmpeg- > > > devel@ffmpeg.org> > > > Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter/qsvvpp: Work around > > > a bug in MSDK where VPP processing hangs under certain conditions > > > > > > On Mon, May 25, 2020 at 12:40 AM Soft Works > <softworkz@hotmail.com> > > > wrote: > > > > > > > These are: > > > > - Dimensions are already aligned (e.g. 1920x800) > > > > - No scaling is done > > > > - Color format conversion (e.g. 10bit to 8bit) > > > > > > > > Example command: > > > > ffmpeg -c:v hevc_qsv -hwaccel qsv -i hevc_10bit_1920_800.mkv > > > > -filter_complex "scale_qsv=format=nv12" -c:v h264_qsv out.mkv > > > > > > > > Fix: > > > > - Increase the frame height to the next alignment value > > > > > > > > V2: > > > > - removed empty line > > > > - removed duplicated line > > > > --- > > > > libavfilter/qsvvpp.c | 7 ++++++- > > > > libavfilter/vf_scale_qsv.c | 9 ++++++++- > > > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index > > > > 1bbb7a7e68..98d2353d1c 100644 > > > > --- a/libavfilter/qsvvpp.c > > > > +++ b/libavfilter/qsvvpp.c > > > > @@ -420,6 +420,7 @@ static int init_vpp_session(AVFilterContext > > > > *avctx, QSVVPPContext *s) > > > > mfxHandleType handle_type; > > > > mfxVersion ver; > > > > mfxIMPL impl; > > > > + int height_align_adjust = 0; > > > > int ret, i; > > > > > > > > if (inlink->hw_frames_ctx) { > > > > @@ -463,9 +464,13 @@ static int init_vpp_session(AVFilterContext > > > > *avctx, QSVVPPContext *s) > > > > out_frames_ctx = (AVHWFramesContext *)out_frames_ref- > >data; > > > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > > > > > + /* work around a bug in MSDK where VPP processing hangs > > > > + under > > > > certain conditions */ > > > > + if (inlink->h == outlink->h) > > > > + height_align_adjust = 1; > > > > + > > > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > > > out_frames_ctx->width = FFALIGN(outlink->w, 32); > > > > - out_frames_ctx->height = FFALIGN(outlink->h, 32); > > > > + out_frames_ctx->height = FFALIGN(outlink->h + > > > > height_align_adjust, 32); > > > > out_frames_ctx->sw_format = s->out_sw_format; > > > > out_frames_ctx->initial_pool_size = 64; > > > > if (avctx->extra_hw_frames > 0) diff --git > > > > a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index > > > > 5259104a4f..303d2101a9 100644 > > > > --- a/libavfilter/vf_scale_qsv.c > > > > +++ b/libavfilter/vf_scale_qsv.c > > > > @@ -181,8 +181,10 @@ static int init_out_pool(AVFilterContext *ctx, > > > > AVQSVFramesContext *out_frames_hwctx; > > > > enum AVPixelFormat in_format; > > > > enum AVPixelFormat out_format; > > > > + int height_align_adjust = 0; > > > > int i, ret; > > > > > > > > /* check that we have a hw context */ > > > > if (!ctx->inputs[0]->hw_frames_ctx) { > > > > av_log(ctx, AV_LOG_ERROR, "No hw context provided on > > > > input\n"); @@ -191,6 +193,7 @@ static int > > > > init_out_pool(AVFilterContext > > > *ctx, > > > > in_frames_ctx = > > > > (AVHWFramesContext*)ctx->inputs[0]->hw_frames_ctx->data; > > > > in_frames_hwctx = in_frames_ctx->hwctx; > > > > > > > > in_format = in_frames_ctx->sw_format; > > > > out_format = (s->format == AV_PIX_FMT_NONE) ? in_format : > > > > s->format; > > > > > > > > @@ -200,9 +203,13 @@ static int init_out_pool(AVFilterContext *ctx, > > > > out_frames_ctx = (AVHWFramesContext*)outlink- > >hw_frames_ctx- > > > >data; > > > > out_frames_hwctx = out_frames_ctx->hwctx; > > > > > > > > + /* work around a bug in MSDK where VPP processing hangs under > > > > + certain > > > > conditions */ > > > > + if (in_frames_ctx->height == out_height) > > > > + height_align_adjust = 1; > > > > + > > > > out_frames_ctx->format = AV_PIX_FMT_QSV; > > > > out_frames_ctx->width = FFALIGN(out_width, 16); > > > > - out_frames_ctx->height = FFALIGN(out_height, 16); > > > > + out_frames_ctx->height = FFALIGN(out_height + > > > > height_align_adjust, 16); > > > > out_frames_ctx->sw_format = out_format; > > > > out_frames_ctx->initial_pool_size = 4; > > > > > > > > -- > > > > 2.26.2.windows.1 > > > > > > > > > > > patch seems to be manually edited and cannot be applied automatically. > > > > > > During my tests, I couldn't see any change of behavior with and > > > without patch, more details needed for patch justification. > > > > Well, before talking about the patch - the question is whether you can > > reproduce the hang with the video file I sent you and the command line > > above? > > > > It should be reproducible with drivers corresponding to MSDK 1.31 I > > haven't tried with the latest ones (1.32). > > > > Exact driver version is more important than MSDK API version, as there can > be the same MSDK API version across different versions of GPU driver. > > No hang is visible with the latest drivers. Hi Max, thanks for replying. Intel Driver Numbers are difficult to understand. At the low-level it's those numbers: "DeviceName": "\\\\.\\DISPLAY5", "DirectXType": "DX9", "Description": "Intel(R) HD Graphics 530", "Driver": "igdumdim64.dll", "DeviceId": 6418, "VendorId": 32902, "DriverVersionMajor": 1703956, "DriverVersionMinor": 6561470, "SubSysId": 2257850435, "DeviceGuid": "{d7b78e66-5a52-11cf-4d6d-f0a6bdc2d735}", "ApiVersionMajor": 1, "ApiVersionMinor": 31 Intel Graphics Command Center shows: 26.20.100.7870 Intel Graphics Command Center also says "You're using the most current driver". I looked up the versions from one of the reporting users: 'Intel(R) HD Graphics 520' Id:6422 (Driver: 1703956.6561585, Vendor: 32902, SDK Version: 1.31) Please let me know when you need anything else. Thanks, softworkz
diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index 1bbb7a7e68..98d2353d1c 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -420,6 +420,7 @@ static int init_vpp_session(AVFilterContext *avctx, QSVVPPContext *s) mfxHandleType handle_type; mfxVersion ver; mfxIMPL impl; + int height_align_adjust = 0; int ret, i; if (inlink->hw_frames_ctx) { @@ -463,9 +464,13 @@ static int init_vpp_session(AVFilterContext *avctx, QSVVPPContext *s) out_frames_ctx = (AVHWFramesContext *)out_frames_ref->data; out_frames_hwctx = out_frames_ctx->hwctx; + /* work around a bug in MSDK where VPP processing hangs under certain conditions */ + if (inlink->h == outlink->h) + height_align_adjust = 1; + out_frames_ctx->format = AV_PIX_FMT_QSV; out_frames_ctx->width = FFALIGN(outlink->w, 32); - out_frames_ctx->height = FFALIGN(outlink->h, 32); + out_frames_ctx->height = FFALIGN(outlink->h + height_align_adjust, 32); out_frames_ctx->sw_format = s->out_sw_format; out_frames_ctx->initial_pool_size = 64; if (avctx->extra_hw_frames > 0) diff --git a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index 5259104a4f..303d2101a9 100644 --- a/libavfilter/vf_scale_qsv.c +++ b/libavfilter/vf_scale_qsv.c @@ -181,8 +181,10 @@ static int init_out_pool(AVFilterContext *ctx, AVQSVFramesContext *out_frames_hwctx; enum AVPixelFormat in_format; enum AVPixelFormat out_format; + int height_align_adjust = 0; int i, ret; /* check that we have a hw context */ if (!ctx->inputs[0]->hw_frames_ctx) { av_log(ctx, AV_LOG_ERROR, "No hw context provided on input\n"); @@ -191,6 +193,7 @@ static int init_out_pool(AVFilterContext *ctx,