encoders
---
 libavcodec/amfenc.h      |  1 +
 libavcodec/amfenc_av1.c  | 46 +++++++++++++++-------
 libavcodec/amfenc_hevc.c | 84 +++++++++++++++++++++++++---------------
 3 files changed, 84 insertions(+), 47 deletions(-)

diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h
index c9d8a74fd1..3f42c4cd94 100644
--- a/libavcodec/amfenc.h
+++ b/libavcodec/amfenc.h
@@ -71,6 +71,7 @@ typedef struct AMFEncoderContext {
     int                 quality;
     int                 b_frame_delta_qp;
     int                 ref_b_frame_delta_qp;
+    int                 bit_depth;
 
     // Dynamic options, can be set after Init() call
 
diff --git a/libavcodec/amfenc_av1.c b/libavcodec/amfenc_av1.c
index 036d79f0bc..ff69c10dd1 100644
--- a/libavcodec/amfenc_av1.c
+++ b/libavcodec/amfenc_av1.c
@@ -38,6 +38,10 @@ static const AVOption options[] = {
     { "high_quality",           "high quality trancoding",                  0, 
AV_OPT_TYPE_CONST, {.i64 = AMF_VIDEO_ENCODER_AV1_USAGE_HIGH_QUALITY             
 }, 0, 0, VE, .unit = "usage" },
     { "lowlatency_high_quality","low latency yet high quality trancoding",  0, 
AV_OPT_TYPE_CONST, {.i64 = AMF_VIDEO_ENCODER_AV1_USAGE_LOW_LATENCY_HIGH_QUALITY 
 }, 0, 0, VE, .unit = "usage" },
 
+    { "bitdepth",                "Set color bit deph",                      
OFFSET(bit_depth),   AV_OPT_TYPE_INT,   {.i64 = AMF_COLOR_BIT_DEPTH_UNDEFINED 
}, AMF_COLOR_BIT_DEPTH_UNDEFINED, AMF_COLOR_BIT_DEPTH_10, VE, .unit = 
"bitdepth" },
+    { "8",                       "8 bit",                                     
0, AV_OPT_TYPE_CONST, {.i64 = AMF_COLOR_BIT_DEPTH_8  }, 0, 0, VE, .unit = 
"bitdepth" },
+    { "10",                      "10 bit",                                    
0, AV_OPT_TYPE_CONST, {.i64 = AMF_COLOR_BIT_DEPTH_10 }, 0, 0, VE, .unit = 
"bitdepth" },
+
     { "profile",                "Set the profile", OFFSET(profile),  
AV_OPT_TYPE_INT,{.i64 = -1 }, -1, AMF_VIDEO_ENCODER_AV1_PROFILE_MAIN, VE, .unit 
= "profile" },
     { "main",                   "", 0, AV_OPT_TYPE_CONST,{.i64 = 
AMF_VIDEO_ENCODER_AV1_PROFILE_MAIN }, 0, 0, VE, .unit = "profile" },
 
@@ -103,7 +107,7 @@ static const AVOption options[] = {
     { "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},
 
-    /// B-Frames
+    // B-Frames
     { "max_b_frames",   "Maximum number of consecutive B Pictures", 
OFFSET(max_consecutive_b_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 3, VE },
     { "bf",             "B Picture Pattern",                        
OFFSET(max_b_frames),             AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 3, VE },
 
@@ -193,7 +197,7 @@ static av_cold int amf_encode_init_av1(AVCodecContext* 
avctx)
     AMFGuid             guid;
     AMFRate             framerate;
     AMFSize             framesize = AMFConstructSize(avctx->width, 
avctx->height);
-    amf_int64           color_depth;
+    amf_int64           bit_depth;
     amf_int64           color_profile;
     enum                AVPixelFormat pix_fmt;
 
@@ -245,25 +249,37 @@ FF_ENABLE_DEPRECATION_WARNINGS
         AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_PROFILE, profile);
     }
 
-    /// Color profile
-    color_profile = ff_amf_get_color_profile(avctx);
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PROFILE, color_profile);
-
-    /// Color Depth
+    // Color bit depth
     pix_fmt = avctx->hw_frames_ctx ? 
((AVHWFramesContext*)avctx->hw_frames_ctx->data)->sw_format
                                 : avctx->pix_fmt;
-    color_depth = AMF_COLOR_BIT_DEPTH_8;
-    if (pix_fmt == AV_PIX_FMT_P010) {
-        color_depth = AMF_COLOR_BIT_DEPTH_10;
+    bit_depth = ctx->bit_depth;
+    if(bit_depth == AMF_COLOR_BIT_DEPTH_UNDEFINED){
+        bit_depth = pix_fmt == AV_PIX_FMT_P010 ?  AMF_COLOR_BIT_DEPTH_8 : 
AMF_COLOR_BIT_DEPTH_10;
     }
+    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_COLOR_BIT_DEPTH, bit_depth);
 
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_COLOR_BIT_DEPTH, color_depth);
+    // Color profile
+    color_profile = ff_amf_get_color_profile(avctx);
     AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PROFILE, color_profile);
-    /// Color Transfer Characteristics (AMF matches ISO/IEC)
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_OUTPUT_TRANSFER_CHARACTERISTIC, avctx->color_trc);
-    /// Color Primaries (AMF matches ISO/IEC)
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PRIMARIES, avctx->color_primaries);
 
+    // Color Range
+    // TODO
+
+    // Color Transfer Characteristics (AMF matches ISO/IEC)
+    if(avctx->color_primaries != AVCOL_PRI_UNSPECIFIED && (pix_fmt == 
AV_PIX_FMT_NV12 || pix_fmt == AV_PIX_FMT_P010)){
+        // if input is YUV, color_primaries are for VUI only
+        // AMF VCN color coversion supports only specifc output primaries 
BT2020 for 10-bit and BT709 for 8-bit
+        // vpp_amf supports more
+        AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_OUTPUT_TRANSFER_CHARACTERISTIC, avctx->color_trc);
+    }
+
+    // Color Primaries (AMF matches ISO/IEC)
+    if(avctx->color_primaries != AVCOL_PRI_UNSPECIFIED || pix_fmt == 
AV_PIX_FMT_NV12 || pix_fmt == AV_PIX_FMT_P010 )
+    {
+        // AMF VCN color coversion supports only specifc primaries BT2020 for 
10-bit and BT709 for 8-bit
+        // vpp_amf supports more
+        AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PRIMARIES, avctx->color_primaries);
+    }
     profile_level = avctx->level;
     if (profile_level == AV_LEVEL_UNKNOWN) {
         profile_level = ctx->level;
diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c
index cd05ad2bd4..55b37e2347 100644
--- a/libavcodec/amfenc_hevc.c
+++ b/libavcodec/amfenc_hevc.c
@@ -27,7 +27,7 @@
 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 
 static const AVOption options[] = {
-    { "usage",                   "Set the encoding usage",                   
OFFSET(usage),                          AV_OPT_TYPE_INT,   {.i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY_HIGH_QUALITY, VE, .unit = "usage" },
+    { "usage",                   "Set the encoding usage",       
OFFSET(usage), AV_OPT_TYPE_INT,   {.i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY_HIGH_QUALITY, VE, .unit = "usage" },
     { "transcoding",             "Generic Transcoding",                      
0, AV_OPT_TYPE_CONST, {.i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCODING          
     }, 0, 0, VE, .unit = "usage" },
     { "ultralowlatency",         "Ultra low latency usecase",                
0, AV_OPT_TYPE_CONST, {.i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_ULTRA_LOW_LATENCY    
     }, 0, 0, VE, .unit = "usage" },
     { "lowlatency",              "Low latency usecase",                      
0, AV_OPT_TYPE_CONST, {.i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY          
     }, 0, 0, VE, .unit = "usage" },
@@ -35,15 +35,19 @@ static const AVOption options[] = {
     { "high_quality",            "High quality usecase",                     
0, AV_OPT_TYPE_CONST, {.i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_HIGH_QUALITY         
     }, 0, 0, VE, .unit = "usage" },
     { "lowlatency_high_quality", "Low latency yet high quality usecase",     
0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY_HIGH_QUALITY  }, 0, 0, VE, .unit = 
"usage" },
 
-    { "profile",        "Set the profile",           OFFSET(profile),   
AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN_10, VE, 
.unit = "profile" },
+    { "bitdepth",                "Set color bit deph",           
OFFSET(bit_depth),   AV_OPT_TYPE_INT,   {.i64 = AMF_COLOR_BIT_DEPTH_UNDEFINED 
}, AMF_COLOR_BIT_DEPTH_UNDEFINED, AMF_COLOR_BIT_DEPTH_10, VE, .unit = 
"bitdepth" },
+    { "8",                       "8 bit",                                     
0, AV_OPT_TYPE_CONST, {.i64 = AMF_COLOR_BIT_DEPTH_8  }, 0, 0, VE, .unit = 
"bitdepth" },
+    { "10",                      "10 bit",                                    
0, AV_OPT_TYPE_CONST, {.i64 = AMF_COLOR_BIT_DEPTH_10 }, 0, 0, VE, .unit = 
"bitdepth" },
+
+    { "profile",        "Set the profile",                                     
                                 OFFSET(profile),   AV_OPT_TYPE_INT,{ .i64 = -1 
}, -1, AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN_10, VE, .unit = "profile" },
     { "main",           "", 0,                      AV_OPT_TYPE_CONST,{ .i64 = 
AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN }, 0, 0, VE, .unit = "profile" },
     { "main10",         "", 0,                      AV_OPT_TYPE_CONST,{ .i64 = 
AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN_10 }, 0, 0, VE, .unit = "profile" },
 
-    { "profile_tier",   "Set the profile tier (default main)",      
OFFSET(tier), AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_TIER_HIGH, VE, .unit = "tier" },
+    { "profile_tier",   "Set the profile tier (default main)",   OFFSET(tier), 
AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, AMF_VIDEO_ENCODER_HEVC_TIER_HIGH, VE, .unit 
= "tier" },
     { "main",           "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_TIER_MAIN }, 0, 0, VE, .unit = "tier" },
     { "high",           "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_TIER_HIGH }, 0, 0, VE, .unit = "tier" },
 
-    { "level",          "Set the encoding level (default auto)",    
OFFSET(level), AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, AMF_LEVEL_6_2, VE, .unit = 
"level" },
+    { "level",          "Set the encoding level (default auto)", 
OFFSET(level), AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, AMF_LEVEL_6_2, VE, .unit = 
"level" },
     { "auto",           "", 0, AV_OPT_TYPE_CONST, { .i64 = 0             }, 0, 
0, VE, .unit = "level" },
     { "1.0",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_LEVEL_1   }, 0, 
0, VE, .unit = "level" },
     { "2.0",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_LEVEL_2   }, 0, 
0, VE, .unit = "level" },
@@ -59,15 +63,15 @@ static const AVOption options[] = {
     { "6.1",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_LEVEL_6_1 }, 0, 
0, VE, .unit = "level" },
     { "6.2",            "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_LEVEL_6_2 }, 0, 
0, VE, .unit = "level" },
 
-    { "quality",        "Set the encoding quality preset",     
OFFSET(quality),    AV_OPT_TYPE_INT,   { .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED, VE, .unit = "quality" },
-    { "preset",         "Set the encoding quality preset",     
OFFSET(quality),    AV_OPT_TYPE_INT,   { .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED, VE, .unit = "quality" },
+    { "quality",        "Set the encoding quality preset",  OFFSET(quality),   
 AV_OPT_TYPE_INT,   { .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED, VE, .unit = "quality" },
+    { "preset",         "Set the encoding quality preset",  OFFSET(quality),   
 AV_OPT_TYPE_INT,   { .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED, VE, .unit = "quality" },
     { "quality",        "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY  }, 0, 0, VE, .unit = "quality" },
     { "balanced",       "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_BALANCED }, 0, 0, VE, .unit = "quality" },
     { "speed",          "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED    }, 0, 0, VE, .unit = "quality" },
 
-    { "latency",        "enables low latency mode",             
OFFSET(latency),    AV_OPT_TYPE_BOOL,{.i64 = -1 },  -1, 1, VE },
+    { "latency",        "enables low latency mode",         OFFSET(latency),   
 AV_OPT_TYPE_BOOL,{.i64 = -1 },  -1, 1, VE },
 
-    { "rc",             "Set the rate control mode",            
OFFSET(rate_control_mode), AV_OPT_TYPE_INT, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN }, 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN, 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_HIGH_QUALITY_CBR, VE, .unit = "rc" },
+    { "rc",             "Set the rate control mode",        
OFFSET(rate_control_mode), AV_OPT_TYPE_INT, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN }, 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN, 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_HIGH_QUALITY_CBR, VE, .unit = "rc" },
     { "cqp",            "Constant Quantization Parameter",      0, 
AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CONSTANT_QP             }, 0, 0, VE, 
.unit = "rc" },
     { "cbr",            "Constant Bitrate",                     0, 
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CBR      
               }, 0, 0, VE, .unit = "rc" },
     { "vbr_peak",       "Peak Contrained Variable Bitrate",     0, 
AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR    }, 0, 0, VE, 
.unit = "rc" },
@@ -76,14 +80,14 @@ static const AVOption options[] = {
     { "hqvbr",          "High Quality Variable Bitrate",        0, 
AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_HIGH_QUALITY_VBR        }, 0, 0, VE, 
.unit = "rc" },
     { "hqcbr",          "High Quality Constant Bitrate",        0, 
AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_HIGH_QUALITY_CBR        }, 0, 0, VE, 
.unit = "rc" },
 
-    { "qvbr_quality_level",     "Sets the QVBR quality level",  
OFFSET(qvbr_quality_level), AV_OPT_TYPE_INT,   {.i64 = -1 }, -1, 51, VE },
+    { "qvbr_quality_level",     "Sets the QVBR quality level", 
OFFSET(qvbr_quality_level), AV_OPT_TYPE_INT,   {.i64 = -1 }, -1, 51, VE },
 
-    { "header_insertion_mode",        "Set header insertion mode",  
OFFSET(header_insertion_mode),      AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_IDR_ALIGNED, VE, .unit = "hdrmode" 
},
+    { "header_insertion_mode",        "Set header insertion mode", 
OFFSET(header_insertion_mode),      AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, 
AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_IDR_ALIGNED, VE, .unit = "hdrmode" 
},
     { "none",           "", 0, AV_OPT_TYPE_CONST, { .i64 = 
AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_NONE        }, 0, 0, VE, .unit = 
"hdrmode" },
     { "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 },
+    { "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 },
@@ -91,7 +95,7 @@ static const AVOption options[] = {
     { "vbaq",           "Enable VBAQ",                              
OFFSET(enable_vbaq),   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},
-    { "max_au_size",    "Maximum Access Unit Size for rate control (in bits)", 
OFFSET(max_au_size),   AV_OPT_TYPE_INT,{ .i64 = -1 }, -1, INT_MAX, VE},
+    { "max_au_size",    "Maximum Access Unit Size for rate control (in bits)", 
                                 OFFSET(max_au_size),   AV_OPT_TYPE_INT,{ .i64 
= -1 }, -1, INT_MAX, VE},
     { "min_qp_i",       "min quantization parameter for I-frame",   
OFFSET(min_qp_i),      AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
     { "max_qp_i",       "max quantization parameter for I-frame",   
OFFSET(max_qp_i),      AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
     { "min_qp_p",       "min quantization parameter for P-frame",   
OFFSET(min_qp_p),      AV_OPT_TYPE_INT, { .i64 = -1  }, -1, 51, VE },
@@ -106,22 +110,22 @@ static const AVOption options[] = {
     { "aud",            "Inserts AU Delimiter NAL unit",            
OFFSET(aud)           ,AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE },
 
     //Pre Analysis options
-    { "preanalysis",                            "Enable preanalysis",          
                                 OFFSET(preanalysis),                           
 AV_OPT_TYPE_BOOL,   {.i64 = -1 }, -1, 1, VE },
+    { "preanalysis",                            "Enable preanalysis", 
OFFSET(preanalysis),                            AV_OPT_TYPE_BOOL,   {.i64 = -1 
}, -1, 1, VE },
 
-    { "pa_activity_type",                       "Set the type of activity 
analysis",                            OFFSET(pa_activity_type),                 
      AV_OPT_TYPE_INT,    {.i64 = -1 }, -1, AMF_PA_ACTIVITY_YUV, VE, .unit = 
"activity_type" },
+    { "pa_activity_type",                       "Set the type of activity 
analysis", OFFSET(pa_activity_type),                       AV_OPT_TYPE_INT,    
{.i64 = -1 }, -1, AMF_PA_ACTIVITY_YUV, VE, .unit = "activity_type" },
     { "y",                                      "activity y",   0, 
AV_OPT_TYPE_CONST, {.i64 = AMF_PA_ACTIVITY_Y     }, 0, 0, VE, .unit = 
"activity_type" },
     { "yuv",                                    "activity yuv", 0, 
AV_OPT_TYPE_CONST, {.i64 = AMF_PA_ACTIVITY_YUV   }, 0, 0, VE, .unit = 
"activity_type" },
 
-    { "pa_scene_change_detection_enable",       "Enable scene change 
detection",                                OFFSET(pa_scene_change_detection),   
           AV_OPT_TYPE_BOOL,   {.i64 = -1 }, -1, 1, VE },
+    { "pa_scene_change_detection_enable",       "Enable scene change 
detection",     OFFSET(pa_scene_change_detection),              
AV_OPT_TYPE_BOOL,   {.i64 = -1 }, -1, 1, VE },
 
-    { "pa_scene_change_detection_sensitivity",  "Set the sensitivity of scene 
change detection",                
OFFSET(pa_scene_change_detection_sensitivity),  AV_OPT_TYPE_INT,    {.i64 = -1 
}, -1, AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_HIGH, VE, .unit = 
"scene_change_sensitivity" },
+    { "pa_scene_change_detection_sensitivity",  "Set the sensitivity of scene 
change detection", OFFSET(pa_scene_change_detection_sensitivity),  
AV_OPT_TYPE_INT,    {.i64 = -1 }, -1, 
AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_HIGH, VE, .unit = 
"scene_change_sensitivity" },
     { "low",                                    "low scene change dectection 
sensitivity",      0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_LOW     }, 0, 0, VE, .unit = 
"scene_change_sensitivity" },
     { "medium",                                 "medium scene change 
dectection sensitivity",   0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_MEDIUM  }, 0, 0, VE, .unit = 
"scene_change_sensitivity" },
     { "high",                                   "high scene change dectection 
sensitivity",     0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_HIGH    }, 0, 0, VE, .unit = 
"scene_change_sensitivity" },
 
-    { "pa_static_scene_detection_enable",       "Enable static scene 
detection",                                OFFSET(pa_static_scene_detection),   
           AV_OPT_TYPE_BOOL,   {.i64 = -1 }, -1, 1, VE },
+    { "pa_static_scene_detection_enable",       "Enable static scene 
detection",                 OFFSET(pa_static_scene_detection),              
AV_OPT_TYPE_BOOL,   {.i64 = -1 }, -1, 1, VE },
 
-    { "pa_static_scene_detection_sensitivity",  "Set the sensitivity of static 
scene detection",                OFFSET(pa_static_scene_detection_sensitivity), 
 AV_OPT_TYPE_INT,    {.i64 = -1 }, -1, 
AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_HIGH, VE , .unit = 
"static_scene_sensitivity" },
+    { "pa_static_scene_detection_sensitivity",  "Set the sensitivity of static 
scene detection", OFFSET(pa_static_scene_detection_sensitivity),  
AV_OPT_TYPE_INT,    {.i64 = -1 }, -1, 
AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_HIGH, VE , .unit = 
"static_scene_sensitivity" },
     { "low",                                    "low static scene dectection 
sensitivity",      0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_LOW    }, 0, 0, VE, .unit = 
"static_scene_sensitivity" },
     { "medium",                                 "medium static scene 
dectection sensitivity",   0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_MEDIUM }, 0, 0, VE, .unit = 
"static_scene_sensitivity" },
     { "high",                                   "high static scene dectection 
sensitivity",     0, AV_OPT_TYPE_CONST, {.i64 = 
AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_HIGH   }, 0, 0, VE, .unit = 
"static_scene_sensitivity" },
@@ -166,7 +170,7 @@ static av_cold int amf_encode_init_hevc(AVCodecContext 
*avctx)
     AMFRate             framerate;
     AMFSize             framesize = AMFConstructSize(avctx->width, 
avctx->height);
     int                 deblocking_filter = (avctx->flags & 
AV_CODEC_FLAG_LOOP_FILTER) ? 1 : 0;
-    amf_int64           color_depth;
+    amf_int64           bit_depth;
     amf_int64           color_profile;
     enum                AVPixelFormat pix_fmt;
 
@@ -241,22 +245,38 @@ FF_ENABLE_DEPRECATION_WARNINGS
         AMF_ASSIGN_PROPERTY_RATIO(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_ASPECT_RATIO, ratio);
     }
 
+    // Color bit depth
+    pix_fmt = avctx->hw_frames_ctx ? 
((AVHWFramesContext*)avctx->hw_frames_ctx->data)->sw_format
+                                    : avctx->pix_fmt;
+
+    bit_depth = ctx->bit_depth;
+    if(bit_depth == AMF_COLOR_BIT_DEPTH_UNDEFINED){
+        bit_depth = pix_fmt == AV_PIX_FMT_P010 ?  AMF_COLOR_BIT_DEPTH_8 : 
AMF_COLOR_BIT_DEPTH_10;
+    }
+    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_COLOR_BIT_DEPTH, bit_depth);
+
+    // Color profile
     color_profile = ff_amf_get_color_profile(avctx);
     AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PROFILE, color_profile);
-    /// Color Range (Support for older Drivers)
+
+    // Color Range (Support for older Drivers)
     AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE, !!(avctx->color_range == 
AVCOL_RANGE_JPEG));
-    /// Color Depth
-    color_depth = AMF_COLOR_BIT_DEPTH_8;
-    pix_fmt = avctx->hw_frames_ctx ? 
((AVHWFramesContext*)avctx->hw_frames_ctx->data)->sw_format
-                                    : avctx->pix_fmt;
-    if (pix_fmt == AV_PIX_FMT_P010) {
-        color_depth = AMF_COLOR_BIT_DEPTH_10;
-    }
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_COLOR_BIT_DEPTH, color_depth);
-    /// Color Transfer Characteristics (AMF matches ISO/IEC)
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC, avctx->color_trc);
-    /// Color Primaries (AMF matches ISO/IEC)
-    AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES, avctx->color_primaries);
+
+    // Color Transfer Characteristics (AMF matches ISO/IEC)
+    if(avctx->color_trc != AVCOL_TRC_UNSPECIFIED && (pix_fmt == 
AV_PIX_FMT_NV12 || pix_fmt == AV_PIX_FMT_P010)){
+        // if input is YUV, color_trc is for VUI only - any value
+        // AMF VCN color coversion supports only specifc output transfer 
characterstic SMPTE2084 for 10-bit and BT709 for 8-bit
+        // vpp_amf supports more
+        AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC, avctx->color_trc);
+    }
+
+    // Color Primaries (AMF matches ISO/IEC)
+    if(avctx->color_primaries != AVCOL_PRI_UNSPECIFIED && (pix_fmt == 
AV_PIX_FMT_NV12 || pix_fmt == AV_PIX_FMT_P010)){
+        // if input is YUV, color_primaries are for VUI only
+        // AMF VCN color coversion supports only specifc output primaries 
BT2020 for 10-bit and BT709 for 8-bit
+        // vpp_amf supports more
+        AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES, avctx->color_primaries);
+    }
 
     // Picture control properties
     AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, 
AMF_VIDEO_ENCODER_HEVC_NUM_GOPS_PER_IDR, ctx->gops_per_idr);
-- 
2.47.1.windows.1

_______________________________________________
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