Qsv encoder only support input P010 and nv12 format directly from system memory. For other format, we need to upload frame to device memory and input qsv format to encoder. Now add other system memory format support to qsv encoder.
Signed-off-by: Wenbin Chen <wenbin.c...@intel.com> --- libavcodec/qsvenc.c | 30 ++++-------------------------- libavcodec/qsvenc_hevc.c | 2 ++ 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 40d60cde3c..55cce96022 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1602,32 +1602,10 @@ static int submit_frame(QSVEncContext *q, const AVFrame *frame, else if (frame->repeat_pict == 4) qf->surface.Info.PicStruct |= MFX_PICSTRUCT_FRAME_TRIPLING; - 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; - - case AV_PIX_FMT_X2RGB10: - case AV_PIX_FMT_BGRA: - qf->surface.Data.B = qf->frame->data[0]; - qf->surface.Data.G = qf->frame->data[0] + 1; - qf->surface.Data.R = qf->frame->data[0] + 2; - qf->surface.Data.A = qf->frame->data[0] + 3; - break; - - default: - /* should not reach here */ - av_assert0(0); - break; + ret = ff_qsv_map_frame_to_surface(qf->frame, &qf->surface); + if (ret < 0) { + av_log(q->avctx, AV_LOG_ERROR, "map frame to surface failed.\n"); + return ret; } } qf->surface.Data.TimeStamp = av_rescale_q(frame->pts, q->avctx->time_base, (AVRational){1, 90000}); diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index ade546d4ca..c8d58f9247 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -303,6 +303,8 @@ const AVCodec ff_hevc_qsv_encoder = { .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, + AV_PIX_FMT_YUYV422, + AV_PIX_FMT_Y210, AV_PIX_FMT_QSV, #if QSV_VERSION_ATLEAST(1, 17) AV_PIX_FMT_BGRA, -- 2.32.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".