History

lavfi/vf_libplacebo: eliminate LibplaceboInput.link

Setting it was broken in 8160178dfc0e6bdaacf80dec58e595a9d595eedc, since links are not yet set up during init. It is also redundant, as the struct also stores the input index.

Anton Khirnov committed 2 years ago

Commit 3e9b0f71 parent 2bbbf361 file · +20 −21Browse files

Showing the changes to libavfilter (1 of 1 file). Show all

Unified · Split

libavfilter/vf_libplacebo.c+20−21
@@ -143,7 +143,6 @@ typedef struct LibplaceboInput { · 142 unmodified lines
143143 pl_queue queue;
144144 enum pl_queue_status qstatus;
145145 struct pl_frame_mix mix; ///< temporary storage
146− AVFilterLink *link;
147146 AVFifo *out_pts; ///< timestamps of wanted output frames
148147 int64_t status_pts;
149148 int status;
@@ -593,8 +592,7 @@ static void unlock_queue(void *priv, uint32_t qf, uint32_t qidx) · 443 unmodified lines
593592 }
594593 #endif
595594
596−static int input_init(AVFilterContext *avctx, AVFilterLink *link,
597− LibplaceboInput *input, int idx)
595+static int input_init(AVFilterContext *avctx, LibplaceboInput *input, int idx)
598596 {
599597 LibplaceboContext *s = avctx->priv;
600598
@@ -603,7 +601,6 @@ static int input_init(AVFilterContext *avctx, AVFilterLink *link, · 2 unmodified lines
603601 return AVERROR(ENOMEM);
604602 input->queue = pl_queue_create(s->gpu);
605603 input->renderer = pl_renderer_create(s->log, s->gpu);
606− input->link = link;
607604 input->idx = idx;
608605
609606 return 0;
@@ -690,7 +687,7 @@ static int init_vulkan(AVFilterContext *avctx, const AVVulkanDeviceContext *hwct · 80 unmodified lines
690687 if (!s->inputs)
691688 return AVERROR(ENOMEM);
692689 for (int i = 0; i < s->nb_inputs; i++)
693− RET(input_init(avctx, avctx->inputs[i], &s->inputs[i], i));
690+ RET(input_init(avctx, &s->inputs[i], i));
694691
695692 /* fall through */
696693 fail:
@@ -756,6 +753,7 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, · 59 unmodified lines
756753 {
757754 FilterLink *outl = ff_filter_link(ctx->outputs[0]);
758755 LibplaceboContext *s = ctx->priv;
756+ const AVFilterLink *inlink = ctx->inputs[in->idx];
759757 const AVFrame *ref = ref_frame(&in->mix);
760758
761759 for (int i = 0; i < in->mix.num_frames; i++) {
@@ -763,15 +761,15 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, · 1 unmodified line
763761 // own the entire pl_queue, and hence, the pointed-at frames.
764762 struct pl_frame *image = (struct pl_frame *) in->mix.frames[i];
765763 const AVFrame *src = pl_get_mapped_avframe(image);
766− double image_pts = src->pts * av_q2d(in->link->time_base);
764+ double image_pts = src->pts * av_q2d(inlink->time_base);
767765
768766 /* Update dynamic variables */
769767 s->var_values[VAR_IN_IDX] = s->var_values[VAR_IDX] = in->idx;
770− s->var_values[VAR_IN_W] = s->var_values[VAR_IW] = in->link->w;
771− s->var_values[VAR_IN_H] = s->var_values[VAR_IH] = in->link->h;
772− s->var_values[VAR_A] = (double) in->link->w / in->link->h;
773− s->var_values[VAR_SAR] = in->link->sample_aspect_ratio.num ?
774− av_q2d(in->link->sample_aspect_ratio) : 1.0;
768+ s->var_values[VAR_IN_W] = s->var_values[VAR_IW] = inlink->w;
769+ s->var_values[VAR_IN_H] = s->var_values[VAR_IH] = inlink->h;
770+ s->var_values[VAR_A] = (double) inlink->w / inlink->h;
771+ s->var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ?
772+ av_q2d(inlink->sample_aspect_ratio) : 1.0;
775773 s->var_values[VAR_IN_T] = s->var_values[VAR_T] = image_pts;
776774 s->var_values[VAR_OUT_T] = s->var_values[VAR_OT] = target_pts;
777775 s->var_values[VAR_N] = outl->frame_count_out;
@@ -809,7 +807,7 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, · 31 unmodified lines
809807 target->crop.y1 = target->crop.y0 + s->var_values[VAR_POS_H];
810808 if (s->normalize_sar) {
811809 float aspect = pl_rect2df_aspect(&image->crop);
812− aspect *= av_q2d(in->link->sample_aspect_ratio);
810+ aspect *= av_q2d(inlink->sample_aspect_ratio);
813811 pl_rect2df_aspect_set(&target->crop, aspect, s->pad_crop_ratio);
814812 }
815813 }
@@ -899,7 +897,7 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) · 83 unmodified lines
899897 opts->params.blend_params = NULL;
900898 for (int i = 0; i < s->nb_inputs; i++) {
901899 LibplaceboInput *in = &s->inputs[i];
902− FilterLink *il = ff_filter_link(in->link);
900+ FilterLink *il = ff_filter_link(ctx->inputs[in->idx]);
903901 FilterLink *ol = ff_filter_link(outlink);
904902 int high_fps = av_cmp_q(il->frame_rate, ol->frame_rate) >= 0;
905903 if (in->qstatus != PL_QUEUE_OK)
@@ -960,14 +958,15 @@ static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) · 54 unmodified lines
960958 int ret, status;
961959 LibplaceboContext *s = ctx->priv;
962960 AVFilterLink *outlink = ctx->outputs[0];
961+ AVFilterLink *inlink = ctx->inputs[input->idx];
963962 AVFrame *in;
964963 int64_t pts;
965964
966− while ((ret = ff_inlink_consume_frame(input->link, &in)) > 0) {
965+ while ((ret = ff_inlink_consume_frame(inlink, &in)) > 0) {
967966 in->opaque = s;
968967 pl_queue_push(input->queue, &(struct pl_source_frame) {
969− .pts = in->pts * av_q2d(input->link->time_base),
970− .duration = in->duration * av_q2d(input->link->time_base),
968+ .pts = in->pts * av_q2d(inlink->time_base),
969+ .duration = in->duration * av_q2d(inlink->time_base),
971970 .first_field = pl_field_from_avframe(in),
972971 .frame_data = in,
973972 .map = map_frame,
@@ -977,7 +976,7 @@ static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) · 3 unmodified lines
977976
978977 if (!s->fps.num) {
979978 /* Internally queue an output frame for the same PTS */
980− pts = av_rescale_q(in->pts, input->link->time_base, outlink->time_base);
979+ pts = av_rescale_q(in->pts, inlink->time_base, outlink->time_base);
981980 av_fifo_write(input->out_pts, &pts, 1);
982981 }
983982 }
@@ -985,8 +984,8 @@ static int handle_input(AVFilterContext *ctx, LibplaceboInput *input) · 1 unmodified line
985984 if (ret < 0)
986985 return ret;
987986
988− if (!input->status && ff_inlink_acknowledge_status(input->link, &status, &pts)) {
989− pts = av_rescale_q_rnd(pts, input->link->time_base, outlink->time_base,
987+ if (!input->status && ff_inlink_acknowledge_status(inlink, &status, &pts)) {
988+ pts = av_rescale_q_rnd(pts, inlink->time_base, outlink->time_base,
990989 AV_ROUND_UP);
991990 pl_queue_push(input->queue, NULL); /* Signal EOF to pl_queue */
992991 input->status = status;
@@ -1035,7 +1034,7 @@ static int libplacebo_activate(AVFilterContext *ctx) · 42 unmodified lines
10351034 if (av_fifo_peek(in->out_pts, &pts, 1, 0) >= 0) {
10361035 out_pts = FFMIN(out_pts, pts);
10371036 } else if (!in->status) {
1038− ff_inlink_request_frame(in->link);
1037+ ff_inlink_request_frame(ctx->inputs[in->idx]);
10391038 retry = true;
10401039 }
10411040 }
@@ -1061,7 +1060,7 @@ static int libplacebo_activate(AVFilterContext *ctx) · 19 unmodified lines
10611060
10621061 switch (in->qstatus) {
10631062 case PL_QUEUE_MORE:
1064− ff_inlink_request_frame(in->link);
1063+ ff_inlink_request_frame(ctx->inputs[in->idx]);
10651064 retry = true;
10661065 break;
10671066 case PL_QUEUE_OK:

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t