37 #include "AMF/components/VideoConverter.h" 
   81     output_pix_fmts = output_pix_fmts_default;
 
   95     enum AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM amf_color_profile;
 
  103     res = 
ctx->amf_device_ctx->factory->pVtbl->CreateComponent(
ctx->amf_device_ctx->factory, 
ctx->amf_device_ctx->context, AMFVideoConverter, &
ctx->component);
 
  111     AMF_ASSIGN_PROPERTY_SIZE(res, 
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_SIZE, 
out_size);
 
  114     AMF_ASSIGN_PROPERTY_INT64(res, 
ctx->component, AMF_VIDEO_CONVERTER_SCALE, (amf_int32)
ctx->scale_type);
 
  117     amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN;
 
  119     switch(
ctx->color_profile) {
 
  120     case AMF_VIDEO_CONVERTER_COLOR_PROFILE_601:
 
  121         if (
ctx->color_range == AMF_COLOR_RANGE_FULL) {
 
  122             amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_601;
 
  124             amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601;
 
  127     case AMF_VIDEO_CONVERTER_COLOR_PROFILE_709:
 
  128         if (
ctx->color_range == AMF_COLOR_RANGE_FULL) {
 
  129             amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_709;
 
  131             amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709;
 
  134     case AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020:
 
  135         if (
ctx->color_range == AMF_COLOR_RANGE_FULL) {
 
  136             amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020;
 
  138             amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020;
 
  142         amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN;
 
  146     if (amf_color_profile != AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN) {
 
  147         AMF_ASSIGN_PROPERTY_INT64(res, 
ctx->component, AMF_VIDEO_CONVERTER_COLOR_PROFILE, amf_color_profile);
 
  150     if (
ctx->color_range != AMF_COLOR_RANGE_UNDEFINED) {
 
  151         AMF_ASSIGN_PROPERTY_INT64(res, 
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_COLOR_RANGE, 
ctx->color_range);
 
  154     if (
ctx->primaries != AMF_COLOR_PRIMARIES_UNDEFINED) {
 
  155         AMF_ASSIGN_PROPERTY_INT64(res, 
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_COLOR_PRIMARIES, 
ctx->primaries);
 
  158     if (
ctx->trc != AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED) {
 
  159         AMF_ASSIGN_PROPERTY_INT64(res, 
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_TRANSFER_CHARACTERISTIC, 
ctx->trc);
 
  168 #define OFFSET(x) offsetof(AMFFilterContext, x) 
  169 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM 
  175     { 
"scale_type",     
"Scale type",           
OFFSET(scale_type),      
AV_OPT_TYPE_INT,   { .i64 = AMF_VIDEO_CONVERTER_SCALE_BILINEAR }, AMF_VIDEO_CONVERTER_SCALE_BILINEAR, AMF_VIDEO_CONVERTER_SCALE_BICUBIC, 
FLAGS, 
"scale_type" },
 
  176     { 
"bilinear",       
"Bilinear",         0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_SCALE_BILINEAR }, 0, 0, 
FLAGS, 
"scale_type" },
 
  177     { 
"bicubic",        
"Bicubic",          0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_SCALE_BICUBIC },  0, 0, 
FLAGS, 
"scale_type" },
 
  179     { 
"color_profile",  
"Color profile",        
OFFSET(color_profile), 
AV_OPT_TYPE_INT,   { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN }, AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN, AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020, 
FLAGS, 
"color_profile" },
 
  180     { 
"bt601",          
"BT.601",           0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601 }, 0, 0, 
FLAGS, 
"color_profile" },
 
  181     { 
"bt709",          
"BT.709",           0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709 },  0, 0, 
FLAGS, 
"color_profile" },
 
  182     { 
"bt2020",         
"BT.2020",          0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020 },  0, 0, 
FLAGS, 
"color_profile" },
 
  185     { 
"studio",         
"Studio",                   0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_RANGE_STUDIO }, 0, 0, 
FLAGS, 
"color_range" },
 
  188     { 
"primaries",      
"Output color primaries",   
OFFSET(
primaries),  
AV_OPT_TYPE_INT,   { .i64 = AMF_COLOR_PRIMARIES_UNDEFINED }, AMF_COLOR_PRIMARIES_UNDEFINED, AMF_COLOR_PRIMARIES_JEDEC_P22, 
FLAGS, 
"primaries" },
 
  189     { 
"bt709",          
"BT.709",                   0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT709 }, 0, 0, 
FLAGS, 
"primaries" },
 
  190     { 
"bt470m",         
"BT.470M",                  0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT470M }, 0, 0, 
FLAGS, 
"primaries" },
 
  191     { 
"bt470bg",        
"BT.470BG",                 0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT470BG }, 0, 0, 
FLAGS, 
"primaries" },
 
  192     { 
"smpte170m",      
"SMPTE170M",                0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE170M }, 0, 0, 
FLAGS, 
"primaries" },
 
  193     { 
"smpte240m",      
"SMPTE240M",                0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE240M }, 0, 0, 
FLAGS, 
"primaries" },
 
  195     { 
"bt2020",         
"BT2020",                   0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT2020 }, 0, 0, 
FLAGS, 
"primaries" },
 
  196     { 
"smpte428",       
"SMPTE428",                 0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE428 }, 0, 0, 
FLAGS, 
"primaries" },
 
  197     { 
"smpte431",       
"SMPTE431",                 0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE431 }, 0, 0, 
FLAGS, 
"primaries" },
 
  198     { 
"smpte432",       
"SMPTE432",                 0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE432 }, 0, 0, 
FLAGS, 
"primaries" },
 
  199     { 
"jedec-p22",      
"JEDEC_P22",                0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_JEDEC_P22 }, 0, 0, 
FLAGS, 
"primaries" },
 
  201     { 
"trc",            
"Output transfer characteristics",  
OFFSET(trc),  
AV_OPT_TYPE_INT,   { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED }, AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, AMF_COLOR_TRANSFER_CHARACTERISTIC_ARIB_STD_B67, 
FLAGS, 
"trc" },
 
  202     { 
"bt709",          
"BT.709",                   0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT709 }, 0, 0, 
FLAGS, 
"trc" },
 
  203     { 
"gamma22",        
"GAMMA22",                  0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_GAMMA22 }, 0, 0, 
FLAGS, 
"trc" },
 
  204     { 
"gamma28",        
"GAMMA28",                  0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_GAMMA28 }, 0, 0, 
FLAGS, 
"trc" },
 
  205     { 
"smpte170m",      
"SMPTE170M",                0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE170M }, 0, 0, 
FLAGS, 
"trc" },
 
  206     { 
"smpte240m",      
"SMPTE240M",                0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE240M }, 0, 0, 
FLAGS, 
"trc" },
 
  207     { 
"linear",         
"Linear",                   0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_LINEAR }, 0, 0, 
FLAGS, 
"trc" },
 
  208     { 
"log",            
"LOG",                      0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_LOG }, 0, 0, 
FLAGS, 
"trc" },
 
  209     { 
"log-sqrt",       
"LOG_SQRT",                 0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_LOG_SQRT }, 0, 0, 
FLAGS, 
"trc" },
 
  210     { 
"iec61966-2-4",   
"IEC61966_2_4",             0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_IEC61966_2_4 }, 0, 0, 
FLAGS, 
"trc" },
 
  211     { 
"bt1361-ecg",     
"BT1361_ECG",               0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT1361_ECG }, 0, 0, 
FLAGS, 
"trc" },
 
  212     { 
"iec61966-2-1",   
"IEC61966_2_1",             0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_IEC61966_2_1 }, 0, 0, 
FLAGS, 
"trc" },
 
  213     { 
"bt2020-10",      
"BT.2020_10",               0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT2020_10 }, 0, 0, 
FLAGS, 
"trc" },
 
  214     { 
"bt2020-12",      
"BT.2020-12",               0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT2020_12 }, 0, 0, 
FLAGS, 
"trc" },
 
  215     { 
"smpte2084",      
"SMPTE2084",                0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE2084 }, 0, 0, 
FLAGS, 
"trc" },
 
  216     { 
"smpte428",       
"SMPTE428",                 0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE428 }, 0, 0, 
FLAGS, 
"trc" },
 
  217     { 
"arib-std-b67",   
"ARIB_STD_B67",             0,  
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_ARIB_STD_B67 }, 0, 0, 
FLAGS, 
"trc" },
 
  223     { 
"force_divisible_by", 
"enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used", 
OFFSET(force_divisible_by), 
AV_OPT_TYPE_INT, { .i64 = 1}, 1, 256, 
FLAGS },
 
  224     { 
"reset_sar", 
"reset SAR to 1 and scale to square pixels if scaling proportionally", 
OFFSET(reset_sar), 
AV_OPT_TYPE_BOOL, { .i64 = 0}, 0, 1, 
FLAGS },
 
  251     .p.priv_class = &vpp_amf_class,