From patchwork Thu Mar 22 15:05:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhong Li X-Patchwork-Id: 8103 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp941192jad; Thu, 22 Mar 2018 08:08:21 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+KOgVE/9QoBoCJZp9nfyNGIhNNhwzUZ+Mr/xRd9RlFnWZDaErPckV/kCRQAbl70Ru0sm+Z X-Received: by 10.28.40.4 with SMTP id o4mr2116743wmo.44.1521731301748; Thu, 22 Mar 2018 08:08:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521731301; cv=none; d=google.com; s=arc-20160816; b=zcwmKEVwUsS6zbLnhvRaeku8iq/s6Y7Wtw+3g01OdMwpYbpc3DUj+uH1k92NfVHbLP xB63k2Ad2pg4KjmP7cNTTUKJV4w8KIwbdFxXPwjmn3eEFND7IOrXeTAmm0PC+Kc4G2Jr TvOlU1DcnXc5pNX2+96QyZ0z0+G8wRiISaiABmKvF6j6EiJd26bekLDpgMUkA6hbdKvd ihgeunt9lKCfJjTiPvmYbJFD7LWBB5qpLWuPIBEdEIW5CA2k+kkqLW8wqQdHKffdKjdW pL+SbYwnm7nmmoEFO30qE5dpowZPJwl/CxmZjneGpVVf6J59vbDtvDidvIZgMH5H2323 CZMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:delivered-to:arc-authentication-results; bh=CkV1Jdi5qIa1OkJMiFmwwUDQgcJSF+gZcEpKdRI+zVk=; b=n3X1lQiXbT6rsmyHwKtvPFh4qYT95PY1dBbqZg0bdlyOczW6IHvPpp5QmUpVCiuwqz 8wjqpR7IoXirXuBVOZkond9QjCcb4ySPY/uXp9PqwpcrftoP3ZoECvK7RQPniAJ1BVog /4ikAvVbONa57klp3aHssqNMPTgvbdOxzIqYuUd0zaXlDhhO+e0Dde+zvJM9SlTDsRTc A4X1OT5cDq4P/482D9Nkr3b12PtmfeAUlp3lSHtwFLS0aaDap59sgr9vjDqDN2PaDBEO 9BKO6EfGHPH4fghruyYqPVZ3VCZrfH9KNs5Pkc+8WtS0OrBnQ8x2veGWUOXYCUD/gH0i lhHA== 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 p5si5301609wrc.266.2018.03.22.08.08.21; Thu, 22 Mar 2018 08:08:21 -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 EA689689DB4; Thu, 22 Mar 2018 17:07:52 +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 56838689D94 for ; Thu, 22 Mar 2018 17:07:46 +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:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,345,1517904000"; d="scan'208";a="37217067" 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:54 -0700 From: Zhong Li To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Mar 2018 23:05:34 +0800 Message-Id: <1521731134-24618-3-git-send-email-zhong.li@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1521731134-24618-1-git-send-email-zhong.li@intel.com> References: <1521731134-24618-1-git-send-email-zhong.li@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] lavc/qsvdec: expose frame pic_type 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 , ChaoX A Liu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Currently pict_type are unset. Add an extra param to fetch the picture type from qsv decoder v2: remove the key_frame setting because the judgement “key frame is equal to IDR frame” only suitable for H264. For HEVC, all IRAP frames are key frames, and other codecs have no IDR frame. Signed-off-by: ChaoX A Liu Signed-off-by: Zhong Li --- libavcodec/qsv.c | 24 ++++++++++++++++++++++++ libavcodec/qsv_internal.h | 4 ++++ libavcodec/qsvdec.c | 6 ++++++ 3 files changed, 34 insertions(+) diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index 5217adf..2362e55 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -195,6 +195,30 @@ int ff_qsv_find_surface_idx(QSVFramesContext *ctx, QSVFrame *frame) return AVERROR_BUG; } +enum AVPictureType ff_qsv_map_pictype(int mfx_pic_type) +{ + enum AVPictureType type = AV_PICTURE_TYPE_NONE; + switch (mfx_pic_type & 0x7) { + case MFX_FRAMETYPE_I: + if (mfx_pic_type & MFX_FRAMETYPE_S) + type = AV_PICTURE_TYPE_SI; + else + type = AV_PICTURE_TYPE_I; + break; + case MFX_FRAMETYPE_B: + type = AV_PICTURE_TYPE_B; + break; + case MFX_FRAMETYPE_P: + if (mfx_pic_type & MFX_FRAMETYPE_S) + type = AV_PICTURE_TYPE_SP; + else + type = AV_PICTURE_TYPE_P; + break; + } + + return type; +} + static int qsv_load_plugins(mfxSession session, const char *load_plugins, void *logctx) { diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h index c030550..b576f53f 100644 --- a/libavcodec/qsv_internal.h +++ b/libavcodec/qsv_internal.h @@ -52,6 +52,9 @@ typedef struct QSVFrame { mfxFrameSurface1 surface; mfxEncodeCtrl enc_ctrl; + mfxExtDecodedFrameInfo dec_info; + mfxExtBuffer *ext_param; + int queued; int used; @@ -86,6 +89,7 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id); int ff_qsv_profile_to_mfx(enum AVCodecID codec_id, int profile); int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc); +enum AVPictureType ff_qsv_map_pictype(int mfx_pic_type); int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session, const char *load_plugins); diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index e0c5579..63e2733 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -232,6 +232,11 @@ static int alloc_frame(AVCodecContext *avctx, QSVContext *q, QSVFrame *frame) frame->surface.Data.MemId = &q->frames_ctx.mids[ret]; } + frame->surface.Data.ExtParam = &frame->ext_param; + frame->surface.Data.NumExtParam = 1; + frame->ext_param = (mfxExtBuffer*)&frame->dec_info; + frame->dec_info.Header.BufferId = MFX_EXTBUFF_DECODED_FRAME_INFO; + frame->dec_info.Header.BufferSz = sizeof(frame->dec_info); frame->used = 1; @@ -418,6 +423,7 @@ FF_ENABLE_DEPRECATION_WARNINGS outsurf->Info.PicStruct & MFX_PICSTRUCT_FIELD_TFF; frame->interlaced_frame = !(outsurf->Info.PicStruct & MFX_PICSTRUCT_PROGRESSIVE); + frame->pict_type = ff_qsv_map_pictype(out_frame->dec_info.FrameType); /* update the surface properties */ if (avctx->pix_fmt == AV_PIX_FMT_QSV)