summaryrefslogtreecommitdiff
path: root/libavcodec/qsvenc.c
diff options
context:
space:
mode:
authorHaihao Xiang <haihao.xiang@intel.com>2021-12-13 14:40:55 +0800
committerHaihao Xiang <haihao.xiang@intel.com>2022-01-05 11:05:06 +0800
commit0d82613b7dcdbe9e51b77f06baa72d5715343b8f (patch)
treea4b34049b19b2db7fc5cbebc133ae7034a34fe72 /libavcodec/qsvenc.c
parenta4289497755386435783774a4f520eb7fc23cbc9 (diff)
lavc/qsvenc: set base address for V plane
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 Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
Diffstat (limited to 'libavcodec/qsvenc.c')
-rw-r--r--libavcodec/qsvenc.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index db6d397068..602436da63 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -1535,8 +1535,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;