using System; using System.Collections; using System.Collections.Generic; namespace BizHawk { public interface IVideoWriter : IDisposable { /// /// sets the codec token to be used for video compression /// void SetVideoCodecToken(IDisposable token); // why no OpenFile(IEnumerator) ? // different video writers may have different ideas of how and why splitting is to occur /// /// opens a recording stream /// set a video codec token first. /// void OpenFile(string baseName); /// /// close recording stream /// void CloseFile(); /// /// adds a frame to the stream /// void AddFrame(IVideoProvider source); /// /// adds audio samples to the stream /// no attempt is made to sync this to the video /// reccomendation: try not to have the size or pacing of the audio chunks be too "weird" /// void AddSamples(short[] samples); /// /// obtain a set of recording compression parameters /// return null on user cancel /// /// hwnd to attach to if the user is shown config dialog /// codec token, dispose of it when you're done with it IDisposable AcquireVideoCodecToken(IntPtr hwnd); /// /// set framerate to fpsnum/fpsden (assumed to be unchanging over the life of the stream) /// void SetMovieParameters(int fpsnum, int fpsden); /// /// set resolution parameters (width x height) /// must be set before file is opened /// can be changed in future /// should always match IVideoProvider /// /// /// void SetVideoParameters(int width, int height); /// /// set audio parameters. cannot change later /// void SetAudioParameters(int sampleRate, int channels, int bits); /// /// set metadata parameters; should be called before opening file /// ok to not set at all, if not applicable /// /// The name of the game loaded /// Authors on movie file /// Length of movie file in milliseconds /// Number of rerecords on movie file void SetMetaData(string gameName, string authors, UInt64 lengthMS, UInt64 rerecords); } }