// Copyright © 2019 The CefSharp Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
using System;
using CefSharp.Structs;
namespace CefSharp
{
///
/// Implement this interface to handle audio events
/// All methods will be called on the CEF UI thread
///
public interface IAudioHandler : IDisposable
{
///
/// Called on the CEF UI thread to allow configuration of audio stream parameters.
/// Audio stream paramaters can optionally be configured by modifying
///
/// the ChromiumWebBrowser control
/// the browser object
/// audio stream parameters can optionally be configured here, they are
/// pre-filled with some sensible defaults.
/// Return true to proceed with audio stream capture, or false to cancel it
bool GetAudioParameters(IWebBrowser chromiumWebBrowser, IBrowser browser, ref AudioParameters parameters);
///
/// Called on a browser audio capture thread when the browser starts streaming audio.
/// OnAudioStreamStopped will always be called after OnAudioStreamStarted; both methods may be called multiple
/// times for the same browser.
///
/// the ChromiumWebBrowser control
/// the browser object
/// contains the audio parameters like sample rate and channel layout.
/// Changing the param values will have no effect here.
/// is the number of channels
void OnAudioStreamStarted(IWebBrowser chromiumWebBrowser,
IBrowser browser,
AudioParameters parameters,
int channels);
///
/// Called on the audio stream thread when a PCM packet is received for the stream.
/// Based on and the value passed to
/// you can calculate the size of the array in bytes.
///
///
/// is an array representing the raw PCM data as a floating point type, i.e. 4-byte value(s).
/// is the number of frames in the PCM packet
/// is the presentation timestamp (in milliseconds since the Unix Epoch)
/// and represents the time at which the decompressed packet should be presented to the user
void OnAudioStreamPacket(IWebBrowser chromiumWebBrowser, IBrowser browser, IntPtr data, int noOfFrames, long pts);
///
/// Called on the CEF UI thread when the stream has stopped. OnAudioStreamStopped will always be called after ;
/// both methods may be called multiple times for the same stream.
///
/// the ChromiumWebBrowser control
/// the browser object
void OnAudioStreamStopped(IWebBrowser chromiumWebBrowser, IBrowser browser);
///
/// Called on the CEF UI thread or audio stream thread when an error occurred. During the
/// stream creation phase this callback will be called on the UI thread while
/// in the capturing phase it will be called on the audio stream thread. The
/// stream will be stopped immediately.
///
/// the ChromiumWebBrowser control
/// the browser object
/// error message
void OnAudioStreamError(IWebBrowser chromiumWebBrowser, IBrowser browser, string errorMessage);
}
}