Message ID | 20190912035923.69349-1-rodger.combs@gmail.com |
---|---|
State | Withdrawn, archived |
Headers | show |
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Rodger > Combs > Sent: Thursday, September 12, 2019 11:59 AM > To: ffmpeg-devel@ffmpeg.org > Subject: [FFmpeg-devel] [PATCH] lavu/hwcontext_qsv: update crop width/height > when mapping frames > > This fixes an issue where the context could be configured with one resolution, but > incoming frames could have another, and our output AVFrames wouldn't match > the underlying surfaces' resolution, which is usually the value that MFX code uses. > > In particular, this would happen when mapping from DXVA2 decoders, since > DXVA2 aligns the width/height fields in its context to the required alignment for > the particular codec being used, and those values are then propagated into the > QSV context, rather than the crop dimensions. > --- > libavutil/hwcontext_qsv.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index > 8f9838d7d8..fe5a705c19 100644 > --- a/libavutil/hwcontext_qsv.c > +++ b/libavutil/hwcontext_qsv.c > @@ -1031,8 +1031,8 @@ static int qsv_map_to(AVHWFramesContext *dst_ctx, > if (err) > return err; > > - dst->width = src->width; > - dst->height = src->height; > + hwctx->surfaces[i].Info.CropW = dst->width = src->width; > + hwctx->surfaces[i].Info.CropH = dst->height = src->height; > dst->data[3] = (uint8_t*)&hwctx->surfaces[i]; > > return 0; > -- > 2.21.0 Patch looks good. Could you please share detailed command line and clip to reproduce the issue?
This happens with any use of the hwmap filter in the derive_device configuration with input being HEVC decoded via dxva2 with dimensions that aren't 128-pixel-aligned and output being QSV; eg: ffmpeg.exe -codec:0 hevc -hwaccel:0 dxva2 -hwaccel_output_format:0 dxva2_vld test.mkv -filter_complex '[0:0]hwmap=derive_device=qsv[0];[0]scale_qsv=format=nv12[1]' -map[1] -codec:0 h264_qsv output.mkv > On Sep 12, 2019, at 07:59, Li, Zhong <zhong.li@intel.com> wrote: > >> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Rodger >> Combs >> Sent: Thursday, September 12, 2019 11:59 AM >> To: ffmpeg-devel@ffmpeg.org >> Subject: [FFmpeg-devel] [PATCH] lavu/hwcontext_qsv: update crop width/height >> when mapping frames >> >> This fixes an issue where the context could be configured with one resolution, but >> incoming frames could have another, and our output AVFrames wouldn't match >> the underlying surfaces' resolution, which is usually the value that MFX code uses. >> >> In particular, this would happen when mapping from DXVA2 decoders, since >> DXVA2 aligns the width/height fields in its context to the required alignment for >> the particular codec being used, and those values are then propagated into the >> QSV context, rather than the crop dimensions. >> --- >> libavutil/hwcontext_qsv.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index >> 8f9838d7d8..fe5a705c19 100644 >> --- a/libavutil/hwcontext_qsv.c >> +++ b/libavutil/hwcontext_qsv.c >> @@ -1031,8 +1031,8 @@ static int qsv_map_to(AVHWFramesContext *dst_ctx, >> if (err) >> return err; >> >> - dst->width = src->width; >> - dst->height = src->height; >> + hwctx->surfaces[i].Info.CropW = dst->width = src->width; >> + hwctx->surfaces[i].Info.CropH = dst->height = src->height; >> dst->data[3] = (uint8_t*)&hwctx->surfaces[i]; >> >> return 0; >> -- >> 2.21.0 > > Patch looks good. > Could you please share detailed command line and clip to reproduce the issue? > > _______________________________________________ > 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".
diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 8f9838d7d8..fe5a705c19 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -1031,8 +1031,8 @@ static int qsv_map_to(AVHWFramesContext *dst_ctx, if (err) return err; - dst->width = src->width; - dst->height = src->height; + hwctx->surfaces[i].Info.CropW = dst->width = src->width; + hwctx->surfaces[i].Info.CropH = dst->height = src->height; dst->data[3] = (uint8_t*)&hwctx->surfaces[i]; return 0;