[FFmpeg-devel] [PATCH] lavc/qsvenc: set base address for V plane

Xiang, Haihao haihao.xiang at intel.com
Tue Dec 28 10:37:43 EET 2021


On Mon, 2021-12-13 at 14:40 +0800, Haihao Xiang wrote:
> The SDK checks Data.V when using system memory for VP9 encoding. This
> fixed the error below:
> 
> $ ffmpeg -qsv_device /dev/dri/renderD129 -f lavfi -i yuvtestsrc -c:v
> vp9_qsv -f null -
> 
> [vp9_qsv @ 0x55b8387cbe90] Error during encoding: NULL pointer (-2)
> Video encoding failed
> ---
>  libavcodec/qsvenc.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 26a94cd419..7431ccfca5 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -1389,8 +1389,23 @@ static int submit_frame(QSVEncContext *q, const AVFrame
> *frame,
>          qf->surface.Data.PitchLow  = qf->frame->linesize[0];
>          qf->surface.Data.Y         = qf->frame->data[0];
>          qf->surface.Data.UV        = qf->frame->data[1];
> -    }
>  
> +        /* The SDK checks Data.V when using system memory for VP9 encoding */
> +        switch (frame->format) {
> +        case AV_PIX_FMT_NV12:
> +            qf->surface.Data.V     = qf->surface.Data.UV + 1;
> +            break;
> +
> +        case AV_PIX_FMT_P010:
> +            qf->surface.Data.V     = qf->surface.Data.UV + 2;
> +            break;
> +
> +        default:
> +            /* should not reach here */
> +            av_assert0(0);
> +            break;
> +        }
> +    }
>      qf->surface.Data.TimeStamp = av_rescale_q(frame->pts, q->avctx-
> >time_base, (AVRational){1, 90000});
>  
>      *new_frame = qf;

Will apply if no objection

-Haihao



More information about the ffmpeg-devel mailing list