On Tue, 2021-03-23 at 06:45 +0000, Chen, Wenbin wrote: > > -----Original Message----- > > From: Xiang, Haihao <haihao.xi...@intel.com> > > Sent: Tuesday, March 23, 2021 12:10 PM > > To: ffmpeg-devel@ffmpeg.org > > Cc: Chen, Wenbin <wenbin.c...@intel.com> > > Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvdec: use the param from > > decodeHeader to configure surface > > > > On Mon, 2021-03-22 at 14:31 +0800, wenbin.c...@intel.com wrote: > > > From: "Chen,Wenbin" <wenbin.c...@intel.com> > > > > > > MSDK recognizes both yuv420p10 and yuv420p9 as MFX_FOURCC_P010, > > > > but param > > > are different. When decode yuv420p9 video, ffmpeg-qsv will use > > > yuv420p10le to configure surface which is different with param from > > > DecoderHeader and this will lead to error. Now change it use > > > param from decoderHeader to configure surface. > > > > > > Both yuv420p10 and yuv420p9 have 3 planes ( > > https://github.com/FFmpeg/FFmpeg/blob/master/libavutil/pixdesc.c#L1359- > > L1406) , > > but MFX_FOURCC_P010 has 2 planes only. MSDK doesn't recognizes > > yuv420p10 and > > yuv420p9 as MFX_FOURCC_P010. FFmpeg-qsv uses p010le instead of > > yuv420p10le to > > configure surface for 10bit video. > > > > Sorry, I didn't describe the problem well. I mean when MSDK decodeHeader a > 9bit video > It will return MFX_FOURCC_P010, but its frameInfo is 9bit. However FFmpeg-qsv > will use P010's parameter > to configure surface which will be 10bit, and if ffmpeg-qsv send 10bit surface > to decode 9bit video MSDK will report an error. >
So it will use yuv420p10le for a 9bit video, right? A potential issue here is the depth info will be lost in the pipeline, a filter after qsv decoder will take it as 10bit frame instead of 9bit frame. Thanks Haihao > > > > > > > > Signed-off-by Wenbin Chen <wenbin.c...@intel.com> > > > --- > > > libavcodec/qsvdec.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c > > > index 569ccd4fba..3ab48ea7a2 100644 > > > --- a/libavcodec/qsvdec.c > > > +++ b/libavcodec/qsvdec.c > > > @@ -309,13 +309,13 @@ static int alloc_frame(AVCodecContext *avctx, > > > > QSVContext > > > *q, QSVFrame *frame) > > > if (frame->frame->format == AV_PIX_FMT_QSV) { > > > frame->surface = *(mfxFrameSurface1*)frame->frame->data[3]; > > > } else { > > > - frame->surface.Info = q->frame_info; > > > - > > > frame->surface.Data.PitchLow = frame->frame->linesize[0]; > > > frame->surface.Data.Y = frame->frame->data[0]; > > > frame->surface.Data.UV = frame->frame->data[1]; > > > } > > > > > > + frame->surface.Info = q->frame_info; > > > + > > > if (q->frames_ctx.mids) { > > > ret = ff_qsv_find_surface_idx(&q->frames_ctx, frame); > > > if (ret < 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".