[FFmpeg-devel] [PATCH v2] libavcodec/amfenc: Vulkan initialization support for encoder.

Philip Langdale philipl at overt.org
Wed Aug 28 04:34:10 EEST 2019


On Tue, 27 Aug 2019 10:08:43 -0700
Philip Langdale <philipl at overt.org> wrote:

> On 2019-08-08 11:33, OvchinnikovDmitrii wrote:
> > 
> > diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c
> > index 384d8efc92..f66b95645e 100644
> > --- a/libavcodec/amfenc.c
> > +++ b/libavcodec/amfenc.c
> > @@ -213,6 +213,7 @@ static int
> > amf_init_from_dxva2_device(AVCodecContext *avctx,
> > AVDXVA2DeviceContex static int amf_init_context(AVCodecContext
> > *avctx) {
> >      AmfContext *ctx = avctx->priv_data;
> > +    AMFContext1 *context1 = NULL;
> >      AMF_RESULT  res;
> >      av_unused int ret;
> > 
> > @@ -311,8 +312,20 @@ static int amf_init_context(AVCodecContext
> > *avctx) if (res == AMF_OK) {
> >                  av_log(avctx, AV_LOG_VERBOSE, "AMF initialisation
> > succeeded via D3D9.\n");
> >              } else {
> > -                av_log(avctx, AV_LOG_ERROR, "AMF initialisation
> > failed via D3D9: error %d.\n", res);
> > -                return AVERROR(ENOSYS);
> > +                AMFGuid guid = IID_AMFContext1();
> > +                res =
> > ctx->context->pVtbl->QueryInterface(ctx->context, &guid,
> > (void**)&context1);
> > +                AMF_RETURN_IF_FALSE(ctx, res == AMF_OK,
> > AVERROR_UNKNOWN, "CreateContext1() failed with error %d\n", res);
> > +
> > +                res = context1->pVtbl->InitVulkan(context1, NULL);
> > +                context1->pVtbl->Release(context1);
> > +                if (res != AMF_OK) {
> > +                    if (res == AMF_NOT_SUPPORTED)
> > +                        av_log(avctx, AV_LOG_ERROR, "AMF via Vulkan
> > is not supported on the given device.\n");
> > +                    else
> > +                        av_log(avctx, AV_LOG_ERROR, "AMF failed to
> > initialise on the given Vulkan device: %d.\n", res);
> > +                    return AVERROR(ENOSYS);
> > +                }
> > +                av_log(avctx, AV_LOG_VERBOSE, "AMF initialisation
> > succeeded via Vulkan.\n");
> >              }
> >          }
> >      }  
> 
> It's fully contained in the decoder, so it's fine, and strictly better
> than before. However, keep in mind that if we ever follow through on
> adding a Vulkan hwcontext, this would need to be handled in a
> different way - but we'll deal with that when we get there.
> 
> I'll push it when I get a chance later today.

Pushed with changelog and micro bump.

--phil


More information about the ffmpeg-devel mailing list