====== Audio, Video and Desktop Capture Library Specification ====== This is a specification of [[developers:gsoc:2015:ideas#Modular_library_for_platform-dependent_audio_video_and_desktop_capture|Modular library for platform-dependent audio video and desktop capture]] GSoC idea. ====== Modules ====== ===== Video ===== Should be written using platform native APIs, i.e. no GStreamer, OpenCV, QtMultimedia, etc. **Windows**: * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms696274.aspx|Windows Media Foundation]] (Windows Vista+), C++ API * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd375454.aspx|DirectShow]] (Windows XP+), C++ API **OS X**: * [[https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html|AV Foundation]] (OS X 10.7+), Obj-C API ==== Expected functionality to be implemented ==== * Get a list of all camera devices, with their respected camera ids and UI-friendly device names. * Specify which camera to use, based on the camera id from the camera list. * Use multiple cameras at once. * Capture a single frame (a still image). * Capture a continuous stream (a video). * All capturing should be done in YUV and RGB. * Get list of supported camera resolutions. * Set resolution of capturing images. * Get notified when a camera is connected to/disconnected from the computer. * Change image brightness, contrast, saturation. ===== Audio ===== Should be written using platform native APIs (what about OpenAL?). ==== Expected functionality to be implemented ==== * Get a list of all audio recording devices, with their respected device ids and UI-friendly device names. * Specify which audio recording device to use, based on the device id from the device list. * Capture audio in 48khz 16bit signed PCM. * Get a list of all audio playback devices, with their respected device ids and UI-friendly device names. * Specify which audio playback device to use, based on the device id from the device list. * Audio playback. * Audio mixing. * Get notified when an audio device is connected to/disconnected from the computer. ===== Desktop ===== Should be written using platform native APIs. On Linux it should support X11, Wayland and Mir. ==== Expected functionality to be implemented ==== * Get a list of all monitors. * Specify which monitor to capture, based on the list. * Capture a single frame. * Capture a continuous stream. Some(?) APIs provide this, which is different from manually capturing frame by frame. * All capturing should be done in YUV and RGB. * Get monitor's properties, such as resolution. * Get notified when a monitor is added/removed.