Beispiel #1
0
        // コンストラクタ

        public CAvi(string filename)
        {
            if (AVIFileOpen(out this.aviFile, filename, OpenFileFlags.OF_READ, IntPtr.Zero) != 0)
            {
                this.Release();
                throw new Exception("AVIFileOpen failed.");
            }
            if (AVIFileGetStream(this.aviFile, out this.aviStream, streamtypeVIDEO, 0) != 0)
            {
                this.Release();
                throw new Exception("AVIFileGetStream failed.");
            }
            var info = new AVISTREAMINFO();

            AVIStreamInfo(this.aviStream, ref info, Marshal.SizeOf(info));
            this.dwレート   = info.dwRate;
            this.dwスケール  = info.dwScale;
            this.nフレーム幅  = info.rcFrame.right - info.rcFrame.left;
            this.nフレーム高さ = info.rcFrame.bottom - info.rcFrame.top;
            try
            {
                this.frame = AVIStreamGetFrameOpen(this.aviStream, 0);
            }
            catch
            {
                this.Release();
                throw new Exception("AVIStreamGetFrameOpen failed.");
            }
        }
Beispiel #2
0
        private bool CreateStream()
        {
            AVISTREAMINFO strhdr = new AVISTREAMINFO();

            strhdr.fccType               = mmioFOURCC('v', 'i', 'd', 's');
            strhdr.fccHandler            = mmioFOURCC('I', 'V', '5', '0'); // CVID? IV50?
            strhdr.dwScale               = 1;
            strhdr.dwRate                = m_FrameRate;                    // fps
            strhdr.dwSuggestedBufferSize = (uint)(m_Height * m_Stride);
            strhdr.dwQuality             = -1;                             // Use default
            strhdr.dwSampleSize          = 0;
            strhdr.rcFrameTOP            = 0;
            strhdr.rcFrameLEFT           = 0;
            strhdr.rcFrameBOTTOM         = m_Height;
            strhdr.rcFrameRIGHT          = m_Width;
            strhdr.szName                = new byte[64];

            return(AVIFileCreateStream(m_hFile, out m_pStream, ref strhdr) == 0);
        }
 public static extern int AVIStreamInfo(
     IntPtr pAVIStream,
     ref AVISTREAMINFO psi,
     int lSize);
Beispiel #4
0
 public static extern int AVIStreamInfo(
     IntPtr streamHandler,
     ref AVISTREAMINFO streamInfo,
     int infoSize);
Beispiel #5
0
 public static extern int AVIFileCreateStream(
     IntPtr aviHandler,
     out IntPtr streamHandler,
     ref AVISTREAMINFO streamInfo);
 public static extern int EditStreamSetInfo(
     IntPtr pStream,
     ref AVISTREAMINFO lpInfo,
     Int32 cbInfo
     );
 public static extern int AVIFileCreateStream(
     int pfile,
     out IntPtr ppavi,
     ref AVISTREAMINFO ptr_streaminfo);
 public static extern int AVIStreamInfo(
     IntPtr pAVIStream,
     ref AVISTREAMINFO psi,
     int lSize);
Beispiel #9
0
        private bool CreateStream()
        {
            AVISTREAMINFO strhdr         = new AVISTREAMINFO();
            strhdr.fccType               = mmioFOURCC('v','i','d','s');
            strhdr.fccHandler            = mmioFOURCC('I','V','5','0'); // CVID? IV50?
            strhdr.dwScale               = 1;
            strhdr.dwRate                = m_FrameRate; // fps
            strhdr.dwSuggestedBufferSize = (uint)(m_Height * m_Stride);
            strhdr.dwQuality             = -1; // Use default
            strhdr.dwSampleSize          = 0;
            strhdr.rcFrameTOP            = 0;
            strhdr.rcFrameLEFT           = 0;
            strhdr.rcFrameBOTTOM         = m_Height;
            strhdr.rcFrameRIGHT          = m_Width;
            strhdr.szName				 = new byte[64];

            return AVIFileCreateStream( m_hFile, out m_pStream, ref strhdr ) == 0;
        }
Beispiel #10
0
 public extern static int AVIStreamInfo(IntPtr pavi, ref AVISTREAMINFO psi, int lSize);
Beispiel #11
0
 private static extern int AVIStreamInfo(IntPtr pavi, ref AVISTREAMINFO psi, int lSize);
Beispiel #12
0
        /// <summary>
        /// Create new AVI file and open it for writing.
        /// </summary>
        ///
        /// <param name="fileName">AVI file name to create.</param>
        /// <param name="width">Video width.</param>
        /// <param name="height">Video height.</param>
        ///
        /// <remarks><para>The method opens (creates) a video files, configure video codec and prepares
        /// the stream for saving video frames with a help of <see cref="AddFrame"/> method.</para></remarks>
        ///
        /// <exception cref="System.IO.IOException">Failed opening the specified file.</exception>
        /// <exception cref="VideoException">A error occurred while creating new video file. See exception message.</exception>
        /// <exception cref="OutOfMemoryException">Insufficient memory for internal buffer.</exception>
        /// <exception cref="ArgumentException">Video file resolution must be a multiple of two.</exception>
        public void Open()
        {
            // close previous file
            Close();

            this.width  = Options.CaptureArea.Width;
            this.height = Options.CaptureArea.Height;

            // check width and height
            if (((width & 1) != 0) || ((height & 1) != 0))
            {
                throw new ArgumentException("Video file resolution must be a multiple of two.");
            }

            bool success = false;

            try
            {
                lock (sync)
                {
                    // calculate stride
                    stride = width * 3;
                    if ((stride % 4) != 0)
                    {
                        stride += (4 - stride % 4);
                    }

                    // create new file
                    if (NativeMethods.AVIFileOpen(out file, Options.OutputPath, OpenFileMode.Create | OpenFileMode.Write, IntPtr.Zero) != 0)
                    {
                        throw new IOException("Failed opening the specified file.");
                    }

                    this.rate = Options.ScreenRecordFPS;

                    // describe new stream
                    AVISTREAMINFO info = new AVISTREAMINFO();

                    info.type                = NativeMethods.mmioFOURCC("vids");
                    info.handler             = NativeMethods.mmioFOURCC("DIB ");
                    info.scale               = 1;
                    info.rate                = rate;
                    info.suggestedBufferSize = stride * height;

                    // create stream
                    if (NativeMethods.AVIFileCreateStream(file, out stream, ref info) != 0)
                    {
                        throw new Exception("Failed creating stream.");
                    }

                    if (Options.AVI.CompressOptions.handler == 0)
                    {
                        // describe compression options
                        Options.AVI.CompressOptions.handler = NativeMethods.mmioFOURCC("DIB ");
                    }

                    if (Options.ShowAVIOptionsDialog)
                    {
                        AVICOMPRESSOPTIONS options = new AVICOMPRESSOPTIONS();
                        options.handler = Options.AVI.CompressOptions.handler;
                        options.quality = Options.AVI.CompressOptions.quality;
                        options.flags   = 8; // AVICOMPRESSF_VALID
                        int result = NativeMethods.AVISaveOptions(stream, ref options, Options.ParentWindow);
                        if (result == 1)
                        {
                            Options.AVI.CompressOptions = options;
                        }
                    }

                    // create compressed stream
                    if (NativeMethods.AVIMakeCompressedStream(out streamCompressed, stream, ref Options.AVI.CompressOptions, IntPtr.Zero) != 0)
                    {
                        throw new Exception("Failed creating compressed stream.");
                    }

                    // describe frame format
                    BITMAPINFOHEADER bitmapInfoHeader = new BITMAPINFOHEADER(width, height, 24);

                    // set frame format
                    if (NativeMethods.AVIStreamSetFormat(streamCompressed, 0, ref bitmapInfoHeader, Marshal.SizeOf(bitmapInfoHeader.GetType())) != 0)
                    {
                        throw new Exception("Failed setting format of the compressed stream.");
                    }

                    // alloc unmanaged memory for frame
                    buffer = Marshal.AllocHGlobal(stride * height);

                    if (buffer == IntPtr.Zero)
                    {
                        throw new OutOfMemoryException("Insufficient memory for internal buffer.");
                    }

                    position = 0;
                    success  = true;
                }
            }
            finally
            {
                if (!success)
                {
                    Close();
                }
            }
        }
Beispiel #13
0
 private static extern int AVIFileCreateStream(int pFile, out IntPtr pAvi, ref AVISTREAMINFO pStrmInfo);
Beispiel #14
0
 private static extern int AVIFileCreateStream( int pFile, out IntPtr pAvi, ref AVISTREAMINFO pStrmInfo );
 public static extern int AVIFileCreateStream(
     int pfile,
     out IntPtr ppavi,
     ref AVISTREAMINFO ptr_streaminfo);
Beispiel #16
0
 public extern static int AVIFileCreateStream(IntPtr pfile, ref IntPtr ppavi, ref AVISTREAMINFO psi);
 public static extern int EditStreamSetInfo(
     IntPtr pStream,
     ref AVISTREAMINFO lpInfo,
     Int32 cbInfo
 );
Beispiel #18
0
 public static extern int AVIFileCreateStream(IntPtr pfile, out IntPtr ppavi, ref AVISTREAMINFO psi);