From patchwork Thu Mar 22 15:05:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhong Li X-Patchwork-Id: 8101 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp940845jad; Thu, 22 Mar 2018 08:08:04 -0700 (PDT) X-Google-Smtp-Source: AG47ELu/MNOyQ0wEPLFDXyOcFX56O1LufxJ0dwmtBDbKv1133upCN/c3eXiTdoOGVx2Two0xayYk X-Received: by 10.223.144.41 with SMTP id h38mr9030139wrh.60.1521731283974; Thu, 22 Mar 2018 08:08:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521731283; cv=none; d=google.com; s=arc-20160816; b=TWCtPqfK1qPbwXWJvsOvx2hbJ/dJHZGc6kMV9QK7MGSHeERCBWcSJWFeqHWHqiKvBU LQKzu+dkrCIO/spxL1/2jA5VICNyk4HdMMFUhDgu9NkNxhFltKwOiJYQPVW0Gcu2dYoJ DwwUt12ePz+PET8Rtps5kAOiUlML9s20dPsVojA5gJT28xSjVblPeHCoBrvcNNlOpHQI hx+1xYIL7EXNMuDmRuNUem/yQn55Zj9unBs1ZToAeAp2B0dO1nN5R0NWRj/uqoUu3MCL bGjYCvhPBrv4vb830hNA4Cri9rX0LSSdZ+oMP9rZiE7Z3fJhljCvrUEUAJJv1ZOaCYQC q8oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:delivered-to :arc-authentication-results; bh=tvCErfznCieWzuWtDWQ5zM/S3Eno4wdu6Oyn1UkyERY=; b=W2rpAS6wZMUuc6GNYs6TDIcQlnJa7VsHkEA+C1aVpnIlOXV1suRB3g+5nEHhDTXmds tAykKY2SWFU7Ov2Qyrnf4+PihCbIemHSg8bnQ6Yv/gtt7qRZ2hZxJhnUeNSD/lJ0Libe DWw0L5xvJtYsZbw17EbEQu2xh3xsBZGkntmK9+Q5xyKJ1pU8Ygc8dE6mBV7ZLnqETRuk b2RHWzWeEmwp+oj0i3+XOpJapsm79zDQ9gjb0dmBaPJv/V3Vjxzy89Zof+MFEs7I+ERR fnJ2m2MDPp/x3dqwTqvTib4j3WJcJ6ejlE/qTen15unwbabsd7Y01+aq4D6EsdwbNPiB q3kw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j14si4634527wmf.98.2018.03.22.08.08.03; Thu, 22 Mar 2018 08:08:03 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A106A689C92; Thu, 22 Mar 2018 17:07:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0CE6768996F for ; Thu, 22 Mar 2018 17:07:39 +0200 (EET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Mar 2018 08:07:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,345,1517904000"; d="scan'208";a="37217057" Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.13.18]) by orsmga003.jf.intel.com with ESMTP; 22 Mar 2018 08:07:52 -0700 From: Zhong Li To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Mar 2018 23:05:32 +0800 Message-Id: <1521731134-24618-1-git-send-email-zhong.li@intel.com> X-Mailer: git-send-email 1.8.3.1 Subject: [FFmpeg-devel] [PATCH 1/3] lavc/qsvdec: set complete_frame flags for progressive picture X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zhong Li MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 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 --- libavcodec/qsvdec.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 45bedf9..e0c5579 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -318,6 +318,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)); @@ -497,6 +499,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 || FFALIGN(q->parser->coded_width, 16) != FFALIGN(avctx->coded_width, 16) || @@ -521,7 +524,6 @@ int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q, avctx->height = q->parser->height; avctx->coded_width = FFALIGN(q->parser->coded_width, 16); avctx->coded_height = FFALIGN(q->parser->coded_height, 16); - avctx->field_order = q->parser->field_order; avctx->level = q->avctx_internal->level; avctx->profile = q->avctx_internal->profile;