Exemple #1
0
        static void Main(string[] args)
        {
            Compressor[] comp = EnumCompressors();
            foreach (Compressor c in comp)
            {
                Console.WriteLine(c.name);
            }

            Console.WriteLine("---");

            // create BitmapWriter component and configure it
            IBitmapWriter writer = (IBitmapWriter) new CVideoRecorder();

            writer.Init(100, 100, 5);

            // create DirectShow graph builder
            ICaptureGraphBuilder2 builder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2Cls();

            // create AVIMux and file writer component
            IBaseFilter     pMux;
            IFileSinkFilter unused;

            builder.SetOutputFileName(ref MEDIASUBTYPE_Avi, "test.avi", out pMux, out unused);

            IGraphBuilder graph;

            builder.GetFiltergraph(out graph);

            // add BitmapWriter as the source component
            graph.AddFilter((IBaseFilter)writer, "source");
            // if the compressor is specified, add it
            IBaseFilter compressor = null;

            if (args.Length != 0)
            {
                compressor = comp[int.Parse(args[0])].compressor;
                graph.AddFilter(compressor, "compressor");
            }

            // connect components
            builder.RenderStream(IntPtr.Zero, IntPtr.Zero, writer, compressor, pMux);

            // run the graph and send images
            IMediaControl control = (IMediaControl)graph;

            control.Run();
            for (int i = 0; i < 10; i++)
            {
                Bitmap bmp  = new Bitmap(@"..\..\test" + (i % 2) + ".bmp");
                IntPtr hBmp = bmp.GetHbitmap();
                writer.WriteBitmap((uint)hBmp.ToInt32());
                DeleteObject(hBmp);
                bmp.Dispose();
            }

            // stop the graph and flash any pending data throught the pipeline
            control.Stop();

            Console.WriteLine("done");
        }
Exemple #2
0
        /// <summary>
        /// Create a new recorder with the given setting.
        /// </summary>
        public Recorder(Rectangle rect, VCROptions config)
        {
            drawer = new QuarterViewDrawer(World.world, MainWindow.mainWindow.directDraw, rect);

            // register timer
            World.world.clock.registerRepeated(new ClockHandler(capture), TimeLength.fromMinutes(config.period));

            // create BitmapWriter component and configure it
            writer = (IBitmapWriter) new CVideoRecorder();
            writer.Init(rect.Width, rect.Height, config.fps);

            // create DirectShow graph builder
            ICaptureGraphBuilder2 builder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2Cls();

            // create AVIMux and file writer component
            IBaseFilter     pMux;
            IFileSinkFilter unused;

            builder.SetOutputFileName(ref MEDIASUBTYPE_Avi, "test.avi", out pMux, out unused);

            builder.GetFiltergraph(out graph);

            // add BitmapWriter as the source component
            graph.AddFilter((IBaseFilter)writer, "source");
            // if the compressor is specified, add it
            IBaseFilter compressor = config.compressor.bind();

            graph.AddFilter(compressor, "compressor");

            // connect components
            builder.RenderStream(IntPtr.Zero, IntPtr.Zero, writer, compressor, pMux);

            mediaControl = (IMediaControl)graph;

            // explicitly release local objects
//			Marshal.ReleaseComObject(builder);
//			Marshal.ReleaseComObject(pMux);
//			Marshal.ReleaseComObject(unused);
//			Marshal.ReleaseComObject(compressor);
        }