mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-02-04 14:30:55 +08:00
swscale/graph: pass per-pass image pointers to setup()
This behavior had no real justification and was just incredibly confusing, since the in/out pointers passet to setup() did not match those passed to run(), all for what is arguably an exception anyways (the palette setup).
This commit is contained in:
@@ -169,6 +169,8 @@ static void free_legacy_swscale(void *priv)
|
||||
static void setup_legacy_swscale(const SwsImg *out, const SwsImg *in,
|
||||
const SwsPass *pass)
|
||||
{
|
||||
const SwsGraph *graph = pass->graph;
|
||||
const SwsImg *in_orig = &graph->exec.input;
|
||||
SwsContext *sws = pass->priv;
|
||||
SwsInternal *c = sws_internal(sws);
|
||||
if (sws->flags & SWS_BITEXACT && sws->dither == SWS_DITHER_ED && c->dither_error[0]) {
|
||||
@@ -177,7 +179,7 @@ static void setup_legacy_swscale(const SwsImg *out, const SwsImg *in,
|
||||
}
|
||||
|
||||
if (usePal(sws->src_format))
|
||||
ff_update_palette(c, (const uint32_t *) in->data[1]);
|
||||
ff_update_palette(c, (const uint32_t *) in_orig->data[1]);
|
||||
}
|
||||
|
||||
static inline SwsContext *slice_ctx(const SwsPass *pass, int y)
|
||||
@@ -715,8 +717,10 @@ void ff_sws_graph_run(SwsGraph *graph, uint8_t *const out_data[4],
|
||||
for (int i = 0; i < graph->num_passes; i++) {
|
||||
const SwsPass *pass = graph->passes[i];
|
||||
graph->exec.pass = pass;
|
||||
if (pass->setup)
|
||||
pass->setup(out, in, pass);
|
||||
if (pass->setup) {
|
||||
pass->setup(pass->output.fmt != AV_PIX_FMT_NONE ? &pass->output : out,
|
||||
pass->input ? &pass->input->output : in, pass);
|
||||
}
|
||||
avpriv_slicethread_execute(graph->slicethread, pass->num_slices, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,8 +92,6 @@ struct SwsPass {
|
||||
|
||||
/**
|
||||
* Called once from the main thread before running the filter. Optional.
|
||||
* `out` and `in` always point to the main image input/output, regardless
|
||||
* of `input` and `output` fields.
|
||||
*/
|
||||
void (*setup)(const SwsImg *out, const SwsImg *in, const SwsPass *pass);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user