[FFmpeg-devel] [PATCH 07/17] swscale/graph: settle colorspace metadata before scaling
Niklas Haas
ffmpeg at haasn.xyz
Thu Dec 5 13:30:16 EET 2024
From: Niklas Haas <git at haasn.dev>
Take special care to handle grayscale formats without a colorspace
gracefully.
---
libswscale/graph.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/libswscale/graph.c b/libswscale/graph.c
index fbad1fe8c3..36b74fad0c 100644
--- a/libswscale/graph.c
+++ b/libswscale/graph.c
@@ -521,8 +521,21 @@ int sws_graph_create(SwsContext *ctx, const SwsFormat *dst, const SwsFormat *src
graph->field = field;
graph->opts_copy = *ctx;
- graph->exec.input.fmt = src->format;
- graph->exec.output.fmt = dst->format;
+ /**
+ * Grayspace does not really have primaries, so just force the use of
+ * the equivalent other primary set to avoid a conversion. Technically,
+ * this does affect the weights used for the Grayscale conversion, but
+ * in practise, that should give the expected results more often than not.
+ */
+ if (isGray(dst->format)) {
+ graph->dst.color = graph->src.color;
+ } else if (isGray(src->format)) {
+ graph->src.color = graph->dst.color;
+ }
+
+ graph->incomplete = ff_infer_colors(&graph->src.color, &graph->dst.color);
+ graph->exec.input.fmt = graph->src.format;
+ graph->exec.output.fmt = graph->dst.format;
ret = avpriv_slicethread_create(&graph->slicethread, (void *) graph,
sws_graph_worker, NULL, ctx->threads);
--
2.47.0
More information about the ffmpeg-devel
mailing list