lavfi/vf_libplacebo: fix side data stripping logic
This was accidentally comparing s->colorspace against out->colorspace, which is wrong - the intent was to compare in->colorspace against out->colorspace. We also forgot to strip mastering metadata. Finally, the order is sort of wrong - we should strip this side data *before* process_frames, because otherwise it may end up being seen and used by libplacebo. Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
		
							parent
							
								
									479f3c6598
								
							
						
					
					
						commit
						ecf09764dc
					
				| @ -390,7 +390,7 @@ fail: | |||||||
| 
 | 
 | ||||||
| static int filter_frame(AVFilterLink *link, AVFrame *in) | static int filter_frame(AVFilterLink *link, AVFrame *in) | ||||||
| { | { | ||||||
|     int err, changed; |     int err, changed_csp; | ||||||
|     AVFilterContext *ctx = link->dst; |     AVFilterContext *ctx = link->dst; | ||||||
|     LibplaceboContext *s = ctx->priv; |     LibplaceboContext *s = ctx->priv; | ||||||
|     AVFilterLink *outlink = ctx->outputs[0]; |     AVFilterLink *outlink = ctx->outputs[0]; | ||||||
| @ -426,22 +426,25 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) | |||||||
|     if (s->color_primaries >= 0) |     if (s->color_primaries >= 0) | ||||||
|         out->color_primaries = s->color_primaries; |         out->color_primaries = s->color_primaries; | ||||||
| 
 | 
 | ||||||
|     RET(process_frames(ctx, out, in)); |     changed_csp = in->colorspace      != out->colorspace     || | ||||||
| 
 |                   in->color_range     != out->color_range    || | ||||||
|     int changed_csp = s->colorspace      != out->colorspace     || |                   in->color_trc       != out->color_trc      || | ||||||
|                       s->color_range     != out->color_range    || |                   in->color_primaries != out->color_primaries; | ||||||
|                       s->color_trc       != out->color_trc      || |  | ||||||
|                       s->color_primaries != out->color_primaries; |  | ||||||
| 
 | 
 | ||||||
|  |     /* Strip side data if no longer relevant */ | ||||||
|  |     if (changed_csp) { | ||||||
|  |         av_frame_remove_side_data(out, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); | ||||||
|  |         av_frame_remove_side_data(out, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); | ||||||
|  |     } | ||||||
|     if (s->apply_dovi || changed_csp) { |     if (s->apply_dovi || changed_csp) { | ||||||
|         /* Strip side data if no longer relevant */ |  | ||||||
|         av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_RPU_BUFFER); |         av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_RPU_BUFFER); | ||||||
|         av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_METADATA); |         av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_METADATA); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     if (s->apply_filmgrain) |     if (s->apply_filmgrain) | ||||||
|         av_frame_remove_side_data(out, AV_FRAME_DATA_FILM_GRAIN_PARAMS); |         av_frame_remove_side_data(out, AV_FRAME_DATA_FILM_GRAIN_PARAMS); | ||||||
| 
 | 
 | ||||||
|  |     RET(process_frames(ctx, out, in)); | ||||||
|  | 
 | ||||||
|     av_frame_free(&in); |     av_frame_free(&in); | ||||||
| 
 | 
 | ||||||
|     return ff_filter_frame(outlink, out); |     return ff_filter_frame(outlink, out); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user