| // Copyright 2016 The Cobalt Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef STARBOARD_SHARED_STARBOARD_AUDIO_SINK_AUDIO_SINK_INTERNAL_H_ |
| #define STARBOARD_SHARED_STARBOARD_AUDIO_SINK_AUDIO_SINK_INTERNAL_H_ |
| |
| #include "starboard/audio_sink.h" |
| |
| #include <functional> |
| |
| #include "starboard/configuration.h" |
| #include "starboard/shared/internal_only.h" |
| |
| struct SbAudioSinkPrivate { |
| #if SB_API_VERSION >= 12 |
| // When |capability_changed| is true, it hints that the error is caused by a |
| // a transisent capability on the platform. The app should retry playback to |
| // recover from the error. |
| // TODO: Allow to pass an error message. |
| typedef void (*ErrorFunc)(bool capability_changed, void* context); |
| #endif // SB_API_VERSION >= 12 |
| |
| typedef std::function< |
| void(int frames_consumed, SbTime frames_consumed_at, void* context)> |
| ConsumeFramesFunc; |
| |
| class Type { |
| public: |
| virtual ~Type() {} |
| |
| // |error_func| can be NULL to indicate that there is no error handling. |
| virtual SbAudioSink Create( |
| int channels, |
| int sampling_frequency_hz, |
| SbMediaAudioSampleType audio_sample_type, |
| SbMediaAudioFrameStorageType audio_frame_storage_type, |
| SbAudioSinkFrameBuffers frame_buffers, |
| int frame_buffers_size_in_frames, |
| SbAudioSinkUpdateSourceStatusFunc update_source_status_func, |
| ConsumeFramesFunc consume_frames_func, |
| #if SB_API_VERSION >= 12 |
| ErrorFunc error_func, |
| #endif // SB_API_VERSION >= 12 |
| void* context) = 0; |
| virtual bool IsValid(SbAudioSink audio_sink) = 0; |
| virtual void Destroy(SbAudioSink audio_sink) = 0; |
| }; |
| |
| virtual ~SbAudioSinkPrivate() {} |
| virtual void SetPlaybackRate(double playback_rate) = 0; |
| |
| virtual void SetVolume(double volume) = 0; |
| |
| virtual bool IsType(Type* type) = 0; |
| |
| // The following two functions will be called during application startup and |
| // termination. |
| static void Initialize(); |
| static void TearDown(); |
| // This function has to be called inside PlatformInitialize() and |
| // PlatformTearDown() to set or clear the primary audio sink type. |
| static void SetPrimaryType(Type* type); |
| static Type* GetPrimaryType(); |
| // This function can only be called inside PlatformInitialize(). Once it is |
| // called, GetFallbackType() will return a valid Type that can be used to |
| // create audio sink stubs. |
| static void EnableFallbackToStub(); |
| // Return a valid Type to create a fallback audio sink if fallback to stub is |
| // enabled. Otherwise return NULL. |
| static Type* GetFallbackType(); |
| |
| // Return a valid Type, choosing the Primary type if available, otherwise |
| // Fallback. If Fallback is not enabled, then returns NULL. |
| static Type* GetPreferredType(); |
| |
| static SbAudioSink Create( |
| int channels, |
| int sampling_frequency_hz, |
| SbMediaAudioSampleType audio_sample_type, |
| SbMediaAudioFrameStorageType audio_frame_storage_type, |
| SbAudioSinkFrameBuffers frame_buffers, |
| int frame_buffers_size_in_frames, |
| SbAudioSinkUpdateSourceStatusFunc update_source_status_func, |
| ConsumeFramesFunc consume_frames_func, |
| #if SB_API_VERSION >= 12 |
| ErrorFunc error_func, |
| #endif // SB_API_VERSION >= 12 |
| void* context); |
| |
| static SbAudioSink Create( |
| int channels, |
| int sampling_frequency_hz, |
| SbMediaAudioSampleType audio_sample_type, |
| SbMediaAudioFrameStorageType audio_frame_storage_type, |
| SbAudioSinkFrameBuffers frame_buffers, |
| int frame_buffers_size_in_frames, |
| SbAudioSinkUpdateSourceStatusFunc update_source_status_func, |
| SbAudioSinkConsumeFramesFunc sb_consume_frames_func, |
| #if SB_API_VERSION >= 12 |
| ErrorFunc error_func, |
| #endif // SB_API_VERSION >= 12 |
| void* context); |
| |
| // Individual implementation has to provide implementation of the following |
| // functions, which will be called inside Initialize() and TearDown(). |
| static void PlatformInitialize(); |
| static void PlatformTearDown(); |
| }; |
| |
| #endif // STARBOARD_SHARED_STARBOARD_AUDIO_SINK_AUDIO_SINK_INTERNAL_H_ |