vf_scale: avoid a pointless memcpy in no-op conversion.
I.e. just pass the buffer along when src parameters == dst parameters.
This commit is contained in:
parent
63736fe48c
commit
416fd90ead
@ -213,11 +213,16 @@ static int config_props(AVFilterLink *outlink)
|
|||||||
|
|
||||||
if (scale->sws)
|
if (scale->sws)
|
||||||
sws_freeContext(scale->sws);
|
sws_freeContext(scale->sws);
|
||||||
scale->sws = sws_getContext(inlink ->w, inlink ->h, inlink ->format,
|
if (inlink->w == outlink->w && inlink->h == outlink->h &&
|
||||||
outlink->w, outlink->h, outlink->format,
|
inlink->format == outlink->format)
|
||||||
scale->flags, NULL, NULL, NULL);
|
scale->sws = NULL;
|
||||||
if (!scale->sws)
|
else {
|
||||||
return AVERROR(EINVAL);
|
scale->sws = sws_getContext(inlink ->w, inlink ->h, inlink ->format,
|
||||||
|
outlink->w, outlink->h, outlink->format,
|
||||||
|
scale->flags, NULL, NULL, NULL);
|
||||||
|
if (!scale->sws)
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (inlink->sample_aspect_ratio.num)
|
if (inlink->sample_aspect_ratio.num)
|
||||||
@ -241,6 +246,11 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
|||||||
AVFilterLink *outlink = link->dst->outputs[0];
|
AVFilterLink *outlink = link->dst->outputs[0];
|
||||||
AVFilterBufferRef *outpicref;
|
AVFilterBufferRef *outpicref;
|
||||||
|
|
||||||
|
if (!scale->sws) {
|
||||||
|
avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
scale->hsub = av_pix_fmt_descriptors[link->format].log2_chroma_w;
|
scale->hsub = av_pix_fmt_descriptors[link->format].log2_chroma_w;
|
||||||
scale->vsub = av_pix_fmt_descriptors[link->format].log2_chroma_h;
|
scale->vsub = av_pix_fmt_descriptors[link->format].log2_chroma_h;
|
||||||
|
|
||||||
@ -267,6 +277,11 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
|||||||
AVFilterBufferRef *cur_pic = link->cur_buf;
|
AVFilterBufferRef *cur_pic = link->cur_buf;
|
||||||
const uint8_t *data[4];
|
const uint8_t *data[4];
|
||||||
|
|
||||||
|
if (!scale->sws) {
|
||||||
|
avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (scale->slice_y == 0 && slice_dir == -1)
|
if (scale->slice_y == 0 && slice_dir == -1)
|
||||||
scale->slice_y = link->dst->outputs[0]->h;
|
scale->slice_y = link->dst->outputs[0]->h;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user