static void pick_format(AVFilterLink *link) { if (!link || !link->in_formats) return; link->in_formats->format_count = 1; link->format = link->in_formats->formats[0]; avfilter_formats_unref(&link->in_formats); avfilter_formats_unref(&link->out_formats); }
static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats; enum PixelFormat pix_fmt; int ret; /** accept any input pixel format that is not hardware accelerated, not * a bitstream format, and does not have vertically sub-sampled chroma */ if (ctx->inputs[0]) { formats = NULL; for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++) if (!( av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_HWACCEL || av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_BITSTREAM) && av_pix_fmt_descriptors[pix_fmt].nb_components && !av_pix_fmt_descriptors[pix_fmt].log2_chroma_h && (ret = avfilter_add_format(&formats, pix_fmt)) < 0) { avfilter_formats_unref(&formats); return ret; } avfilter_formats_ref(formats, &ctx->inputs[0]->out_formats); avfilter_formats_ref(formats, &ctx->outputs[0]->in_formats); } return 0; }
void avfilter_free(AVFilterContext *filter) { int i; AVFilterLink *link; if (!filter) return; if (filter->filter->uninit) filter->filter->uninit(filter); for (i = 0; i < filter->input_count; i++) { if ((link = filter->inputs[i])) { if (link->src) link->src->outputs[link->srcpad - link->src->output_pads] = NULL; avfilter_formats_unref(&link->in_formats); avfilter_formats_unref(&link->out_formats); avfilter_formats_unref(&link->in_samplerates); avfilter_formats_unref(&link->out_samplerates); ff_channel_layouts_unref(&link->in_channel_layouts); ff_channel_layouts_unref(&link->out_channel_layouts); } avfilter_link_free(&link); } for (i = 0; i < filter->output_count; i++) { if ((link = filter->outputs[i])) { if (link->dst) link->dst->inputs[link->dstpad - link->dst->input_pads] = NULL; avfilter_formats_unref(&link->in_formats); avfilter_formats_unref(&link->out_formats); avfilter_formats_unref(&link->in_samplerates); avfilter_formats_unref(&link->out_samplerates); ff_channel_layouts_unref(&link->in_channel_layouts); ff_channel_layouts_unref(&link->out_channel_layouts); } avfilter_link_free(&link); } av_freep(&filter->name); av_freep(&filter->input_pads); av_freep(&filter->output_pads); av_freep(&filter->inputs); av_freep(&filter->outputs); av_freep(&filter->priv); while(filter->command_queue){ ff_command_queue_pop(filter); } av_free(filter); }
static int pick_format(AVFilterLink *link) { if (!link || !link->in_formats) return 0; link->in_formats->format_count = 1; link->format = link->in_formats->formats[0]; if (link->type == AVMEDIA_TYPE_AUDIO) { if (!link->in_samplerates->format_count) { av_log(link->src, AV_LOG_ERROR, "Cannot select sample rate for" " the link between filters %s and %s.\n", link->src->name, link->dst->name); return AVERROR(EINVAL); } link->in_samplerates->format_count = 1; link->sample_rate = link->in_samplerates->formats[0]; if (!link->in_channel_layouts->nb_channel_layouts) { av_log(link->src, AV_LOG_ERROR, "Cannot select channel layout for" "the link between filters %s and %s.\n", link->src->name, link->dst->name); return AVERROR(EINVAL); } link->in_channel_layouts->nb_channel_layouts = 1; link->channel_layout = link->in_channel_layouts->channel_layouts[0]; } avfilter_formats_unref(&link->in_formats); avfilter_formats_unref(&link->out_formats); avfilter_formats_unref(&link->in_samplerates); avfilter_formats_unref(&link->out_samplerates); ff_channel_layouts_unref(&link->in_channel_layouts); ff_channel_layouts_unref(&link->out_channel_layouts); return 0; }
static void pick_format(AVFilterLink *link) { if (!link || !link->in_formats) return; link->in_formats->format_count = 1; link->format = link->in_formats->formats[0]; avfilter_formats_unref(&link->in_formats); avfilter_formats_unref(&link->out_formats); if (link->type == AVMEDIA_TYPE_AUDIO) { link->in_chlayouts->format_count = 1; link->channel_layout = link->in_chlayouts->formats[0]; avfilter_formats_unref(&link->in_chlayouts); avfilter_formats_unref(&link->out_chlayouts); link->in_packing->format_count = 1; link->planar = link->in_packing->formats[0] == AVFILTER_PLANAR; avfilter_formats_unref(&link->in_packing); avfilter_formats_unref(&link->out_packing); } }