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; }
static int query_formats(AVFilterContext *ctx) { const enum PixelFormat inout_pix_fmts[] = { PIX_FMT_YUV420P, PIX_FMT_NONE }; const enum PixelFormat blend_pix_fmts[] = { PIX_FMT_YUVA420P, PIX_FMT_NONE }; AVFilterFormats *inout_formats = avfilter_make_format_list(inout_pix_fmts); AVFilterFormats *blend_formats = avfilter_make_format_list(blend_pix_fmts); avfilter_formats_ref(inout_formats, &ctx->inputs [MAIN ]->out_formats); avfilter_formats_ref(blend_formats, &ctx->inputs [OVERLAY]->out_formats); avfilter_formats_ref(inout_formats, &ctx->outputs[MAIN ]->in_formats ); return 0; }
static void set_common_formats(AVFilterContext *ctx, AVFilterFormats *fmts, enum AVMediaType type, int offin, int offout) { int i; for (i = 0; i < ctx->input_count; i++) if (ctx->inputs[i] && ctx->inputs[i]->type == type) avfilter_formats_ref(fmts, (AVFilterFormats**)((void*)ctx->inputs[i]+offout)); for (i = 0; i < ctx->output_count; i++) if (ctx->outputs[i] && ctx->outputs[i]->type == type) avfilter_formats_ref(fmts, (AVFilterFormats**)((void*)ctx->outputs[i]+offin)); if (!fmts->refcount) { av_free(fmts->formats); av_free(fmts->refs); av_free(fmts); } }
/** * A helper for query_formats() which sets all links to the same list of * formats. If there are no links hooked to this filter, the list of formats is * freed. * * FIXME: this will need changed for filters with a mix of pad types * (video + audio, etc) */ void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats) { int count = 0, i; for (i = 0; i < ctx->input_count; i++) { if (ctx->inputs[i]) { avfilter_formats_ref(formats, &ctx->inputs[i]->out_formats); count++; } } for (i = 0; i < ctx->output_count; i++) { if (ctx->outputs[i]) { avfilter_formats_ref(formats, &ctx->outputs[i]->in_formats); count++; } } if (!count) { av_free(formats->formats); av_free(formats->refs); av_free(formats); } }
static int query_formats(AVFilterContext *ctx) { AResampleContext *aresample = ctx->priv; int out_rate = av_get_int(aresample->swr, "osr", NULL); uint64_t out_layout = av_get_int(aresample->swr, "ocl", NULL); enum AVSampleFormat out_format = av_get_int(aresample->swr, "osf", NULL); AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; AVFilterFormats *in_formats = avfilter_all_formats(AVMEDIA_TYPE_AUDIO); AVFilterFormats *out_formats; AVFilterFormats *in_samplerates = ff_all_samplerates(); AVFilterFormats *out_samplerates; AVFilterChannelLayouts *in_layouts = ff_all_channel_layouts(); AVFilterChannelLayouts *out_layouts; avfilter_formats_ref (in_formats, &inlink->out_formats); avfilter_formats_ref (in_samplerates, &inlink->out_samplerates); ff_channel_layouts_ref(in_layouts, &inlink->out_channel_layouts); if(out_rate > 0) { out_samplerates = avfilter_make_format_list((int[]){ out_rate, -1 });
static int query_formats(AVFilterContext *ctx) { AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; AVFilterFormats *in_formats = avfilter_all_formats(AVMEDIA_TYPE_AUDIO); AVFilterFormats *out_formats = avfilter_all_formats(AVMEDIA_TYPE_AUDIO); AVFilterFormats *in_samplerates = ff_all_samplerates(); AVFilterFormats *out_samplerates = ff_all_samplerates(); AVFilterChannelLayouts *in_layouts = ff_all_channel_layouts(); AVFilterChannelLayouts *out_layouts = ff_all_channel_layouts(); avfilter_formats_ref(in_formats, &inlink->out_formats); avfilter_formats_ref(out_formats, &outlink->in_formats); avfilter_formats_ref(in_samplerates, &inlink->out_samplerates); avfilter_formats_ref(out_samplerates, &outlink->in_samplerates); ff_channel_layouts_ref(in_layouts, &inlink->out_channel_layouts); ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts); return 0; }
static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; AConvertContext *aconvert = ctx->priv; AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; avfilter_formats_ref(avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO), &inlink->out_formats); if (aconvert->out_sample_fmt != AV_SAMPLE_FMT_NONE) { formats = NULL; avfilter_add_format(&formats, aconvert->out_sample_fmt); avfilter_formats_ref(formats, &outlink->in_formats); } else avfilter_formats_ref(avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO), &outlink->in_formats); avfilter_formats_ref(avfilter_make_all_channel_layouts(), &inlink->out_chlayouts); if (aconvert->out_chlayout != 0) { formats = NULL; avfilter_add_format(&formats, aconvert->out_chlayout); avfilter_formats_ref(formats, &outlink->in_chlayouts); } else avfilter_formats_ref(avfilter_make_all_channel_layouts(), &outlink->in_chlayouts); avfilter_formats_ref(avfilter_make_all_packing_formats(), &inlink->out_packing); if (aconvert->out_packing_fmt != -1) { formats = NULL; avfilter_add_format(&formats, aconvert->out_packing_fmt); avfilter_formats_ref(formats, &outlink->in_packing); } else avfilter_formats_ref(avfilter_make_all_packing_formats(), &outlink->in_packing); return 0; }