47#define ZIMG_ALIGNMENT 64
48#define MIN_TILESIZE 64
139 zimg_image_format_default(&
s->src_format, ZIMG_API_VERSION);
140 zimg_image_format_default(&
s->dst_format, ZIMG_API_VERSION);
141 zimg_image_format_default(&
s->src_format_tmp, ZIMG_API_VERSION);
142 zimg_image_format_default(&
s->dst_format_tmp, ZIMG_API_VERSION);
144 zimg_graph_builder_params_default(&
s->params, ZIMG_API_VERSION);
145 zimg_graph_builder_params_default(&
s->params_tmp, ZIMG_API_VERSION);
147 if (
s->size_str && (
s->w_expr ||
s->h_expr)) {
149 "Size and width/height expressions cannot be set at the same time.\n");
153 if (
s->w_expr && !
s->h_expr)
154 FFSWAP(
char *,
s->w_expr,
s->size_str);
160 "Invalid size '%s'\n",
s->size_str);
163 snprintf(buf,
sizeof(buf)-1,
"%d",
s->w);
165 snprintf(buf,
sizeof(buf)-1,
"%d",
s->h);
222 formats =
s->colorspace != ZIMG_MATRIX_UNSPECIFIED &&
s->colorspace > 0
243 s->out_slice_start[0] = 0;
244 for (
int i = 1;
i <
s->nb_threads;
i++) {
248 s->out_slice_end[
s->nb_threads - 1] = out_h;
250 for (
int i = 0;
i <
s->nb_threads;
i++) {
251 s->in_slice_start[
i] =
s->out_slice_start[
i] * in_h / (
double)out_h;
252 s->in_slice_end[
i] =
s->out_slice_end[
i] * in_h / (
double)out_h;
264 double var_values[
VARS_NB], res;
291 if (!(res >= INT32_MIN && res <= INT32_MAX)) {
302 if (!(res >= INT32_MIN && res <= INT32_MAX)) {
340 if (
s->force_original_aspect_ratio) {
344 if (
s->force_original_aspect_ratio == 1) {
353 if (
w > INT_MAX ||
h > INT_MAX ||
354 (
h * inlink->
w) > INT_MAX ||
355 (
w * inlink->
h) > INT_MAX)
368 av_log(
ctx,
AV_LOG_DEBUG,
"w:%d h:%d fmt:%s csp:%s range:%s sar:%d/%d -> w:%d h:%d fmt:%s csp:%s range:%s sar:%d/%d\n",
379 "Error when evaluating the expression '%s'.\n"
380 "Maybe the expression for out_w:'%s' or for out_h:'%s' is self-referencing.\n",
381 expr,
s->w_expr,
s->h_expr);
388 int err_code = zimg_get_last_error(err_msg,
sizeof(err_msg));
397 switch (chroma_location) {
400 return ZIMG_CHROMA_LEFT;
402 return ZIMG_CHROMA_CENTER;
404 return ZIMG_CHROMA_TOP_LEFT;
406 return ZIMG_CHROMA_TOP;
408 return ZIMG_CHROMA_BOTTOM_LEFT;
410 return ZIMG_CHROMA_BOTTOM;
412 return ZIMG_CHROMA_LEFT;
417 switch (colorspace) {
419 return ZIMG_MATRIX_RGB;
421 return ZIMG_MATRIX_709;
423 return ZIMG_MATRIX_UNSPECIFIED;
425 return ZIMG_MATRIX_FCC;
427 return ZIMG_MATRIX_470BG;
429 return ZIMG_MATRIX_170M;
431 return ZIMG_MATRIX_240M;
433 return ZIMG_MATRIX_YCGCO;
435 return ZIMG_MATRIX_2020_NCL;
437 return ZIMG_MATRIX_2020_CL;
439 return ZIMG_MATRIX_CHROMATICITY_DERIVED_NCL;
441 return ZIMG_MATRIX_CHROMATICITY_DERIVED_CL;
443 return ZIMG_MATRIX_ICTCP;
445 return ZIMG_MATRIX_UNSPECIFIED;
452 return ZIMG_TRANSFER_UNSPECIFIED;
454 return ZIMG_TRANSFER_709;
456 return ZIMG_TRANSFER_470_M;
458 return ZIMG_TRANSFER_470_BG;
460 return ZIMG_TRANSFER_601;
462 return ZIMG_TRANSFER_240M;
464 return ZIMG_TRANSFER_LINEAR;
466 return ZIMG_TRANSFER_LOG_100;
468 return ZIMG_TRANSFER_LOG_316;
470 return ZIMG_TRANSFER_IEC_61966_2_4;
472 return ZIMG_TRANSFER_2020_10;
474 return ZIMG_TRANSFER_2020_12;
476 return ZIMG_TRANSFER_ST2084;
478 return ZIMG_TRANSFER_ARIB_B67;
480 return ZIMG_TRANSFER_IEC_61966_2_1;
482 return ZIMG_TRANSFER_UNSPECIFIED;
489 return ZIMG_PRIMARIES_UNSPECIFIED;
491 return ZIMG_PRIMARIES_709;
493 return ZIMG_PRIMARIES_470_M;
495 return ZIMG_PRIMARIES_470_BG;
497 return ZIMG_PRIMARIES_170M;
499 return ZIMG_PRIMARIES_240M;
501 return ZIMG_PRIMARIES_FILM;
503 return ZIMG_PRIMARIES_2020;
505 return ZIMG_PRIMARIES_ST428;
507 return ZIMG_PRIMARIES_ST431_2;
509 return ZIMG_PRIMARIES_ST432_1;
511 return ZIMG_PRIMARIES_EBU3213_E;
513 return ZIMG_PRIMARIES_UNSPECIFIED;
521 return ZIMG_RANGE_LIMITED;
523 return ZIMG_RANGE_FULL;
525 return ZIMG_RANGE_LIMITED;
531 case ZIMG_RANGE_LIMITED:
533 case ZIMG_RANGE_FULL:
542 return ((img_fmt0->chroma_location != img_fmt1->chroma_location) ||
543#
if ZIMG_API_VERSION >= 0x204
544 (img_fmt0->alpha != img_fmt1->alpha) ||
546 (img_fmt0->color_family != img_fmt1->color_family) ||
547 (img_fmt0->color_primaries != img_fmt1->color_primaries) ||
548 (img_fmt0->depth != img_fmt1->depth) ||
549 (img_fmt0->field_parity != img_fmt1->field_parity) ||
550 (img_fmt0->height != img_fmt1->height) ||
551 (img_fmt0->matrix_coefficients != img_fmt1->matrix_coefficients) ||
552 (img_fmt0->pixel_range != img_fmt1->pixel_range) ||
553 (img_fmt0->pixel_type != img_fmt1->pixel_type) ||
554 (img_fmt0->subsample_h != img_fmt1->subsample_h) ||
555 (img_fmt0->subsample_w != img_fmt1->subsample_w) ||
556 (img_fmt0->transfer_characteristics != img_fmt1->transfer_characteristics) ||
557 (img_fmt0->width != img_fmt1->width));
565 int ret = (parm0->allow_approximate_gamma != parm1->allow_approximate_gamma) ||
566 (parm0->dither_type != parm1->dither_type) ||
567 (parm0->resample_filter != parm1->resample_filter) ||
568 (parm0->resample_filter_uv != parm1->resample_filter_uv);
570 if ((
isnan(parm0->nominal_peak_luminance) == 0) || (
isnan(parm1->nominal_peak_luminance) == 0))
571 ret = ret || (parm0->nominal_peak_luminance != parm1->nominal_peak_luminance);
572 if ((
isnan(parm0->filter_param_a) == 0) || (
isnan(parm1->filter_param_a) == 0))
573 ret = ret || (parm0->filter_param_a != parm1->filter_param_a);
574 if ((
isnan(parm0->filter_param_a_uv) == 0) || (
isnan(parm1->filter_param_a_uv) == 0))
575 ret = ret || (parm0->filter_param_a_uv != parm1->filter_param_a_uv);
576 if ((
isnan(parm0->filter_param_b) == 0) || (
isnan(parm1->filter_param_b) == 0))
577 ret = ret || (parm0->filter_param_b != parm1->filter_param_b);
578 if ((
isnan(parm0->filter_param_b_uv) == 0) || (
isnan(parm1->filter_param_b_uv) == 0))
579 ret = ret || (parm0->filter_param_b_uv != parm1->filter_param_b_uv);
593 : (
desc->comp[0].depth > 8 ? ZIMG_PIXEL_WORD : ZIMG_PIXEL_BYTE);
595 : (
desc->nb_components > 1 ? ZIMG_COLOR_YUV : ZIMG_COLOR_GREY);
611 zimg_image_format src_format;
612 zimg_image_format dst_format;
613 const double in_slice_start =
s->in_slice_start[job_nr];
614 const double in_slice_end =
s->in_slice_end[job_nr];
615 const int out_slice_start =
s->out_slice_start[job_nr];
616 const int out_slice_end =
s->out_slice_end[job_nr];
618 src_format =
s->src_format;
619 dst_format =
s->dst_format;
623 src_format.active_region.width = in->
width;
624 src_format.active_region.height = in_slice_end - in_slice_start;
625 src_format.active_region.left = 0;
626 src_format.active_region.top = in_slice_start;
628 dst_format.width =
out->width;
629 dst_format.height = out_slice_end - out_slice_start;
631 if (
s->graph[job_nr]) {
632 zimg_filter_graph_free(
s->graph[job_nr]);
634 s->graph[job_nr] = zimg_filter_graph_build(&src_format, &dst_format, &
s->params);
635 if (!
s->graph[job_nr])
638 ret = zimg_filter_graph_get_tmp_size(
s->graph[job_nr], &
size);
657 int ret = 0, plane,
planes;
661 for (plane = 0; plane <
planes; plane++) {
662 int p =
desc->comp[plane].plane;
687 if (
s->primaries != -1)
688 frame->color_primaries = (int)
s->dst_format.color_primaries;
691 frame->color_trc = (int)
s->dst_format.transfer_characteristics;
693 if (
s->chromal != -1)
694 frame->chroma_location = (int)
s->dst_format.chroma_location + 1;
704 zimg_image_buffer_const src_buf = { ZIMG_API_VERSION };
705 zimg_image_buffer dst_buf = { ZIMG_API_VERSION };
706 const int out_slice_start =
s->out_slice_start[job_nr];
719 for (
int i = 0;
i < 4;
i++) {
725 src_buf.plane[
i].data = td->
in->
data[p];
727 src_buf.plane[
i].mask = -1;
732 dst_buf.plane[
i].data = td->
out->
data[p] + td->
out->
linesize[p] * (out_slice_start >> vsamp);
734 dst_buf.plane[
i].mask = -1;
737 if (!
s->graph[job_nr])
739 ret = zimg_filter_graph_process(
s->graph[job_nr], &src_buf, &dst_buf,
756 int ret = 0, changed = 0;
763 (link->
w != outlink->
w) ||
764 (link->
h != outlink->
h) ||
768 (
s->src_format.chroma_location !=
s->dst_format.chroma_location) ||
769 (
s->src_format.color_family !=
s->dst_format.color_family) ||
770 (
s->src_format.color_primaries !=
s->dst_format.color_primaries) ||
771 (
s->src_format.depth !=
s->dst_format.depth) ||
772 (
s->src_format.matrix_coefficients !=
s->dst_format.matrix_coefficients) ||
773 (
s->src_format.field_parity !=
s->dst_format.field_parity) ||
774 (
s->src_format.pixel_range !=
s->dst_format.pixel_range) ||
775 (
s->src_format.pixel_type !=
s->dst_format.pixel_type) ||
776 (
s->src_format.transfer_characteristics !=
s->dst_format.transfer_characteristics)
791 snprintf(buf,
sizeof(buf)-1,
"%d", outlink->
w);
793 snprintf(buf,
sizeof(buf)-1,
"%d", outlink->
h);
805 zimg_image_format_default(&
s->src_format, ZIMG_API_VERSION);
806 zimg_image_format_default(&
s->dst_format, ZIMG_API_VERSION);
807 zimg_graph_builder_params_default(&
s->params, ZIMG_API_VERSION);
810 s->primaries_in,
s->trc_in,
s->range_in,
s->chromal_in);
812 s->primaries,
s->trc,
s->range,
s->chromal);
815 s->params.dither_type =
s->dither;
816 s->params.cpu_type = ZIMG_CPU_AUTO_64B;
817 s->params.resample_filter =
s->filter;
818 s->params.resample_filter_uv =
s->filter;
819 s->params.nominal_peak_luminance =
s->nominal_peak_luminance;
820 s->params.allow_approximate_gamma =
s->approximate_gamma;
821 s->params.filter_param_a =
s->params.filter_param_a_uv =
s->param_a;
822 s->params.filter_param_b =
s->params.filter_param_b_uv =
s->param_b;
825 av_reduce(&
out->sample_aspect_ratio.num, &
out->sample_aspect_ratio.den,
841 memset(
s->jobs_ret, 0,
s->nb_threads *
sizeof(*
s->jobs_ret));
843 for (
int i = 0; ret >= 0 &&
i <
s->nb_threads;
i++)
844 if (
s->jobs_ret[
i] < 0)
845 ret =
s->jobs_ret[
i];
852 s->src_format_tmp =
s->src_format;
853 s->dst_format_tmp =
s->dst_format;
854 s->params_tmp =
s->params;
859 const uint16_t h_one = 0x3C00;
860 for (y = 0; y <
out->height; y++) {
861 const ptrdiff_t row = y *
out->linesize[3];
863 for (x = 0; x <
out->width; x++) {
867 for (x = 0; x <
out->width; x++) {
872 }
else if (
s->dst_format.depth == 8) {
873 for (y = 0; y < outlink->
h; y++)
874 memset(
out->data[3] + y *
out->linesize[3], 0xff, outlink->
w);
876 const uint16_t
max = (1 <<
s->dst_format.depth) - 1;
877 for (y = 0; y < outlink->
h; y++) {
878 const ptrdiff_t row = y *
out->linesize[3];
879 for (x = 0; x <
out->width; x++)
902 for (
int i = 0;
i <
s->nb_threads;
i++) {
905 zimg_filter_graph_free(
s->graph[
i]);
912 char *res,
int res_len,
int flags)
917 if ( !strcmp(cmd,
"width") || !strcmp(cmd,
"w")
918 || !strcmp(cmd,
"height") || !strcmp(cmd,
"h")) {
935#define OFFSET(x) offsetof(ZScaleContext, x)
936#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
937#define TFLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
951 {
"error_diffusion", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_DITHER_ERROR_DIFFUSION}, 0, 0,
FLAGS, .unit =
"dither" },
974 {
"unspecified", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_UNSPECIFIED}, 0, 0,
FLAGS, .unit =
"primaries" },
978 {
"unknown", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_UNSPECIFIED}, 0, 0,
FLAGS, .unit =
"primaries" },
987 {
"smpte431", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_ST431_2}, 0, 0,
FLAGS, .unit =
"primaries" },
988 {
"smpte432", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_ST432_1}, 0, 0,
FLAGS, .unit =
"primaries" },
989 {
"jedec-p22", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_EBU3213_E}, 0, 0,
FLAGS, .unit =
"primaries" },
990 {
"ebu3213", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_EBU3213_E}, 0, 0,
FLAGS, .unit =
"primaries" },
991 {
"transfer",
"set transfer characteristic",
OFFSET(trc),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"transfer" },
995 {
"unspecified", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_UNSPECIFIED}, 0, 0,
FLAGS, .unit =
"transfer" },
1000 {
"unknown", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_UNSPECIFIED}, 0, 0,
FLAGS, .unit =
"transfer" },
1009 {
"bt2020-10", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_2020_10}, 0, 0,
FLAGS, .unit =
"transfer" },
1010 {
"bt2020-12", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_2020_12}, 0, 0,
FLAGS, .unit =
"transfer" },
1011 {
"smpte2084", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_ST2084}, 0, 0,
FLAGS, .unit =
"transfer" },
1012 {
"iec61966-2-4", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_IEC_61966_2_4},0, 0,
FLAGS, .unit =
"transfer" },
1013 {
"iec61966-2-1", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_IEC_61966_2_1},0, 0,
FLAGS, .unit =
"transfer" },
1014 {
"arib-std-b67", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_ARIB_B67}, 0, 0,
FLAGS, .unit =
"transfer" },
1015 {
"matrix",
"set colorspace matrix",
OFFSET(colorspace),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"matrix" },
1019 {
"unspecified", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_MATRIX_UNSPECIFIED}, 0, 0,
FLAGS, .unit =
"matrix" },
1034 {
"chroma-derived-nc",0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_MATRIX_CHROMATICITY_DERIVED_NCL}, 0, 0,
FLAGS, .unit =
"matrix" },
1035 {
"chroma-derived-c", 0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_MATRIX_CHROMATICITY_DERIVED_CL}, 0, 0,
FLAGS, .unit =
"matrix" },
1037 {
"in_range",
"set input color range",
OFFSET(range_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_RANGE_FULL,
FLAGS, .unit =
"range" },
1038 {
"rangein",
"set input color range",
OFFSET(range_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_RANGE_FULL,
FLAGS, .unit =
"range" },
1039 {
"rin",
"set input color range",
OFFSET(range_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_RANGE_FULL,
FLAGS, .unit =
"range" },
1040 {
"primariesin",
"set input color primaries",
OFFSET(primaries_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"primaries" },
1041 {
"pin",
"set input color primaries",
OFFSET(primaries_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"primaries" },
1042 {
"transferin",
"set input transfer characteristic",
OFFSET(trc_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"transfer" },
1043 {
"tin",
"set input transfer characteristic",
OFFSET(trc_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"transfer" },
1044 {
"matrixin",
"set input colorspace matrix",
OFFSET(colorspace_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"matrix" },
1045 {
"min",
"set input colorspace matrix",
OFFSET(colorspace_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX,
FLAGS, .unit =
"matrix" },
1046 {
"chromal",
"set output chroma location",
OFFSET(chromal),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM,
FLAGS, .unit =
"chroma" },
1047 {
"c",
"set output chroma location",
OFFSET(chromal),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM,
FLAGS, .unit =
"chroma" },
1053 {
"bottomleft",0, 0,
AV_OPT_TYPE_CONST, {.i64 = ZIMG_CHROMA_BOTTOM_LEFT}, 0, 0,
FLAGS, .unit =
"chroma" },
1055 {
"chromalin",
"set input chroma location",
OFFSET(chromal_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM,
FLAGS, .unit =
"chroma" },
1056 {
"cin",
"set input chroma location",
OFFSET(chromal_in),
AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM,
FLAGS, .unit =
"chroma" },
1059 {
"param_a",
"parameter A, which is parameter \"b\" for bicubic, "
1086 .p.priv_class = &zscale_class,
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
static const char *const format[]
const FFFilter ff_vf_zscale
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int ff_filter_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
Main libavfilter public API header.
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
static const double approximate_gamma[AVCOL_TRC_NB]
static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB]
static __device__ float trunc(float a)
static int aligned(int val)
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
int(* init)(AVBSFContext *ctx)
int av_expr_parse_and_eval(double *d, const char *s, const char *const *const_names, const double *const_values, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx)
Parse and evaluate an expression.
simple arithmetic expression evaluator
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_DOUBLE
Underlying C type is double.
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
#define AVERROR_EXTERNAL
Generic error in an external library.
void av_frame_side_data_remove_by_props(AVFrameSideData ***sd, int *nb_sd, int props)
Remove and free all side data instances that match any of the given side data properties.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
int av_frame_copy(AVFrame *dst, const AVFrame *src)
Copy the frame data from src to dst.
@ AV_SIDE_DATA_PROP_SIZE_DEPENDENT
Side data depends on the video dimensions.
@ AV_SIDE_DATA_PROP_COLOR_DEPENDENT
Side data depends on the video color space.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
static av_always_inline uint32_t av_float2int(float f)
Reinterpret a float as a 32-bit integer.
static av_cold void uninit(AVBitStreamFilterContext *ctx)
#define FILTER_INPUTS(array)
#define FILTER_OUTPUTS(array)
#define AVFILTER_DEFINE_CLASS(fname)
#define FILTER_QUERY_FUNC2(func)
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static const struct @257111027162314367033347246032313251342043035002 planes[]
#define FFSWAP(type, a, b)
Memory handling functions.
static int slice_end(AVCodecContext *avctx, AVFrame *pict, int *got_output)
Handle slice ends.
static const char *const var_names[]
int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str)
Parse str and put in width_ptr and height_ptr the detected values.
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
const char * av_color_space_name(enum AVColorSpace space)
const char * av_color_range_name(enum AVColorRange range)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
#define AV_PIX_FMT_FLAG_FLOAT
The pixel format contains IEEE-754 floating point values.
#define AV_PIX_FMT_GBRAP12
#define AV_PIX_FMT_YUV420P16
#define AV_PIX_FMT_GBRPF32
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
AVChromaLocation
Location of chroma samples.
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
@ AVCHROMA_LOC_BOTTOMLEFT
@ AVCHROMA_LOC_CENTER
MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0.
@ AVCHROMA_LOC_UNSPECIFIED
#define AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_GRAYF16
#define AV_PIX_FMT_GBRAP16
#define AV_PIX_FMT_YUV422P9
AVColorRange
Visual content value range.
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
@ AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_JPEG
Full range content.
#define AV_PIX_FMT_YUVA444P10
#define AV_PIX_FMT_YUVA420P16
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUVA420P10
@ AVALPHA_MODE_PREMULTIPLIED
Alpha channel is multiplied into color values.
#define AV_PIX_FMT_YUVA422P9
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_GBRAP14
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_GBRAPF16
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUVA420P9
#define AV_PIX_FMT_YUVA422P10
#define AV_PIX_FMT_GRAYF32
#define AV_PIX_FMT_YUV420P14
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AV_PIX_FMT_YUVJ440P
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_YUVJ411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor ...
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
#define AV_PIX_FMT_YUVA422P12
#define AV_PIX_FMT_YUV422P14
#define AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GBRPF16
#define AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_GBRAP10
AVColorPrimaries
Chromaticity coordinates of the source primaries.
@ AVCOL_PRI_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
@ AVCOL_PRI_FILM
colour filters using Illuminant C
@ AVCOL_PRI_SMPTE432
SMPTE ST 432-1 (2010) / P3 D65 / Display P3.
@ AVCOL_PRI_BT709
also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B
@ AVCOL_PRI_SMPTE240M
identical to above, also called "SMPTE C" even though it uses D65
@ AVCOL_PRI_SMPTE431
SMPTE ST 431-2 (2011) / DCI P3.
@ AVCOL_PRI_SMPTE428
SMPTE ST 428-1 (CIE 1931 XYZ)
@ AVCOL_PRI_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
@ AVCOL_PRI_BT2020
ITU-R BT2020.
@ AVCOL_PRI_BT470M
also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
AVColorTransferCharacteristic
Color Transfer Characteristic.
@ AVCOL_TRC_SMPTE170M
also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
@ AVCOL_TRC_SMPTE2084
SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems.
@ AVCOL_TRC_GAMMA22
also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
@ AVCOL_TRC_LOG
"Logarithmic transfer characteristic (100:1 range)"
@ AVCOL_TRC_IEC61966_2_4
IEC 61966-2-4.
@ AVCOL_TRC_LINEAR
"Linear transfer characteristics"
@ AVCOL_TRC_GAMMA28
also ITU-R BT470BG
@ AVCOL_TRC_ARIB_STD_B67
ARIB STD-B67, known as "Hybrid log-gamma".
@ AVCOL_TRC_LOG_SQRT
"Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)"
@ AVCOL_TRC_BT2020_12
ITU-R BT2020 for 12-bit system.
@ AVCOL_TRC_IEC61966_2_1
IEC 61966-2-1 (sRGB or sYCC)
@ AVCOL_TRC_BT2020_10
ITU-R BT2020 for 10-bit system.
@ AVCOL_TRC_BT709
also ITU-R BT1361
#define AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_YUVA422P16
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUVA444P9
#define AV_PIX_FMT_GBRP14
#define AV_PIX_FMT_YUVA444P12
#define AV_PIX_FMT_GBRAPF32
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV444P10
AVColorSpace
YUV colorspace type.
@ AVCOL_SPC_BT709
also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B
@ AVCOL_SPC_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
@ AVCOL_SPC_CHROMA_DERIVED_CL
Chromaticity-derived constant luminance system.
@ AVCOL_SPC_BT2020_CL
ITU-R BT2020 constant luminance system.
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
@ AVCOL_SPC_BT2020_NCL
ITU-R BT2020 non-constant luminance system.
@ AVCOL_SPC_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
@ AVCOL_SPC_FCC
FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
@ AVCOL_SPC_CHROMA_DERIVED_NCL
Chromaticity-derived non-constant luminance system.
@ AVCOL_SPC_SMPTE240M
derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries
@ AVCOL_SPC_YCGCO
used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
@ AVCOL_SPC_ICTCP
ITU-R BT.2100-0, ICtCp.
static int config_props(AVBitStreamFilterLink *link)
Describe the class of an AVClass context structure.
int plane
Which of the 4 planes contains the component.
int step
Number of elements between 2 horizontally consecutive pixels.
int depth
Number of bits in the component.
AVFilterLink ** inputs
array of pointers to input links
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
AVFilterContext * src
source filter
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
enum AVColorSpace colorspace
For non-YUV links, these are respectively set to fallback values (as appropriate for that colorspace)...
AVFilterContext * dst
dest filter
int format
agreed upon media format
enum AVColorRange color_range
agreed upon YUV color range
A filter pad used for either input or output.
This structure describes decoded (raw) audio or video data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
enum AVColorPrimaries color_primaries
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
enum AVColorRange color_range
MPEG vs JPEG YUV range.
enum AVColorSpace colorspace
YUV colorspace type.
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
enum AVColorTransferCharacteristic color_trc
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
uint64_t flags
Combination of AV_PIX_FMT_FLAG_... flags.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Rational number (pair of numerator and denominator).
Used for passing data between threads.
const AVPixFmtDescriptor * desc
const AVPixFmtDescriptor * odesc
double nominal_peak_luminance
double in_slice_end[MAX_THREADS]
zimg_image_format src_format_tmp
zimg_graph_builder_params params
int force_original_aspect_ratio
zimg_filter_graph * graph[MAX_THREADS]
double in_slice_start[MAX_THREADS]
zimg_image_format dst_format
int out_slice_start[MAX_THREADS]
char * w_expr
width expression string
zimg_graph_builder_params params_tmp
zimg_image_format dst_format_tmp
int jobs_ret[MAX_THREADS]
zimg_image_format src_format
char * h_expr
height expression string
int out_slice_end[MAX_THREADS]
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
static AVFormatContext * ctx
static enum AVPixelFormat pixel_fmts[]
static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
static const uint16_t dither[8][8]
static int config_props(AVFilterLink *outlink)
static int print_zimg_error(AVFilterContext *ctx)
static int convert_trc(enum AVColorTransferCharacteristic color_trc)
static int convert_range(enum AVColorRange color_range)
static int filter_frame(AVFilterLink *link, AVFrame *in)
static int filter_slice(AVFilterContext *ctx, void *data, int job_nr, int n_jobs)
static void slice_params(ZScaleContext *s, int out_h, int in_h)
static void format_init(zimg_image_format *format, AVFrame *frame, const AVPixFmtDescriptor *desc, int colorspace, int primaries, int transfer, int range, int location)
static int convert_primaries(enum AVColorPrimaries color_primaries)
static int compare_zimg_image_formats(zimg_image_format *img_fmt0, zimg_image_format *img_fmt1)
static int graphs_build(AVFrame *in, AVFrame *out, const AVPixFmtDescriptor *desc, const AVPixFmtDescriptor *out_desc, AVFilterContext *ctx, int job_nr, int n_jobs)
static int convert_matrix(enum AVColorSpace colorspace)
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
static int realign_frame(AVFilterLink *link, const AVPixFmtDescriptor *desc, AVFrame **frame)
static av_cold void uninit(AVFilterContext *ctx)
static int convert_chroma_location(enum AVChromaLocation chroma_location)
static const AVFilterPad avfilter_vf_zscale_outputs[]
static const AVOption zscale_options[]
static int compare_zimg_graph_builder_params(zimg_graph_builder_params *parm0, zimg_graph_builder_params *parm1)
static void update_output_color_information(ZScaleContext *s, AVFrame *frame)
static enum AVColorRange convert_range_from_zimg(enum zimg_pixel_range_e color_range)
static const AVFilterPad avfilter_vf_zscale_inputs[]
AVFrame * ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int align)