Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Mark Thompson <sw@jkqxz.net>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH 2/9] libavcodec: add amfdec.
Date: Wed, 14 Feb 2024 23:41:49 +0000
Message-ID: <0fde4913-2006-4176-a2c7-2e06be1a924d@jkqxz.net> (raw)
In-Reply-To: <20240214015515.1027-2-ovchinnikov.dmitrii@gmail.com>

On 14/02/2024 01:55, Dmitrii Ovchinnikov wrote:
> From: Evgeny Pavlov <lucenticus@gmail.com>
> 
> Added AMF based h264, hevc, av1 decoders.
> Co-authored-by: Dmitrii Ovchinnikov <ovchinnikov.dmitrii@gmail.com>
> ---
>   libavcodec/Makefile     |   4 +-
>   libavcodec/allcodecs.c  |   3 +
>   libavcodec/amfdec.c     | 667 ++++++++++++++++++++++++++++++++++++++++
>   libavcodec/amfdec.h     |  75 +++++
>   libavcodec/h264_slice.c |   3 +
>   libavcodec/h264dec.c    |   3 +
>   libavcodec/hwconfig.h   |   2 +
>   7 files changed, 755 insertions(+), 2 deletions(-)
>   create mode 100644 libavcodec/amfdec.c
>   create mode 100644 libavcodec/amfdec.h
> 
> ...
> +
> +static int amf_decode_init(AVCodecContext *avctx)
> +{
> +    AvAmfDecoderContext *ctx = avctx->priv_data;
> +    int ret;
> +    enum AVPixelFormat pix_fmts[3] = {
> +        AV_PIX_FMT_AMF,
> +        avctx->pix_fmt,
> +        AV_PIX_FMT_NONE };
> +
> +    ret = ff_get_format(avctx, pix_fmts);
> +    if (ret < 0) {
> +        avctx->pix_fmt = AV_PIX_FMT_NONE;
> +    }

I think you've misunderstood how decoder setup works.  AVCodecContext.pix_fmt happens to be set to an initial value in some cases which use libavformat (including the ffmpeg utility), but there is no requirement on the user to do so (see the doxy).  Also all of the format information can change at any moment mid-stream (consider adaptive streaming scenarios).

It is therefore necessary for the decoder to parse the input and determine the intended format before calling the get_format callback, and to do that again whenever the format changes.  Calling it once at the beginning does not work at all.

> ...
> diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
> index 8464a0b34c..d11821194f 100644
> --- a/libavcodec/h264_slice.c
> +++ b/libavcodec/h264_slice.c
> @@ -864,6 +864,9 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
>   #if CONFIG_H264_NVDEC_HWACCEL
>           *fmt++ = AV_PIX_FMT_CUDA;
>   #endif
> +#if CONFIG_H264_AMFDEC_HWACCEL
> +        *fmt++ = AV_PIX_FMT_AMF;
> +#endif
>   #if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
>           if (h->avctx->colorspace != AVCOL_SPC_RGB)
>               *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX;
> diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
> index 9f5893c512..7a2c9eecef 100644
> --- a/libavcodec/h264dec.c
> +++ b/libavcodec/h264dec.c
> @@ -1137,6 +1137,9 @@ const FFCodec ff_h264_decoder = {
>   #if CONFIG_H264_NVDEC_HWACCEL
>                                  HWACCEL_NVDEC(h264),
>   #endif
> +#if CONFIG_H264_AMFDEC_HWACCEL
> +                               HWACCEL_AMFDEC(h264),
> +#endif
>   #if CONFIG_H264_VAAPI_HWACCEL
>                                  HWACCEL_VAAPI(h264),
>   #endif

I don't see any acceleration support here at all, this is entirely an offload decoder.

Thanks,

- Mark
_______________________________________________
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".

  reply	other threads:[~2024-02-14 23:41 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-14  1:55 [FFmpeg-devel] [PATCH 1/9] libavutil: add hwcontext_amf Dmitrii Ovchinnikov
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 2/9] libavcodec: add amfdec Dmitrii Ovchinnikov
2024-02-14 23:41   ` Mark Thompson [this message]
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 3/9] avcodec/amfenc: Fixes the color information in the output Dmitrii Ovchinnikov
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 4/9] avcodec/amfenc: HDR metadata Dmitrii Ovchinnikov
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 5/9] avcodec/amfenc: add 10 bit encoding in av1_amf Dmitrii Ovchinnikov
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 6/9] avcodec/amfenc: add smart access video option Dmitrii Ovchinnikov
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 7/9] libavcodec/amfenc: redesign to use hwcontext_amf Dmitrii Ovchinnikov
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 8/9] avfilter/scale_amf: Add AMF HW scaler & color converter Dmitrii Ovchinnikov
2024-02-14 15:08   ` Timo Rothenpieler
2024-02-14 15:27     ` Evgeny Pavlov
2024-02-14 16:26       ` Dennis Mungai
2024-02-19 11:18         ` Evgeny Pavlov
2024-02-19 14:43           ` Dennis Mungai
2024-02-14  1:55 ` [FFmpeg-devel] [PATCH 9/9] doc/filters: Add documentation for AMF filters Dmitrii Ovchinnikov
2024-02-14  2:56 ` [FFmpeg-devel] [PATCH 1/9] libavutil: add hwcontext_amf James Almer
2024-02-14 16:48   ` Dmitrii Ovchinnikov
2024-02-14 20:56 ` Mark Thompson

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=0fde4913-2006-4176-a2c7-2e06be1a924d@jkqxz.net \
    --to=sw@jkqxz.net \
    --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