Пример #1
0
        public static CliOptions ParseArgumentsStrict(string[] args)
        {
            var options = new CliOptions();

            Parser.Default.ParseArgumentsStrict(args, options);
            options.Normalize();
            return(options);
        }
Пример #2
0
        private static void Main(string[] args)
        {
            CliOptions options = CliOptions.ParseArgumentsStrict(args);

            if (options.Verbose)
            {
                Console.WriteLine("Working dir: " + Environment.CurrentDirectory);
                Console.WriteLine("Output dir: " + options.OutputDir);
                Console.WriteLine("FFmpeg headers dir: " + options.FFmpegIncludesDir);
                Console.WriteLine("FFmpeg bin dir: " + options.FFmpegBinDir);
                Console.WriteLine("Namespace name: " + options.Namespace);
                Console.WriteLine("Class name: " + options.ClassName);
            }

            var defines = new[] { "__STDC_CONSTANT_MACROS" };

            FunctionExport[] exports = FunctionExportHelper.LoadFunctionExports(options.FFmpegBinDir).ToArray();

            var astProcessor = new ASTProcessor
            {
                FunctionExportMap = exports
                                    .GroupBy(x => x.Name).Select(x => x.First()) // Eliminate duplicated names
                                    .ToDictionary(x => x.Name)
            };

            astProcessor.IgnoreUnitNames.Add("__NSConstantString_tag");
            astProcessor.TypeAliases.Add("int64_t", typeof(long));
            astProcessor.WellKnownMaros.Add("FFERRTAG", typeof(int));
            astProcessor.WellKnownMaros.Add("MKTAG", typeof(int));
            astProcessor.WellKnownMaros.Add("UINT64_C", typeof(ulong));
            astProcessor.WellKnownMaros.Add("AV_VERSION_INT", typeof(int));
            astProcessor.WellKnownMaros.Add("AV_VERSION", typeof(string));

            var g = new Generator(astProcessor)
            {
                IncludeDirs = new[] { options.FFmpegIncludesDir },
                Defines     = defines,
                Exports     = exports,
                Namespace   = options.Namespace,
                ClassName   = options.ClassName,
                SuppressUnmanagedCodeSecurity = options.SuppressUnmanagedCodeSecurity
            };

            g.Parse("libavutil/avutil.h");
            g.Parse("libavutil/audio_fifo.h");
            g.Parse("libavutil/channel_layout.h");
            g.Parse("libavutil/cpu.h");
            g.Parse("libavutil/frame.h");
            g.Parse("libavutil/opt.h");
            g.Parse("libavutil/imgutils.h");
            g.Parse("libavutil/time.h");
            g.Parse("libavutil/timecode.h");
            g.Parse("libavutil/tree.h");
            g.Parse("libavutil/hwcontext.h");
            g.Parse("libavutil/hwcontext_dxva2.h");
            g.Parse("libavutil/hwcontext_d3d11va.h");

            g.Parse("libswresample/swresample.h");

            g.Parse("libpostproc/postprocess.h");

            g.Parse("libswscale/swscale.h");

            g.Parse("libavcodec/avcodec.h");
            g.Parse("libavcodec/dxva2.h");
            g.Parse("libavcodec/d3d11va.h");

            g.Parse("libavformat/avformat.h");

            g.Parse("libavfilter/avfilter.h");
            g.Parse("libavfilter/buffersrc.h");
            g.Parse("libavfilter/buffersink.h");

            g.Parse("libavdevice/avdevice.h");

            g.WriteLibraries(Path.Combine(options.OutputDir, "FFmpeg.libraries.g.cs"));
            g.WriteMacros(Path.Combine(options.OutputDir, "FFmpeg.macros.g.cs"));
            g.WriteEnums(Path.Combine(options.OutputDir, "FFmpeg.enums.g.cs"));
            g.WriteDelegates(Path.Combine(options.OutputDir, "FFmpeg.delegates.g.cs"));
            g.WriteArrays(Path.Combine(options.OutputDir, "FFmpeg.arrays.g.cs"));
            g.WriteStructures(Path.Combine(options.OutputDir, "FFmpeg.structs.g.cs"));
            g.WriteIncompleteStructures(Path.Combine(options.OutputDir, "FFmpeg.structs.incomplete.g.cs"));
            g.WriteExportFunctions(Path.Combine(options.OutputDir, "FFmpeg.functions.export.g.cs"));
            g.WriteInlineFunctions(Path.Combine(options.OutputDir, "FFmpeg.functions.inline.g.cs"));
        }