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) | ||||
| { | ||||
|     int err, changed; | ||||
|     int err, changed_csp; | ||||
|     AVFilterContext *ctx = link->dst; | ||||
|     LibplaceboContext *s = ctx->priv; | ||||
|     AVFilterLink *outlink = ctx->outputs[0]; | ||||
| @ -426,22 +426,25 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) | ||||
|     if (s->color_primaries >= 0) | ||||
|         out->color_primaries = s->color_primaries; | ||||
| 
 | ||||
|     RET(process_frames(ctx, out, in)); | ||||
|     changed_csp = in->colorspace      != out->colorspace     || | ||||
|                   in->color_range     != out->color_range    || | ||||
|                   in->color_trc       != out->color_trc      || | ||||
|                   in->color_primaries != out->color_primaries; | ||||
| 
 | ||||
|     int changed_csp = s->colorspace      != out->colorspace     || | ||||
|                       s->color_range     != out->color_range    || | ||||
|                       s->color_trc       != out->color_trc      || | ||||
|                       s->color_primaries != out->color_primaries; | ||||
| 
 | ||||
|     if (s->apply_dovi || changed_csp) { | ||||
|     /* 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) { | ||||
|         av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_RPU_BUFFER); | ||||
|         av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_METADATA); | ||||
|     } | ||||
| 
 | ||||
|     if (s->apply_filmgrain) | ||||
|         av_frame_remove_side_data(out, AV_FRAME_DATA_FILM_GRAIN_PARAMS); | ||||
| 
 | ||||
|     RET(process_frames(ctx, out, in)); | ||||
| 
 | ||||
|     av_frame_free(&in); | ||||
| 
 | ||||
|     return ff_filter_frame(outlink, out); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user