This option, which is also available on other FFmpeg hardware encoders,
allows the user to trade throughput for reduced output latency. This is
useful for ultra low latency applications like game streaming.

Signed-off-by: Cameron Gutman <aicomman...@gmail.com>
---
 libavcodec/amfenc.c      | 3 +--
 libavcodec/amfenc_av1.c  | 2 ++
 libavcodec/amfenc_h264.c | 3 +++
 libavcodec/amfenc_hevc.c | 2 ++
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c
index 03d75031f5..c8411902f4 100644
--- a/libavcodec/amfenc.c
+++ b/libavcodec/amfenc.c
@@ -274,7 +274,6 @@ static int amf_init_context(AVCodecContext *avctx)
     av_unused int ret;
 
     ctx->hwsurfaces_in_queue = 0;
-    ctx->hwsurfaces_in_queue_max = 16;
 
     // configure AMF logger
     // the return of these functions indicates old state and do not affect 
behaviour
@@ -329,7 +328,7 @@ static int amf_init_context(AVCodecContext *avctx)
             return AVERROR(ENOMEM);
 
         if (frames_ctx->initial_pool_size > 0)
-            ctx->hwsurfaces_in_queue_max = frames_ctx->initial_pool_size - 1;
+            ctx->hwsurfaces_in_queue_max = FFMIN(ctx->hwsurfaces_in_queue_max, 
frames_ctx->initial_pool_size - 1);
 
     } else if (avctx->hw_device_ctx) {
         AVHWDeviceContext *device_ctx = 
(AVHWDeviceContext*)avctx->hw_device_ctx->data;
diff --git a/libavcodec/amfenc_av1.c b/libavcodec/amfenc_av1.c
index 79b982e0d2..6f8062498d 100644
--- a/libavcodec/amfenc_av1.c
+++ b/libavcodec/amfenc_av1.c
@@ -97,6 +97,8 @@ static const AVOption options[] = {
     { "gop",                    "", 0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_GOP_ALIGNED       }, 0, 0, VE, 
.unit = "hdrmode" },
     { "frame",                  "", 0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_KEY_FRAME_ALIGNED }, 0, 0, VE, 
.unit = "hdrmode" },
 
+    { "async_depth",            "Set maximum encoding parallelism. Higher 
values increase output latency.", OFFSET(hwsurfaces_in_queue_max), 
AV_OPT_TYPE_INT, {.i64 = 16 }, 1, 16, VE },
+
     { "preencode",              "Enable preencode",     OFFSET(preencode),     
 AV_OPT_TYPE_BOOL, {.i64 = -1  }, -1, 1, VE},
     { "enforce_hrd",            "Enforce HRD",          OFFSET(enforce_hrd),   
 AV_OPT_TYPE_BOOL, {.i64 = -1  }, -1, 1, VE},
     { "filler_data",            "Filler Data Enable",   OFFSET(filler_data),   
 AV_OPT_TYPE_BOOL, {.i64 = -1  }, -1, 1, VE},
diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c
index 07aa9deb40..a06af39c88 100644
--- a/libavcodec/amfenc_h264.c
+++ b/libavcodec/amfenc_h264.c
@@ -110,6 +110,9 @@ static const AVOption options[] = {
     /// Header Insertion Spacing
     { "header_spacing", "Header Insertion Spacing",             
OFFSET(header_spacing),     AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1000, VE },
 
+    /// Maximum queued frames
+    { "async_depth",    "Set maximum encoding parallelism. Higher values 
increase output latency.", OFFSET(hwsurfaces_in_queue_max), AV_OPT_TYPE_INT, 
{.i64 = 16 }, 1, 16, VE },
+
     /// B-Frames
     // BPicturesPattern=bf
     { "bf_delta_qp",    "B-Picture Delta QP",                   
OFFSET(b_frame_delta_qp),   AV_OPT_TYPE_INT,  { .i64 = 4 }, -10, 10, VE },
diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c
index f633677574..c31231707d 100644
--- a/libavcodec/amfenc_hevc.c
+++ b/libavcodec/amfenc_hevc.c
@@ -83,6 +83,8 @@ static const AVOption options[] = {
     { "gop",            "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_GOP_ALIGNED }, 0, 0, VE, .unit = 
"hdrmode" },
     { "idr",            "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_IDR_ALIGNED }, 0, 0, VE, .unit = 
"hdrmode" },
 
+    { "async_depth",    "Set maximum encoding parallelism. Higher values 
increase output latency.", OFFSET(hwsurfaces_in_queue_max), AV_OPT_TYPE_INT, 
{.i64 = 16 }, 1, 16, VE },
+
     { "high_motion_quality_boost_enable",   "Enable High motion quality boost 
mode",  OFFSET(hw_high_motion_quality_boost), AV_OPT_TYPE_BOOL,   {.i64 = -1 }, 
-1, 1, VE },
     { "gops_per_idr",   "GOPs per IDR 0-no IDR will be inserted",   
OFFSET(gops_per_idr),  AV_OPT_TYPE_INT,  { .i64 = 1  },  0, INT_MAX, VE },
     { "preencode",      "Enable preencode",                         
OFFSET(preencode),     AV_OPT_TYPE_BOOL, { .i64 = -1  },  -1, 1, VE},
-- 
2.47.0.windows.2

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

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

Reply via email to