|
|
|
@ -862,20 +862,49 @@ static int config_input(AVFilterLink *inlink) |
|
|
|
|
|
|
|
|
|
static int command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags) |
|
|
|
|
{ |
|
|
|
|
DrawTextContext *s = ctx->priv; |
|
|
|
|
DrawTextContext *old = ctx->priv; |
|
|
|
|
DrawTextContext *new = NULL; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (!strcmp(cmd, "reinit")) { |
|
|
|
|
int ret; |
|
|
|
|
new = av_mallocz(sizeof(DrawTextContext)); |
|
|
|
|
if (!new) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
new->class = &drawtext_class; |
|
|
|
|
ret = av_opt_copy(new, old); |
|
|
|
|
if (ret < 0) |
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
ctx->priv = new; |
|
|
|
|
ret = av_set_options_string(ctx, arg, "=", ":"); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
ctx->priv = old; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ret = init(ctx); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
uninit(ctx); |
|
|
|
|
ctx->priv = old; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
new->reinit = 1; |
|
|
|
|
|
|
|
|
|
ctx->priv = old; |
|
|
|
|
uninit(ctx); |
|
|
|
|
s->reinit = 1; |
|
|
|
|
if ((ret = av_set_options_string(ctx, arg, "=", ":")) < 0) |
|
|
|
|
return ret; |
|
|
|
|
if ((ret = init(ctx)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
av_freep(old); |
|
|
|
|
|
|
|
|
|
ctx->priv = new; |
|
|
|
|
return config_input(ctx->inputs[0]); |
|
|
|
|
} |
|
|
|
|
} else |
|
|
|
|
return AVERROR(ENOSYS); |
|
|
|
|
|
|
|
|
|
return AVERROR(ENOSYS); |
|
|
|
|
fail: |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Failed to process command. Continuing with existing parameters.\n"); |
|
|
|
|
av_freep(new); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int func_pict_type(AVFilterContext *ctx, AVBPrint *bp, |
|
|
|
|