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" },
219 {
"force_original_aspect_ratio",
"decrease or increase w/h if necessary to keep the original AR",
OFFSET(force_original_aspect_ratio),
AV_OPT_TYPE_INT, { .i64 = 0}, 0, 2,
FLAGS,
"force_oar" },
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,