Commit 89310335 authored by Stefan Westerfeld's avatar Stefan Westerfeld

avfilter/asubprocess: allow setting command as filter parameter

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 1e4460c6
......@@ -200,7 +200,7 @@ enum {
typedef struct AndioWMarkContext {
const AVClass *class;
double strength;
const char *command;
int fd;
int state;
......@@ -208,21 +208,31 @@ typedef struct AndioWMarkContext {
SP *sp;
int nb_samples;
int eof;
} AudioWMarkContext;
} ASubProcessContext;
#define OFFSET(x) offsetof(AudioWMarkContext, x)
#define OFFSET(x) offsetof(ASubProcessContext, x)
#define A AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
static const AVOption asubprocess_options[] = {
{ "strength", "set watermarking strength", OFFSET(strength), AV_OPT_TYPE_DOUBLE, {.dbl=10}, 1, 100, A },
{ "command", "set command to run as subprocess", OFFSET(command), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, A},
{ NULL },
};
AVFILTER_DEFINE_CLASS(asubprocess);
static av_cold int init(AVFilterContext *ctx)
{
ASubProcessContext *s = ctx->priv;
if (!s->command) {
av_log(ctx, AV_LOG_ERROR, "No command provided\n");
return AVERROR(EINVAL);
}
return 0;
}
static av_cold void uninit(AVFilterContext *ctx)
{
AudioWMarkContext *s = ctx->priv;
ASubProcessContext *s = ctx->priv;
printf ("TODO: uninit\n");
#if 0
......@@ -234,9 +244,8 @@ static av_cold void uninit(AVFilterContext *ctx)
static int config_input(AVFilterLink *inlink)
{
AVFilterContext *ctx = inlink->dst;
AudioWMarkContext *s = ctx->priv;
// TODO: use inlink->sample_rate, inlink->ch_layout.nb_channels
s->sp = sp_new ("audiowmark -q add - - f0");
ASubProcessContext *s = ctx->priv;
s->sp = sp_new (s->command);
int bit_depth = 16;
int sample_rate = inlink->sample_rate;
int nb_channels = inlink->ch_layout.nb_channels;
......@@ -285,7 +294,7 @@ static int config_input(AVFilterLink *inlink)
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
{
AVFilterContext *ctx = inlink->dst;
AudioWMarkContext *s = ctx->priv;
ASubProcessContext *s = ctx->priv;
AVFilterLink *outlink = ctx->outputs[0];
AVFrame *out;
int ret = 0, nb_samples;
......@@ -394,7 +403,7 @@ static int activate(AVFilterContext *ctx)
{
AVFilterLink *inlink = ctx->inputs[0];
AVFilterLink *outlink = ctx->outputs[0];
AudioWMarkContext *s = ctx->priv;
ASubProcessContext *s = ctx->priv;
AVFrame *in = NULL;
int64_t pts;
int status, ret;
......@@ -454,8 +463,9 @@ static const AVFilterPad asubprocess_inputs[] = {
const AVFilter ff_af_asubprocess = {
.name = "asubprocess",
.description = NULL_IF_CONFIG_SMALL("Filter audio stream with subprocess."),
.priv_size = sizeof(AudioWMarkContext),
.priv_size = sizeof(ASubProcessContext),
.priv_class = &asubprocess_class,
.init = init,
.uninit = uninit,
.activate = activate,
FILTER_INPUTS(asubprocess_inputs),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment