summaryrefslogtreecommitdiff
path: root/libavfilter/vf_scale.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavfilter/vf_scale.c')
-rw-r--r--libavfilter/vf_scale.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
index 44f85cb019..996f7aaa5b 100644
--- a/libavfilter/vf_scale.c
+++ b/libavfilter/vf_scale.c
@@ -138,6 +138,7 @@ typedef struct ScaleContext {
char *out_color_matrix;
int in_range;
+ int in_frame_range;
int out_range;
int out_h_chr_pos;
@@ -322,6 +323,8 @@ static av_cold int init_dict(AVFilterContext *ctx, AVDictionary **opts)
scale->opts = *opts;
*opts = NULL;
+ scale->in_frame_range = AVCOL_RANGE_UNSPECIFIED;
+
return 0;
}
@@ -544,6 +547,9 @@ static int config_props(AVFilterLink *outlink)
if (scale->in_range != AVCOL_RANGE_UNSPECIFIED)
av_opt_set_int(s, "src_range",
scale->in_range == AVCOL_RANGE_JPEG, 0);
+ else if (scale->in_frame_range != AVCOL_RANGE_UNSPECIFIED)
+ av_opt_set_int(s, "src_range",
+ scale->in_frame_range == AVCOL_RANGE_JPEG, 0);
if (scale->out_range != AVCOL_RANGE_UNSPECIFIED)
av_opt_set_int(s, "dst_range",
scale->out_range == AVCOL_RANGE_JPEG, 0);
@@ -690,6 +696,13 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out)
in->sample_aspect_ratio.den != link->sample_aspect_ratio.den ||
in->sample_aspect_ratio.num != link->sample_aspect_ratio.num;
+ if (in->color_range != AVCOL_RANGE_UNSPECIFIED &&
+ scale->in_range == AVCOL_RANGE_UNSPECIFIED &&
+ in->color_range != scale->in_frame_range) {
+ scale->in_frame_range = in->color_range;
+ frame_changed = 1;
+ }
+
if (scale->eval_mode == EVAL_MODE_FRAME || frame_changed) {
unsigned vars_w[VARS_NB] = { 0 }, vars_h[VARS_NB] = { 0 };