diff options
Diffstat (limited to 'libavfilter/vf_drawtext.c')
-rw-r--r-- | libavfilter/vf_drawtext.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 2358e35c26..10dee14384 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -784,7 +784,7 @@ static int expand_text(AVFilterContext *ctx) return 0; } -static int draw_glyphs(DrawTextContext *dtext, AVFilterBufferRef *picref, +static int draw_glyphs(DrawTextContext *dtext, AVFrame *frame, int width, int height, const uint8_t rgbcolor[4], FFDrawColor *color, int x, int y) { char *text = dtext->expanded_text.str; @@ -812,7 +812,7 @@ static int draw_glyphs(DrawTextContext *dtext, AVFilterBufferRef *picref, y1 = dtext->positions[i].y+dtext->y+y; ff_blend_mask(&dtext->dc, color, - picref->data, picref->linesize, width, height, + frame->data, frame->linesize, width, height, glyph->bitmap.buffer, glyph->bitmap.pitch, glyph->bitmap.width, glyph->bitmap.rows, glyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO ? 0 : 3, @@ -822,7 +822,7 @@ static int draw_glyphs(DrawTextContext *dtext, AVFilterBufferRef *picref, return 0; } -static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref, +static int draw_text(AVFilterContext *ctx, AVFrame *frame, int width, int height) { DrawTextContext *dtext = ctx->priv; @@ -845,7 +845,7 @@ static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref, av_bprint_clear(bp); if(dtext->basetime != AV_NOPTS_VALUE) - now= picref->pts*av_q2d(ctx->inputs[0]->time_base) + dtext->basetime/1000000; + now= frame->pts*av_q2d(ctx->inputs[0]->time_base) + dtext->basetime/1000000; switch (dtext->exp_mode) { case EXP_NONE: @@ -962,23 +962,23 @@ static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref, /* draw box */ if (dtext->draw_box) ff_blend_rectangle(&dtext->dc, &dtext->boxcolor, - picref->data, picref->linesize, width, height, + frame->data, frame->linesize, width, height, dtext->x, dtext->y, box_w, box_h); if (dtext->shadowx || dtext->shadowy) { - if ((ret = draw_glyphs(dtext, picref, width, height, dtext->shadowcolor.rgba, + if ((ret = draw_glyphs(dtext, frame, width, height, dtext->shadowcolor.rgba, &dtext->shadowcolor, dtext->shadowx, dtext->shadowy)) < 0) return ret; } - if ((ret = draw_glyphs(dtext, picref, width, height, dtext->fontcolor.rgba, + if ((ret = draw_glyphs(dtext, frame, width, height, dtext->fontcolor.rgba, &dtext->fontcolor, 0, 0)) < 0) return ret; return 0; } -static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *frame) +static int filter_frame(AVFilterLink *inlink, AVFrame *frame) { AVFilterContext *ctx = inlink->dst; AVFilterLink *outlink = ctx->outputs[0]; @@ -992,7 +992,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *frame) dtext->var_values[VAR_T] = frame->pts == AV_NOPTS_VALUE ? NAN : frame->pts * av_q2d(inlink->time_base); - draw_text(ctx, frame, frame->video->w, frame->video->h); + draw_text(ctx, frame, frame->width, frame->height); av_log(ctx, AV_LOG_DEBUG, "n:%d t:%f text_w:%d text_h:%d x:%d y:%d\n", (int)dtext->var_values[VAR_N], dtext->var_values[VAR_T], @@ -1011,8 +1011,7 @@ static const AVFilterPad avfilter_vf_drawtext_inputs[] = { .get_video_buffer = ff_null_get_video_buffer, .filter_frame = filter_frame, .config_props = config_input, - .min_perms = AV_PERM_WRITE | - AV_PERM_READ, + .needs_writable = 1, }, { NULL } }; |