mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
vf_scale: use sws_init_context()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
353f302250
commit
37ded53037
@ -259,25 +259,35 @@ static int config_props(AVFilterLink *outlink)
|
|||||||
|
|
||||||
if (scale->sws)
|
if (scale->sws)
|
||||||
sws_freeContext(scale->sws);
|
sws_freeContext(scale->sws);
|
||||||
|
if (scale->isws[0])
|
||||||
|
sws_freeContext(scale->isws[0]);
|
||||||
|
if (scale->isws[1])
|
||||||
|
sws_freeContext(scale->isws[1]);
|
||||||
|
scale->isws[0] = scale->isws[1] = scale->sws = NULL;
|
||||||
if (inlink->w == outlink->w && inlink->h == outlink->h &&
|
if (inlink->w == outlink->w && inlink->h == outlink->h &&
|
||||||
inlink->format == outlink->format)
|
inlink->format == outlink->format)
|
||||||
scale->sws = NULL;
|
;
|
||||||
else {
|
else {
|
||||||
scale->sws = sws_getContext(inlink ->w, inlink ->h, inlink ->format,
|
struct SwsContext **swscs[3] = {&scale->sws, &scale->isws[0], &scale->isws[1]};
|
||||||
outlink->w, outlink->h, outfmt,
|
int i;
|
||||||
scale->flags, NULL, NULL, NULL);
|
|
||||||
if (scale->isws[0])
|
for (i = 0; i < 3; i++) {
|
||||||
sws_freeContext(scale->isws[0]);
|
struct SwsContext **s = swscs[i];
|
||||||
scale->isws[0] = sws_getContext(inlink ->w, inlink ->h/2, inlink ->format,
|
*s = sws_alloc_context();
|
||||||
outlink->w, outlink->h/2, outfmt,
|
if (!*s)
|
||||||
scale->flags, NULL, NULL, NULL);
|
return AVERROR(ENOMEM);
|
||||||
if (scale->isws[1])
|
|
||||||
sws_freeContext(scale->isws[1]);
|
av_opt_set_int(*s, "srcw", inlink ->w, 0);
|
||||||
scale->isws[1] = sws_getContext(inlink ->w, inlink ->h/2, inlink ->format,
|
av_opt_set_int(*s, "srch", inlink ->h >> !!i, 0);
|
||||||
outlink->w, outlink->h/2, outfmt,
|
av_opt_set_int(*s, "src_format", inlink->format, 0);
|
||||||
scale->flags, NULL, NULL, NULL);
|
av_opt_set_int(*s, "dstw", outlink->w, 0);
|
||||||
if (!scale->sws || !scale->isws[0] || !scale->isws[1])
|
av_opt_set_int(*s, "dsth", outlink->h >> !!i, 0);
|
||||||
return AVERROR(EINVAL);
|
av_opt_set_int(*s, "dst_format", outfmt, 0);
|
||||||
|
av_opt_set_int(*s, "sws_flags", scale->flags, 0);
|
||||||
|
|
||||||
|
if ((ret = sws_init_context(*s, NULL, NULL)) < 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inlink->sample_aspect_ratio.num){
|
if (inlink->sample_aspect_ratio.num){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user