diff --git a/doc/general.texi b/doc/general.texi index 26919c9287..3b73e31310 100644 --- a/doc/general.texi +++ b/doc/general.texi @@ -225,6 +225,18 @@ The dispatcher is open source and can be downloaded from with the @code{--enable-libmfx} option and @code{pkg-config} needs to be able to locate the dispatcher's @code{.pc} files. +@section AMD VCE + +FFmpeg can use the AMD Advanced Media Framework library for accelerated H.264 +and HEVC encoding on VCE enabled hardware under Windows. + +To enable support you must obtain the AMF framework header files from +@url{https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git}. + +Create an @code{AMF/} directory in the system include path. +Copy the contents of @code{AMF/amf/public/include/} into that directory. +Then configure FFmpeg with @code{--enable-amf}. + @chapter Supported File Formats, Codecs or Features diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c index f8b68070ae..89a10ff253 100644 --- a/libavcodec/amfenc.c +++ b/libavcodec/amfenc.c @@ -157,7 +157,7 @@ static int amf_init_context(AVCodecContext *avctx) AmfContext *ctx = avctx->priv_data; AMF_RESULT res = AMF_OK; - // confugure AMF logger + // configure AMF logger // the return of these functions indicates old state and do not affect behaviour ctx->trace->pVtbl->EnableWriter(ctx->trace, AMF_TRACE_WRITER_DEBUG_OUTPUT, ctx->log_to_dbg != 0 ); if (ctx->log_to_dbg) @@ -414,7 +414,7 @@ static int amf_copy_buffer(AVCodecContext *avctx, AVPacket *pkt, AMFBuffer *buff return 0; } -// amfenc API implmentation +// amfenc API implementation int ff_amf_encode_init(AVCodecContext *avctx) { AmfContext *ctx = avctx->priv_data; diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index 96e4e952da..2c082e93bd 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -361,7 +361,6 @@ static av_cold int amf_encode_init_h264(AVCodecContext *avctx) static const AVCodecDefault defaults[] = { { "refs", "-1" }, { "aspect", "0" }, - { "sar", "0" }, { "qmin", "-1" }, { "qmax", "-1" }, { "b", "2M" }, @@ -376,7 +375,7 @@ static const AVClass h264_amf_class = { .option = options, .version = LIBAVUTIL_VERSION_INT, }; -//TODO declare as HW encoder when available + AVCodec ff_h264_amf_encoder = { .name = "h264_amf", .long_name = NULL_IF_CONFIG_SMALL("AMD AMF H.264 Encoder"), @@ -389,7 +388,8 @@ AVCodec ff_h264_amf_encoder = { .priv_data_size = sizeof(AmfContext), .priv_class = &h264_amf_class, .defaults = defaults, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_amf_pix_fmts, + .wrapper_name = "amf", }; diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 3956b2d178..7c9a33ab33 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -295,7 +295,6 @@ static av_cold int amf_encode_init_hevc(AVCodecContext *avctx) static const AVCodecDefault defaults[] = { { "refs", "-1" }, { "aspect", "0" }, - { "sar", "0" }, { "b", "2M" }, { "g", "250" }, { "slices", "1" }, @@ -307,7 +306,7 @@ static const AVClass hevc_amf_class = { .option = options, .version = LIBAVUTIL_VERSION_INT, }; -//TODO declare as HW encoder when available + AVCodec ff_hevc_amf_encoder = { .name = "hevc_amf", .long_name = NULL_IF_CONFIG_SMALL("AMD AMF HEVC encoder"), @@ -320,7 +319,8 @@ AVCodec ff_hevc_amf_encoder = { .priv_data_size = sizeof(AmfContext), .priv_class = &hevc_amf_class, .defaults = defaults, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_amf_pix_fmts, + .wrapper_name = "amf", };