|
|
@ -780,6 +780,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) |
|
|
|
res = av_frame_copy_props(out, in); |
|
|
|
res = av_frame_copy_props(out, in); |
|
|
|
if (res < 0) { |
|
|
|
if (res < 0) { |
|
|
|
av_frame_free(&in); |
|
|
|
av_frame_free(&in); |
|
|
|
|
|
|
|
av_frame_free(&out); |
|
|
|
return res; |
|
|
|
return res; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -839,13 +840,18 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) |
|
|
|
!s->dither_scratch_base[1][0] || !s->dither_scratch_base[1][1] || |
|
|
|
!s->dither_scratch_base[1][0] || !s->dither_scratch_base[1][1] || |
|
|
|
!s->dither_scratch_base[2][0] || !s->dither_scratch_base[2][1]) { |
|
|
|
!s->dither_scratch_base[2][0] || !s->dither_scratch_base[2][1]) { |
|
|
|
uninit(ctx); |
|
|
|
uninit(ctx); |
|
|
|
|
|
|
|
av_frame_free(&in); |
|
|
|
|
|
|
|
av_frame_free(&out); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
} |
|
|
|
s->rgb_sz = rgb_sz; |
|
|
|
s->rgb_sz = rgb_sz; |
|
|
|
} |
|
|
|
} |
|
|
|
res = create_filtergraph(ctx, in, out); |
|
|
|
res = create_filtergraph(ctx, in, out); |
|
|
|
if (res < 0) |
|
|
|
if (res < 0) { |
|
|
|
|
|
|
|
av_frame_free(&in); |
|
|
|
|
|
|
|
av_frame_free(&out); |
|
|
|
return res; |
|
|
|
return res; |
|
|
|
|
|
|
|
} |
|
|
|
s->rgb_stride = rgb_stride / sizeof(int16_t); |
|
|
|
s->rgb_stride = rgb_stride / sizeof(int16_t); |
|
|
|
td.in = in; |
|
|
|
td.in = in; |
|
|
|
td.out = out; |
|
|
|
td.out = out; |
|
|
@ -859,8 +865,11 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) |
|
|
|
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) { |
|
|
|
res = av_frame_copy(out, in); |
|
|
|
res = av_frame_copy(out, in); |
|
|
|
if (res < 0) |
|
|
|
if (res < 0) { |
|
|
|
|
|
|
|
av_frame_free(&in); |
|
|
|
|
|
|
|
av_frame_free(&out); |
|
|
|
return res; |
|
|
|
return res; |
|
|
|
|
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
ctx->internal->execute(ctx, convert, &td, NULL, |
|
|
|
ctx->internal->execute(ctx, convert, &td, NULL, |
|
|
|
FFMIN((in->height + 1) >> 1, ff_filter_get_nb_threads(ctx))); |
|
|
|
FFMIN((in->height + 1) >> 1, ff_filter_get_nb_threads(ctx))); |
|
|
|