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
///
/// 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);
}
}