70 AMFBuffer *hdrmeta_buffer =
NULL;
71 AMFHDRMetadata *hdrmeta =
NULL;
76 enum AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM amf_color_profile;
78 enum AMF_MEMORY_TYPE mem_type = AMF_MEMORY_UNKNOWN;
85 res =
ctx->amf_device_ctx->factory->pVtbl->CreateComponent(
ctx->amf_device_ctx->factory,
ctx->amf_device_ctx->context, AMFVideoConverter, &
ctx->component);
89 if (mem_type != AMF_MEMORY_UNKNOWN)
90 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_MEMORY_TYPE, mem_type);
97 AMF_ASSIGN_PROPERTY_SIZE(res,
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_SIZE,
out_size);
100 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_SCALE, (amf_int32)
ctx->scale_type);
103 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN;
105 switch(
ctx->color_profile) {
106 case AMF_VIDEO_CONVERTER_COLOR_PROFILE_601:
107 if (
ctx->out_color_range == AMF_COLOR_RANGE_FULL) {
108 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_601;
110 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601;
113 case AMF_VIDEO_CONVERTER_COLOR_PROFILE_709:
114 if (
ctx->out_color_range == AMF_COLOR_RANGE_FULL) {
115 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_709;
117 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709;
120 case AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020:
121 if (
ctx->out_color_range == AMF_COLOR_RANGE_FULL) {
122 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020;
124 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020;
128 amf_color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN;
132 if (
ctx->in_color_range != AMF_COLOR_RANGE_UNDEFINED) {
133 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_INPUT_COLOR_RANGE,
ctx->in_color_range);
136 if (
ctx->in_primaries != AMF_COLOR_PRIMARIES_UNDEFINED) {
137 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_INPUT_COLOR_PRIMARIES,
ctx->in_primaries);
140 if (
ctx->in_trc != AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED) {
141 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_INPUT_TRANSFER_CHARACTERISTIC,
ctx->in_trc);
148 if (!
ctx->master_display)
156 if (!
ctx->light_meta)
160 if (
ctx->light_meta ||
ctx->master_display) {
162 res =
ctx->amf_device_ctx->context->pVtbl->AllocBuffer(
ctx->amf_device_ctx->context, AMF_MEMORY_HOST,
sizeof(AMFHDRMetadata), &hdrmeta_buffer);
164 hdrmeta = (AMFHDRMetadata*)hdrmeta_buffer->pVtbl->GetNative(hdrmeta_buffer);
169 AMF_ASSIGN_PROPERTY_INTERFACE(res,
ctx->component, AMF_VIDEO_CONVERTER_INPUT_HDR_METADATA, hdrmeta_buffer);
171 hdrmeta_buffer->pVtbl->Release(hdrmeta_buffer);
176 if (amf_color_profile != AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN) {
177 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_COLOR_PROFILE, amf_color_profile);
180 if (
ctx->out_color_range != AMF_COLOR_RANGE_UNDEFINED) {
181 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_COLOR_RANGE,
ctx->out_color_range);
184 if (
ctx->out_primaries != AMF_COLOR_PRIMARIES_UNDEFINED) {
185 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_COLOR_PRIMARIES,
ctx->out_primaries);
188 if (
ctx->out_trc != AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED) {
189 AMF_ASSIGN_PROPERTY_INT64(res,
ctx->component, AMF_VIDEO_CONVERTER_OUTPUT_TRANSFER_CHARACTERISTIC,
ctx->out_trc);
205 {
"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" },
206 {
"bilinear",
"Bilinear", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_SCALE_BILINEAR }, 0, 0,
FLAGS,
"scale_type" },
207 {
"bicubic",
"Bicubic", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_SCALE_BICUBIC }, 0, 0,
FLAGS,
"scale_type" },
209 {
"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" },
210 {
"bt601",
"BT.601", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601 }, 0, 0,
FLAGS,
"color_profile" },
211 {
"bt709",
"BT.709", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709 }, 0, 0,
FLAGS,
"color_profile" },
212 {
"bt2020",
"BT.2020", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020 }, 0, 0,
FLAGS,
"color_profile" },
214 {
"in_color_range",
"Input color range",
OFFSET(in_color_range),
AV_OPT_TYPE_INT, { .i64 = AMF_COLOR_RANGE_UNDEFINED }, AMF_COLOR_RANGE_UNDEFINED, AMF_COLOR_RANGE_FULL,
FLAGS,
"color_range" },
215 {
"out_color_range",
"Output color range",
OFFSET(out_color_range),
AV_OPT_TYPE_INT, { .i64 = AMF_COLOR_RANGE_UNDEFINED }, AMF_COLOR_RANGE_UNDEFINED, AMF_COLOR_RANGE_FULL,
FLAGS,
"color_range" },
216 {
"studio",
"Studio", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_RANGE_STUDIO }, 0, 0,
FLAGS,
"color_range" },
219 {
"in_primaries",
"Input color primaries",
OFFSET(in_primaries),
AV_OPT_TYPE_INT, { .i64 = AMF_COLOR_PRIMARIES_UNDEFINED }, AMF_COLOR_PRIMARIES_UNDEFINED, AMF_COLOR_PRIMARIES_JEDEC_P22,
FLAGS,
"primaries" },
220 {
"out_primaries",
"Output color primaries",
OFFSET(out_primaries),
AV_OPT_TYPE_INT, { .i64 = AMF_COLOR_PRIMARIES_UNDEFINED }, AMF_COLOR_PRIMARIES_UNDEFINED, AMF_COLOR_PRIMARIES_JEDEC_P22,
FLAGS,
"primaries" },
221 {
"bt709",
"BT.709", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT709 }, 0, 0,
FLAGS,
"primaries" },
222 {
"bt470m",
"BT.470M", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT470M }, 0, 0,
FLAGS,
"primaries" },
223 {
"bt470bg",
"BT.470BG", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT470BG }, 0, 0,
FLAGS,
"primaries" },
224 {
"smpte170m",
"SMPTE170M", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE170M }, 0, 0,
FLAGS,
"primaries" },
225 {
"smpte240m",
"SMPTE240M", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE240M }, 0, 0,
FLAGS,
"primaries" },
227 {
"bt2020",
"BT2020", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_BT2020 }, 0, 0,
FLAGS,
"primaries" },
228 {
"smpte428",
"SMPTE428", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE428 }, 0, 0,
FLAGS,
"primaries" },
229 {
"smpte431",
"SMPTE431", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE431 }, 0, 0,
FLAGS,
"primaries" },
230 {
"smpte432",
"SMPTE432", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_SMPTE432 }, 0, 0,
FLAGS,
"primaries" },
231 {
"jedec-p22",
"JEDEC_P22", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_PRIMARIES_JEDEC_P22 }, 0, 0,
FLAGS,
"primaries" },
233 {
"in_trc",
"Input transfer characteristics",
OFFSET(in_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" },
234 {
"out_trc",
"Output transfer characteristics",
OFFSET(out_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" },
235 {
"bt709",
"BT.709", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT709 }, 0, 0,
FLAGS,
"trc" },
236 {
"gamma22",
"GAMMA22", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_GAMMA22 }, 0, 0,
FLAGS,
"trc" },
237 {
"gamma28",
"GAMMA28", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_GAMMA28 }, 0, 0,
FLAGS,
"trc" },
238 {
"smpte170m",
"SMPTE170M", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE170M }, 0, 0,
FLAGS,
"trc" },
239 {
"smpte240m",
"SMPTE240M", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE240M }, 0, 0,
FLAGS,
"trc" },
240 {
"linear",
"Linear", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_LINEAR }, 0, 0,
FLAGS,
"trc" },
241 {
"log",
"LOG", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_LOG }, 0, 0,
FLAGS,
"trc" },
242 {
"log-sqrt",
"LOG_SQRT", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_LOG_SQRT }, 0, 0,
FLAGS,
"trc" },
243 {
"iec61966-2-4",
"IEC61966_2_4", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_IEC61966_2_4 }, 0, 0,
FLAGS,
"trc" },
244 {
"bt1361-ecg",
"BT1361_ECG", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT1361_ECG }, 0, 0,
FLAGS,
"trc" },
245 {
"iec61966-2-1",
"IEC61966_2_1", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_IEC61966_2_1 }, 0, 0,
FLAGS,
"trc" },
246 {
"bt2020-10",
"BT.2020_10", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT2020_10 }, 0, 0,
FLAGS,
"trc" },
247 {
"bt2020-12",
"BT.2020-12", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_BT2020_12 }, 0, 0,
FLAGS,
"trc" },
248 {
"smpte2084",
"SMPTE2084", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE2084 }, 0, 0,
FLAGS,
"trc" },
249 {
"smpte428",
"SMPTE428", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE428 }, 0, 0,
FLAGS,
"trc" },
250 {
"arib-std-b67",
"ARIB_STD_B67", 0,
AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_ARIB_STD_B67 }, 0, 0,
FLAGS,
"trc" },
256 {
"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 },
257 {
"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 },
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames.