1 // Copyright (c) 2019 Marshall A. Greenblatt. All rights reserved. 2 // 3 // Redistribution and use in source and binary forms, with or without 4 // modification, are permitted provided that the following conditions are 5 // met: 6 // 7 // * Redistributions of source code must retain the above copyright 8 // notice, this list of conditions and the following disclaimer. 9 // * Redistributions in binary form must reproduce the above 10 // copyright notice, this list of conditions and the following disclaimer 11 // in the documentation and/or other materials provided with the 12 // distribution. 13 // * Neither the name of Google Inc. nor the name Chromium Embedded 14 // Framework nor the names of its contributors may be used to endorse 15 // or promote products derived from this software without specific prior 16 // written permission. 17 // 18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // 30 // --------------------------------------------------------------------------- 31 // 32 // The contents of this file must follow a specific format in order to 33 // support the CEF translator tool. See the translator.README.txt file in the 34 // tools directory for more information. 35 // 36 37 #ifndef CEF_INCLUDE_CEF_AUDIO_HANDLER_H_ 38 #define CEF_INCLUDE_CEF_AUDIO_HANDLER_H_ 39 #pragma once 40 41 #include "include/cef_base.h" 42 #include "include/cef_browser.h" 43 44 /// 45 // Implement this interface to handle audio events. 46 /// 47 /*--cef(source=client)--*/ 48 class CefAudioHandler : public virtual CefBaseRefCounted { 49 public: 50 typedef cef_channel_layout_t ChannelLayout; 51 52 /// 53 // Called on the UI thread to allow configuration of audio stream parameters. 54 // Return true to proceed with audio stream capture, or false to cancel it. 55 // All members of |params| can optionally be configured here, but they are 56 // also pre-filled with some sensible defaults. 57 /// 58 /*--cef()--*/ GetAudioParameters(CefRefPtr<CefBrowser> browser,CefAudioParameters & params)59 virtual bool GetAudioParameters(CefRefPtr<CefBrowser> browser, 60 CefAudioParameters& params) { 61 return true; 62 } 63 64 /// 65 // Called on a browser audio capture thread when the browser starts 66 // streaming audio. OnAudioSteamStopped will always be called after 67 // OnAudioStreamStarted; both methods may be called multiple times 68 // for the same browser. |params| contains the audio parameters like 69 // sample rate and channel layout. |channels| is the number of channels. 70 /// 71 /*--cef()--*/ 72 virtual void OnAudioStreamStarted(CefRefPtr<CefBrowser> browser, 73 const CefAudioParameters& params, 74 int channels) = 0; 75 76 /// 77 // Called on the audio stream thread when a PCM packet is received for the 78 // stream. |data| is an array representing the raw PCM data as a floating 79 // point type, i.e. 4-byte value(s). |frames| is the number of frames in the 80 // PCM packet. |pts| is the presentation timestamp (in milliseconds since the 81 // Unix Epoch) and represents the time at which the decompressed packet should 82 // be presented to the user. Based on |frames| and the |channel_layout| value 83 // passed to OnAudioStreamStarted you can calculate the size of the |data| 84 // array in bytes. 85 /// 86 /*--cef()--*/ 87 virtual void OnAudioStreamPacket(CefRefPtr<CefBrowser> browser, 88 const float** data, 89 int frames, 90 int64 pts) = 0; 91 92 /// 93 // Called on the UI thread when the stream has stopped. OnAudioSteamStopped 94 // will always be called after OnAudioStreamStarted; both methods may be 95 // called multiple times for the same stream. 96 /// 97 /*--cef()--*/ 98 virtual void OnAudioStreamStopped(CefRefPtr<CefBrowser> browser) = 0; 99 100 /// 101 // Called on the UI or audio stream thread when an error occurred. During the 102 // stream creation phase this callback will be called on the UI thread while 103 // in the capturing phase it will be called on the audio stream thread. The 104 // stream will be stopped immediately. 105 /// 106 /*--cef()--*/ 107 virtual void OnAudioStreamError(CefRefPtr<CefBrowser> browser, 108 const CefString& message) = 0; 109 }; 110 111 #endif // CEF_INCLUDE_CEF_AUDIO_HANDLER_H_ 112