Ping? > -----Original Message----- > From: Li, Zhong > Sent: Thursday, March 22, 2018 10:42 PM > To: libav-devel@libav.org > Cc: Li, Zhong <zhong...@intel.com> > Subject: [PATCH V2 1/3] lavc/qsvdec: set complete_frame flags for > progressive picture > > Set the flag MFX_BITSTREAM_COMPLETE_FRAME when it is a progressive > picture. > This can fix vc1 decoding segment fault issues because can't set the start > code correctly. > See: ./avconv -hwaccel qsv -c:v vc1_qsv -i /fate-suite/vc1/SA00040.vc1 -vf > "hwdownload, format=nv12" -f rawvideo /dev/null > > v2: fix some h264 interlaced clips regression a. field_order of some h264 > interlaced video (e.g: cama3_vtc_b.avc) is marked as AV_FIELD_UNKNOWN > in h264_parser.c. This is not a completed frames. > So only set the MFX_BITSTREAM_COMPLETE_FRAME when it is > progressive. > b. some clips have both progressive and interlaced frames > (e.g.CAPAMA3_Sand_F.264), > the parsed field_order maybe changed druing the decoding progress. > > This patch has been verified for other codecs(mpeg2/hevc/vp8). > > Signed-off-by: Zhong Li <zhong...@intel.com> > --- > libavcodec/qsvdec.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index > c74ec68..8148beb 100644 > --- a/libavcodec/qsvdec.c > +++ b/libavcodec/qsvdec.c > @@ -321,6 +321,8 @@ static int qsv_decode(AVCodecContext *avctx, > QSVContext *q, > bs.DataLength = avpkt->size; > bs.MaxLength = bs.DataLength; > bs.TimeStamp = avpkt->pts; > + if (avctx->field_order == AV_FIELD_PROGRESSIVE) > + bs.DataFlag |= MFX_BITSTREAM_COMPLETE_FRAME; > } > > sync = av_mallocz(sizeof(*sync)); > @@ -509,6 +511,7 @@ int ff_qsv_process_data(AVCodecContext *avctx, > QSVContext *q, > pkt->data, pkt->size, pkt->pts, pkt->dts, > pkt->pos); > > + avctx->field_order = q->parser->field_order; > /* TODO: flush delayed frames on reinit */ > if (q->parser->format != q->orig_pix_fmt || > q->parser->coded_width != avctx->coded_width || @@ -533,7 > +536,6 @@ int ff_qsv_process_data(AVCodecContext *avctx, QSVContext > *q, > avctx->height = q->parser->height; > avctx->coded_width = q->parser->coded_width; > avctx->coded_height = q->parser->coded_height; > - avctx->field_order = q->parser->field_order; > avctx->level = q->avctx_internal->level; > avctx->profile = q->avctx_internal->profile; > > -- > 1.8.3.1
_______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel