mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
lavfi/vf_libplacebo: add in_idx variable
To allow placing an input dynamically, as a function of the input index.
This commit is contained in:
parent
7645c8df66
commit
5989719e87
@ -16320,6 +16320,8 @@ the @option{crop_w}, @option{crop_h}, @option{crop_x}, @option{crop_y},
|
||||
also contain the following constants:
|
||||
|
||||
@table @option
|
||||
@item in_idx, idx
|
||||
The (0-based) numeric index of the currently active input stream.
|
||||
@item crop_w, cw
|
||||
@item crop_h, ch
|
||||
The computed values of @option{crop_w} and @option{crop_h}.
|
||||
|
@ -70,6 +70,7 @@ enum {
|
||||
};
|
||||
|
||||
static const char *const var_names[] = {
|
||||
"in_idx", "idx",///< index of input
|
||||
"in_w", "iw", ///< width of the input video frame
|
||||
"in_h", "ih", ///< height of the input video frame
|
||||
"out_w", "ow", ///< width of the output video frame
|
||||
@ -92,6 +93,7 @@ static const char *const var_names[] = {
|
||||
};
|
||||
|
||||
enum var_name {
|
||||
VAR_IN_IDX, VAR_IDX,
|
||||
VAR_IN_W, VAR_IW,
|
||||
VAR_IN_H, VAR_IH,
|
||||
VAR_OUT_W, VAR_OW,
|
||||
@ -115,6 +117,7 @@ enum var_name {
|
||||
|
||||
/* per-input dynamic filter state */
|
||||
typedef struct LibplaceboInput {
|
||||
int idx;
|
||||
pl_renderer renderer;
|
||||
pl_queue queue;
|
||||
enum pl_queue_status qstatus;
|
||||
@ -574,7 +577,7 @@ static void unlock_queue(void *priv, uint32_t qf, uint32_t qidx)
|
||||
#endif
|
||||
|
||||
static int input_init(AVFilterContext *avctx, AVFilterLink *link,
|
||||
LibplaceboInput *input)
|
||||
LibplaceboInput *input, int idx)
|
||||
{
|
||||
LibplaceboContext *s = avctx->priv;
|
||||
|
||||
@ -584,6 +587,7 @@ static int input_init(AVFilterContext *avctx, AVFilterLink *link,
|
||||
input->queue = pl_queue_create(s->gpu);
|
||||
input->renderer = pl_renderer_create(s->log, s->gpu);
|
||||
input->link = link;
|
||||
input->idx = idx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -668,7 +672,7 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct
|
||||
if (!s->inputs)
|
||||
return AVERROR(ENOMEM);
|
||||
for (int i = 0; i < s->nb_inputs; i++)
|
||||
RET(input_init(avctx, avctx->inputs[i], &s->inputs[i]));
|
||||
RET(input_init(avctx, avctx->inputs[i], &s->inputs[i], i));
|
||||
|
||||
/* fall through */
|
||||
fail:
|
||||
@ -741,6 +745,7 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in,
|
||||
double image_pts = src->pts * av_q2d(in->link->time_base);
|
||||
|
||||
/* Update dynamic variables */
|
||||
s->var_values[VAR_IN_IDX] = s->var_values[VAR_IDX] = in->idx;
|
||||
s->var_values[VAR_IN_W] = s->var_values[VAR_IW] = in->link->w;
|
||||
s->var_values[VAR_IN_H] = s->var_values[VAR_IH] = in->link->h;
|
||||
s->var_values[VAR_A] = (double) in->link->w / in->link->h;
|
||||
|
Loading…
Reference in New Issue
Block a user