/// <summary>Adds new encoding video stream.</summary> /// <param name="encoder">Encoder to be used.</param> /// <param name="ownsEncoder">Whether encoder should be disposed with the writer.</param> /// <param name="width">Frame's width.</param> /// <param name="height">Frame's height.</param> /// <returns>Newly added video stream.</returns> /// <remarks> /// <para> /// Stream is initialized to be to be encoded with the specified encoder. /// Method <see cref="IAviVideoStream.WriteFrame"/> expects data in the same format as encoders, /// that is top-down BGR32 bitmap. It is passed to the encoder and the encoded result is written /// to the stream. /// Parameters <c>isKeyFrame</c> and <c>length</c> are ignored by encoding streams, /// as encoders determine on their own which frames are keys, and the size of input bitmaps is fixed. /// </para> /// <para> /// Properties <see cref="IAviVideoStream.Codec"/> and <see cref="IAviVideoStream.BitsPerPixel"/> /// are defined by the encoder, and cannot be modified. /// </para> /// </remarks> public IAviVideoStream AddEncodingVideoStream(IVideoEncoder encoder, bool ownsEncoder = true, int width = 1, int height = 1) { Contract.Requires(encoder != null); Contract.Requires(Streams.Count < 100); Contract.Ensures(Contract.Result <IAviVideoStream>() != null); return(AddStream <IAviVideoStreamInternal>(index => { var stream = new AviVideoStream(index, this, width, height, BitsPerPixel.Bpp32); var encodingStream = new EncodingVideoStreamWrapper(stream, encoder, ownsEncoder); var asyncStream = new AsyncVideoStreamWrapper(encodingStream); return asyncStream; })); }
/// <summary>Adds new encoding video stream.</summary> /// <param name="encoder">Encoder to be used.</param> /// <param name="ownsEncoder">Whether encoder should be disposed with the writer.</param> /// <param name="width">Frame's width.</param> /// <param name="height">Frame's height.</param> /// <returns>Newly added video stream.</returns> /// <remarks> /// <para> /// Stream is initialized to be to be encoded with the specified encoder. /// Method <see cref="IAviVideoStream.WriteFrame"/> expects data in the same format as encoders, /// that is top-down BGR32 bitmap. It is passed to the encoder and the encoded result is written /// to the stream. /// Parameters <c>isKeyFrame</c> and <c>length</c> are ignored by encoding streams, /// as encoders determine on their own which frames are keys, and the size of input bitmaps is fixed. /// </para> /// <para> /// Properties <see cref="IAviVideoStream.Codec"/> and <see cref="IAviVideoStream.BitsPerPixel"/> /// are defined by the encoder, and cannot be modified. /// </para> /// </remarks> public IAviVideoStream AddEncodingVideoStream(IVideoEncoder encoder, bool ownsEncoder = true, int width = 1, int height = 1) { Argument.IsNotNull(encoder, nameof(encoder)); Argument.IsPositive(width, nameof(width)); Argument.IsPositive(height, nameof(height)); return(AddStream <IAviVideoStreamInternal>(index => { var stream = new AviVideoStream(index, this, width, height, BitsPerPixel.Bpp32); var encodingStream = new EncodingVideoStreamWrapper(stream, encoder, ownsEncoder); var asyncStream = new AsyncVideoStreamWrapper(encodingStream); return asyncStream; })); }