Commit 531ff716 authored by Ronald S. Bultje's avatar Ronald S. Bultje

vf_colorspace: don't enable passthrough if bitdepth doesn't match.

Also check return value of av_frame_copy() in passthrough mode, so that
if a copy fails (as it did here, because bitdepth didn't match), the filter
doesn't return success, which would mean sending an uninitialized framebuffer
further down the filtergraph.
parent 356c1165
...@@ -719,7 +719,8 @@ static int create_filtergraph(AVFilterContext *ctx, ...@@ -719,7 +719,8 @@ static int create_filtergraph(AVFilterContext *ctx,
s->yuv2yuv_fastmode = s->rgb2rgb_passthrough && fmt_identical; s->yuv2yuv_fastmode = s->rgb2rgb_passthrough && fmt_identical;
s->yuv2yuv_passthrough = s->yuv2yuv_fastmode && s->in_rng == s->out_rng && s->yuv2yuv_passthrough = s->yuv2yuv_fastmode && s->in_rng == s->out_rng &&
!memcmp(s->in_lumacoef, s->out_lumacoef, !memcmp(s->in_lumacoef, s->out_lumacoef,
sizeof(*s->in_lumacoef)); sizeof(*s->in_lumacoef)) &&
in_desc->comp[0].depth == out_desc->comp[0].depth;
if (!s->yuv2yuv_passthrough) { if (!s->yuv2yuv_passthrough) {
if (redo_yuv2rgb) { if (redo_yuv2rgb) {
double rgb2yuv[3][3], (*yuv2rgb)[3] = s->yuv2rgb_dbl_coeffs; double rgb2yuv[3][3], (*yuv2rgb)[3] = s->yuv2rgb_dbl_coeffs;
...@@ -937,7 +938,9 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) ...@@ -937,7 +938,9 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
td.in_ss_h = av_pix_fmt_desc_get(in->format)->log2_chroma_h; td.in_ss_h = av_pix_fmt_desc_get(in->format)->log2_chroma_h;
td.out_ss_h = av_pix_fmt_desc_get(out->format)->log2_chroma_h; td.out_ss_h = av_pix_fmt_desc_get(out->format)->log2_chroma_h;
if (s->yuv2yuv_passthrough) { if (s->yuv2yuv_passthrough) {
av_frame_copy(out, in); res = av_frame_copy(out, in);
if (res < 0)
return res;
} else { } else {
ctx->internal->execute(ctx, convert, &td, NULL, ctx->internal->execute(ctx, convert, &td, NULL,
FFMIN((in->height + 1) >> 1, ctx->graph->nb_threads)); FFMIN((in->height + 1) >> 1, ctx->graph->nb_threads));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment