You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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:
		| @@ -213,11 +213,16 @@ static int config_props(AVFilterLink *outlink) | ||||
|  | ||||
|     if (scale->sws) | ||||
|         sws_freeContext(scale->sws); | ||||
|     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->w == outlink->w && inlink->h == outlink->h && | ||||
|         inlink->format == outlink->format) | ||||
|         scale->sws = NULL; | ||||
|     else { | ||||
|         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) | ||||
| @@ -241,6 +246,11 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) | ||||
|     AVFilterLink *outlink = link->dst->outputs[0]; | ||||
|     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->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; | ||||
|     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) | ||||
|         scale->slice_y = link->dst->outputs[0]->h; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user