Accord.Video.VFW.AVIReader.Open C# (CSharp) Method

Open() public method

Open AVI file.

The method opens a video file and prepares the stream and decoder for reading video frames with the help of GetNextFrame method.

Failed opening the specified file. A error occurred while opening the video file. See exception message.
public Open ( string fileName ) : void
fileName string AVI file name to open.
return void
        public void Open( string fileName )
        {
            // close previous file
            Close( );

            bool success = false;

            try
            {
                lock ( sync )
                {
                    // open AVI file
                    if ( Win32.AVIFileOpen( out file, fileName, Win32.OpenFileMode.ShareDenyWrite, IntPtr.Zero ) != 0 )
                        throw new System.IO.IOException( "Failed opening the specified AVI file." );

                    // get first video stream
                    if ( Win32.AVIFileGetStream( file, out stream, Win32.mmioFOURCC( "vids" ), 0 ) != 0 )
                        throw new VideoException( "Failed getting video stream." );

                    // get stream info
                    Win32.AVISTREAMINFO info = new Win32.AVISTREAMINFO( );
                    Win32.AVIStreamInfo( stream, ref info, Marshal.SizeOf( info ) );

                    width    = info.rectFrame.right;
                    height   = info.rectFrame.bottom;
                    position = info.start;
                    start    = info.start;
                    length   = info.length;
                    rate     = (float) info.rate / (float) info.scale;
                    codec    = Win32.decode_mmioFOURCC( info.handler );

                    // prepare decompressor
                    Win32.BITMAPINFOHEADER bitmapInfoHeader = new Win32.BITMAPINFOHEADER( );

                    bitmapInfoHeader.size        = Marshal.SizeOf( bitmapInfoHeader.GetType( ) );
                    bitmapInfoHeader.width       = width;
                    bitmapInfoHeader.height      = height;
                    bitmapInfoHeader.planes      = 1;
                    bitmapInfoHeader.bitCount    = 24;
                    bitmapInfoHeader.compression = 0; // BI_RGB

                    // get frame object
                    if ( ( getFrame = Win32.AVIStreamGetFrameOpen( stream, ref bitmapInfoHeader ) ) == IntPtr.Zero )
                    {
                        bitmapInfoHeader.height = -height;

                        if ( ( getFrame = Win32.AVIStreamGetFrameOpen( stream, ref bitmapInfoHeader ) ) == IntPtr.Zero )
                            throw new VideoException( "Failed initializing decompressor." );
                    }

                    success = true;
                }
            }
            finally
            {
                if ( !success )
                {
                    Close( );
                }
            }
        }

Usage Example

Exemplo n.º 1
0
        /// <summary>
        /// Worker thread.
        /// </summary>
        /// 
        private void WorkerThread( )
		{
            ReasonToFinishPlaying reasonToStop = ReasonToFinishPlaying.StoppedByUser;
            // AVI reader
			AVIReader aviReader = new AVIReader( );

			try
			{
				// open file
				aviReader.Open( source );

                // stop positions
                int stopPosition = aviReader.Start + aviReader.Length;

                // frame interval
                int interval = ( frameIntervalFromSource ) ? (int) ( 1000 / aviReader.FrameRate ) : frameInterval;

                while ( !stopEvent.WaitOne( 0, false ) )
				{
					// start time
					DateTime start = DateTime.Now;

					// get next frame
					Bitmap bitmap = aviReader.GetNextFrame( );

					framesReceived++;
                    bytesReceived += bitmap.Width * bitmap.Height *
                        ( Bitmap.GetPixelFormatSize( bitmap.PixelFormat ) >> 3 );

					if ( NewFrame != null )
						NewFrame( this, new NewFrameEventArgs( bitmap ) );

					// free image
					bitmap.Dispose( );

                    // check current position
                    if ( aviReader.Position >= stopPosition )
                    {
                        reasonToStop = ReasonToFinishPlaying.EndOfStreamReached;
                        break;
                    }

                    // wait for a while ?
                    if ( interval > 0 )
                    {
                        // get frame extract duration
                        TimeSpan span = DateTime.Now.Subtract( start );

                        // miliseconds to sleep
                        int msec = interval - (int) span.TotalMilliseconds;

                        if ( ( msec > 0 ) && ( stopEvent.WaitOne( msec, false ) ) )
                            break;
                    }
				}
			}
			catch ( Exception exception )
			{
                // provide information to clients
                if ( VideoSourceError != null )
                {
                    VideoSourceError( this, new VideoSourceErrorEventArgs( exception.Message ) );
                }
			}

			aviReader.Dispose( );
			aviReader = null;

            if ( PlayingFinished != null )
            {
                PlayingFinished( this, reasonToStop );
            } 
		}
All Usage Examples Of Accord.Video.VFW.AVIReader::Open