示例#1
0
        private AVFilterGraph* init_filter_graph(AVFormatContext* format, AVCodecContext* codec, int audio_stream_index, AVFilterContext** buffersrc_ctx, AVFilterContext** buffersink_ctx)
        {
            // create graph
            var filter_graph = ffmpeg.avfilter_graph_alloc();

            // add input filter
            var abuffersrc = ffmpeg.avfilter_get_by_name("abuffer");
            var args = string.Format("sample_fmt={0}:channel_layout={1}:sample_rate={2}:time_base={3}/{4}",
                (int)codec->sample_fmt,
                codec->channel_layout,
                codec->sample_rate,
                format->streams[audio_stream_index]->time_base.num,
                format->streams[audio_stream_index]->time_base.den);
            ffmpeg.avfilter_graph_create_filter(buffersrc_ctx, abuffersrc, "IN", args, null, filter_graph);

            // add output filter
            var abuffersink = ffmpeg.avfilter_get_by_name("abuffersink");
            ffmpeg.avfilter_graph_create_filter(buffersink_ctx, abuffersink, "OUT", "", null, filter_graph);

            AVFilterContext* _filter_ctx = null;
            for (var i = 0; i < filtersAudio.Count; i++)
            {
                var filter = ffmpeg.avfilter_get_by_name(filtersAudio[i].name);
                AVFilterContext* filter_ctx;
                ffmpeg.avfilter_graph_create_filter(&filter_ctx, filter, (filtersAudio[i].name + filtersAudio[i].key).ToUpper(), filtersAudio[i].args, null, filter_graph);

                if (i == 0)
                {
                    ffmpeg.avfilter_link(*buffersrc_ctx, 0, filter_ctx, 0);
                }
                if (_filter_ctx != null)
                {
                    ffmpeg.avfilter_link(_filter_ctx, 0, filter_ctx, 0);
                }
                if (i == filtersAudio.Count - 1)
                {
                    ffmpeg.avfilter_link(filter_ctx, 0, *buffersink_ctx, 0);
                }

                _filter_ctx = filter_ctx;
            }
            ffmpeg.avfilter_graph_config(filter_graph, null);

            return filter_graph;
        }
示例#2
0
 public static extern int avfilter_open(AVFilterContext ** @filter_ctx, AVFilter * @filter, [MarshalAs(UnmanagedType.LPStr)] string @inst_name);
示例#3
0
 public static extern int avfilter_graph_create_filter(AVFilterContext ** @filt_ctx, AVFilter * @filt, [MarshalAs(UnmanagedType.LPStr)] string @name, [MarshalAs(UnmanagedType.LPStr)] string @args, void * @opaque, AVFilterGraph * @graph_ctx);
 public extern static int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt, [MarshalAs(UnmanagedType.LPStr)] string name, [MarshalAs(UnmanagedType.LPStr)] string args, void *opaque, AVFilterGraph *graph_ctx);