src_buffer: move code to avoid forward declarations.
This commit is contained in:
parent
f7f6aaf988
commit
75e0324eab
1 changed files with 67 additions and 73 deletions
|
@ -69,11 +69,75 @@ typedef struct {
|
||||||
return AVERROR(EINVAL);\
|
return AVERROR(EINVAL);\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void buf_free(AVFilterBuffer *ptr)
|
||||||
|
{
|
||||||
|
av_free(ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_link_source(AVFilterContext *src, AVFilterLink *link)
|
||||||
|
{
|
||||||
|
link->src = src;
|
||||||
|
link->srcpad = &(src->output_pads[0]);
|
||||||
|
src->outputs[0] = link;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int reconfigure_filter(BufferSourceContext *abuffer, AVFilterContext *filt_ctx)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
AVFilterLink * const inlink = filt_ctx->inputs[0];
|
||||||
|
AVFilterLink * const outlink = filt_ctx->outputs[0];
|
||||||
|
|
||||||
|
inlink->format = abuffer->sample_format;
|
||||||
|
inlink->channel_layout = abuffer->channel_layout;
|
||||||
|
inlink->planar = abuffer->packing_format;
|
||||||
|
inlink->sample_rate = abuffer->sample_rate;
|
||||||
|
|
||||||
|
filt_ctx->filter->uninit(filt_ctx);
|
||||||
|
memset(filt_ctx->priv, 0, filt_ctx->filter->priv_size);
|
||||||
|
if ((ret = filt_ctx->filter->init(filt_ctx, NULL , NULL)) < 0)
|
||||||
|
return ret;
|
||||||
|
if ((ret = inlink->srcpad->config_props(inlink)) < 0)
|
||||||
|
return ret;
|
||||||
|
return outlink->srcpad->config_props(outlink);
|
||||||
|
}
|
||||||
|
|
||||||
static int insert_filter(BufferSourceContext *abuffer,
|
static int insert_filter(BufferSourceContext *abuffer,
|
||||||
AVFilterLink *link, AVFilterContext **filt_ctx,
|
AVFilterLink *link, AVFilterContext **filt_ctx,
|
||||||
const char *filt_name);
|
const char *filt_name)
|
||||||
static void remove_filter(AVFilterContext **filt_ctx);
|
{
|
||||||
static int reconfigure_filter(BufferSourceContext *abuffer, AVFilterContext *filt_ctx);
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = avfilter_open(filt_ctx, avfilter_get_by_name(filt_name), NULL)) < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
link->src->outputs[0] = NULL;
|
||||||
|
if ((ret = avfilter_link(link->src, 0, *filt_ctx, 0)) < 0) {
|
||||||
|
link->src->outputs[0] = link;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_link_source(*filt_ctx, link);
|
||||||
|
|
||||||
|
if ((ret = reconfigure_filter(abuffer, *filt_ctx)) < 0) {
|
||||||
|
avfilter_free(*filt_ctx);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void remove_filter(AVFilterContext **filt_ctx)
|
||||||
|
{
|
||||||
|
AVFilterLink *outlink = (*filt_ctx)->outputs[0];
|
||||||
|
AVFilterContext *src = (*filt_ctx)->inputs[0]->src;
|
||||||
|
|
||||||
|
(*filt_ctx)->outputs[0] = NULL;
|
||||||
|
avfilter_free(*filt_ctx);
|
||||||
|
*filt_ctx = NULL;
|
||||||
|
|
||||||
|
set_link_source(src, outlink);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void log_input_change(void *ctx, AVFilterLink *link, AVFilterBufferRef *ref)
|
static inline void log_input_change(void *ctx, AVFilterLink *link, AVFilterBufferRef *ref)
|
||||||
{
|
{
|
||||||
|
@ -516,76 +580,6 @@ static int poll_frame(AVFilterLink *link)
|
||||||
return size/sizeof(AVFilterBufferRef*);
|
return size/sizeof(AVFilterBufferRef*);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void buf_free(AVFilterBuffer *ptr)
|
|
||||||
{
|
|
||||||
av_free(ptr);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_link_source(AVFilterContext *src, AVFilterLink *link)
|
|
||||||
{
|
|
||||||
link->src = src;
|
|
||||||
link->srcpad = &(src->output_pads[0]);
|
|
||||||
src->outputs[0] = link;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int reconfigure_filter(BufferSourceContext *abuffer, AVFilterContext *filt_ctx)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
AVFilterLink * const inlink = filt_ctx->inputs[0];
|
|
||||||
AVFilterLink * const outlink = filt_ctx->outputs[0];
|
|
||||||
|
|
||||||
inlink->format = abuffer->sample_format;
|
|
||||||
inlink->channel_layout = abuffer->channel_layout;
|
|
||||||
inlink->planar = abuffer->packing_format;
|
|
||||||
inlink->sample_rate = abuffer->sample_rate;
|
|
||||||
|
|
||||||
filt_ctx->filter->uninit(filt_ctx);
|
|
||||||
memset(filt_ctx->priv, 0, filt_ctx->filter->priv_size);
|
|
||||||
if ((ret = filt_ctx->filter->init(filt_ctx, NULL , NULL)) < 0)
|
|
||||||
return ret;
|
|
||||||
if ((ret = inlink->srcpad->config_props(inlink)) < 0)
|
|
||||||
return ret;
|
|
||||||
return outlink->srcpad->config_props(outlink);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int insert_filter(BufferSourceContext *abuffer,
|
|
||||||
AVFilterLink *link, AVFilterContext **filt_ctx,
|
|
||||||
const char *filt_name)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if ((ret = avfilter_open(filt_ctx, avfilter_get_by_name(filt_name), NULL)) < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
link->src->outputs[0] = NULL;
|
|
||||||
if ((ret = avfilter_link(link->src, 0, *filt_ctx, 0)) < 0) {
|
|
||||||
link->src->outputs[0] = link;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_link_source(*filt_ctx, link);
|
|
||||||
|
|
||||||
if ((ret = reconfigure_filter(abuffer, *filt_ctx)) < 0) {
|
|
||||||
avfilter_free(*filt_ctx);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void remove_filter(AVFilterContext **filt_ctx)
|
|
||||||
{
|
|
||||||
AVFilterLink *outlink = (*filt_ctx)->outputs[0];
|
|
||||||
AVFilterContext *src = (*filt_ctx)->inputs[0]->src;
|
|
||||||
|
|
||||||
(*filt_ctx)->outputs[0] = NULL;
|
|
||||||
avfilter_free(*filt_ctx);
|
|
||||||
*filt_ctx = NULL;
|
|
||||||
|
|
||||||
set_link_source(src, outlink);
|
|
||||||
}
|
|
||||||
|
|
||||||
int av_asrc_buffer_add_audio_buffer_ref(AVFilterContext *ctx,
|
int av_asrc_buffer_add_audio_buffer_ref(AVFilterContext *ctx,
|
||||||
AVFilterBufferRef *samplesref,
|
AVFilterBufferRef *samplesref,
|
||||||
int av_unused flags)
|
int av_unused flags)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue