Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: "Xiang, Haihao" <haihao.xiang-at-intel.com@ffmpeg.org>
To: "ffmpeg-devel@ffmpeg.org" <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v2 1/3] lavc/qsv: allow to add more parameter buffers to QSV frame
Date: Thu, 27 Jan 2022 05:37:01 +0000
Message-ID: <026c35d78d592604e3eb4f75ae07815e372bedba.camel@intel.com> (raw)
In-Reply-To: <20220124082455.30931-1-haihao.xiang@intel.com>

On Mon, 2022-01-24 at 16:24 +0800, Xiang, Haihao wrote:
> From: Haihao Xiang <haihao.xiang@intel.com>
> 
> Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
> ---
> v2: rebased the patchset against the latest FFmpeg and added code to
> make sure the corresponding extra parameter buffer is added for AV1
> only.
> 
>  libavcodec/qsv.c          | 27 +++++++++++++++++++++++++++
>  libavcodec/qsv_internal.h |  8 +++++++-
>  libavcodec/qsvdec.c       |  8 +++++---
>  3 files changed, 39 insertions(+), 4 deletions(-)
> 
> diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
> index 9d08485c92..1a432dbd82 100644
> --- a/libavcodec/qsv.c
> +++ b/libavcodec/qsv.c
> @@ -828,3 +828,30 @@ int ff_qsv_close_internal_session(QSVSession *qs)
>  #endif
>      return 0;
>  }
> +
> +void ff_qsv_frame_add_ext_param (AVCodecContext *avctx, QSVFrame *frame,
> +                                 mfxExtBuffer * param)
> +{
> +    int i;
> +
> +    for (i = 0; i < frame->num_ext_params; i++) {
> +        mfxExtBuffer *ext_buffer = frame->ext_param[i];
> +
> +        if (ext_buffer->BufferId == param->BufferId) {
> +            av_log(avctx, AV_LOG_WARNING, "A buffer with the same type has
> been "
> +                   "added\n");
> +            return;
> +        }
> +    }
> +
> +    if (frame->num_ext_params < QSV_MAX_FRAME_EXT_PARAMS) {
> +        frame->ext_param[frame->num_ext_params] = param;
> +        frame->num_ext_params++;
> +        frame->surface.Data.NumExtParam = frame->num_ext_params;
> +    } else {
> +        av_log(avctx, AV_LOG_WARNING, "Ignore this extra buffer because do
> not "
> +               "have enough space\n");
> +    }
> +
> +
> +}
> diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h
> index fe9d5319c4..6a38e87d23 100644
> --- a/libavcodec/qsv_internal.h
> +++ b/libavcodec/qsv_internal.h
> @@ -52,6 +52,8 @@
>  
>  #define QSV_MAX_ENC_PAYLOAD 2       // # of mfxEncodeCtrl payloads supported
>  
> +#define QSV_MAX_FRAME_EXT_PARAMS 4
> +
>  #define QSV_VERSION_ATLEAST(MAJOR, MINOR)   \
>      (MFX_VERSION_MAJOR > (MAJOR) ||         \
>       MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR))
> @@ -74,7 +76,8 @@ typedef struct QSVFrame {
>      mfxFrameSurface1 surface;
>      mfxEncodeCtrl enc_ctrl;
>      mfxExtDecodedFrameInfo dec_info;
> -    mfxExtBuffer *ext_param;
> +    mfxExtBuffer *ext_param[QSV_MAX_FRAME_EXT_PARAMS];
> +    int num_ext_params;
>  
>      mfxPayload *payloads[QSV_MAX_ENC_PAYLOAD]; ///< used for enc_ctrl.Payload
>  
> @@ -138,4 +141,7 @@ int ff_qsv_init_session_frames(AVCodecContext *avctx,
> mfxSession *session,
>  
>  int ff_qsv_find_surface_idx(QSVFramesContext *ctx, QSVFrame *frame);
>  
> +void ff_qsv_frame_add_ext_param(AVCodecContext *avctx, QSVFrame *frame,
> +                                mfxExtBuffer *param);
> +
>  #endif /* AVCODEC_QSV_INTERNAL_H */
> diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
> index d9e0fef1f1..783d252002 100644
> --- a/libavcodec/qsvdec.c
> +++ b/libavcodec/qsvdec.c
> @@ -423,11 +423,13 @@ 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->surface.Data.ExtParam    = frame->ext_param;
> +    frame->surface.Data.NumExtParam = 0;
> +    frame->num_ext_params           = 0;
>      frame->dec_info.Header.BufferId = MFX_EXTBUFF_DECODED_FRAME_INFO;
>      frame->dec_info.Header.BufferSz = sizeof(frame->dec_info);
> +    ff_qsv_frame_add_ext_param(avctx, frame, (mfxExtBuffer *)&frame-
> >dec_info);
>  
>      frame->used = 1;

Will apply

-Haihao

>  
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  parent reply	other threads:[~2022-01-27  5:37 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-24  8:24 Xiang, Haihao
2022-01-24  8:24 ` [FFmpeg-devel] [PATCH v2 2/3] lavc/qsvdec: track the runtime session version Xiang, Haihao
2022-01-24  8:24 ` [FFmpeg-devel] [PATCH v2 3/3] lavc/qsvdec: export AVFilmGrainParams side data Xiang, Haihao
2022-01-27  5:37 ` Xiang, Haihao [this message]
2022-01-29 14:30   ` [FFmpeg-devel] [PATCH v2 1/3] lavc/qsv: allow to add more parameter buffers to QSV frame Timo Rothenpieler
2022-01-29 14:41     ` Timo Rothenpieler
2022-01-30  1:02       ` Xiang, Haihao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=026c35d78d592604e3eb4f75ae07815e372bedba.camel@intel.com \
    --to=haihao.xiang-at-intel.com@ffmpeg.org \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git