blob: 980d6d7c4b6dedb7d36beacfc17703d85ed7f162 [file] [log] [blame]
// Copyright 2022 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 COBALT_MEDIA_BASE_SBPLAYER_INTERFACE_H_
#define COBALT_MEDIA_BASE_SBPLAYER_INTERFACE_H_
#include "base/time/time.h"
#include "cobalt/media/base/cval_stats.h"
#include "cobalt/media/base/metrics_provider.h"
#include "starboard/extension/enhanced_audio.h"
#include "starboard/player.h"
#if SB_HAS(PLAYER_WITH_URL)
#include SB_URL_PLAYER_INCLUDE_PATH
#endif // SB_HAS(PLAYER_WITH_URL)
namespace cobalt {
namespace media {
class SbPlayerInterface {
public:
virtual ~SbPlayerInterface() {}
virtual SbPlayer Create(
SbWindow window, const SbPlayerCreationParam* creation_param,
SbPlayerDeallocateSampleFunc sample_deallocate_func,
SbPlayerDecoderStatusFunc decoder_status_func,
SbPlayerStatusFunc player_status_func,
SbPlayerErrorFunc player_error_func, void* context,
SbDecodeTargetGraphicsContextProvider* context_provider) = 0;
virtual SbPlayerOutputMode GetPreferredOutputMode(
const SbPlayerCreationParam* creation_param) = 0;
virtual void Destroy(SbPlayer player) = 0;
virtual void Seek(SbPlayer player, base::TimeDelta seek_to_timestamp,
int ticket) = 0;
virtual bool IsEnhancedAudioExtensionEnabled() const = 0;
virtual void WriteSamples(SbPlayer player, SbMediaType sample_type,
const SbPlayerSampleInfo* sample_infos,
int number_of_sample_infos) = 0;
virtual void WriteSamples(
SbPlayer player, SbMediaType sample_type,
const CobaltExtensionEnhancedAudioPlayerSampleInfo* sample_infos,
int number_of_sample_infos) = 0;
virtual int GetMaximumNumberOfSamplesPerWrite(SbPlayer player,
SbMediaType sample_type) = 0;
virtual void WriteEndOfStream(SbPlayer player, SbMediaType stream_type) = 0;
virtual void SetBounds(SbPlayer player, int z_index, int x, int y, int width,
int height) = 0;
virtual bool SetPlaybackRate(SbPlayer player, double playback_rate) = 0;
virtual void SetVolume(SbPlayer player, double volume) = 0;
#if SB_API_VERSION >= 15
virtual void GetInfo(SbPlayer player, SbPlayerInfo* out_player_info) = 0;
#else // SB_API_VERSION >= 15
virtual void GetInfo(SbPlayer player, SbPlayerInfo2* out_player_info2) = 0;
#endif // SB_API_VERSION >= 15
virtual SbDecodeTarget GetCurrentFrame(SbPlayer player) = 0;
#if SB_HAS(PLAYER_WITH_URL)
virtual SbPlayer CreateUrlPlayer(const char* url, SbWindow window,
SbPlayerStatusFunc player_status_func,
SbPlayerEncryptedMediaInitDataEncounteredCB
encrypted_media_init_data_encountered_cb,
SbPlayerErrorFunc player_error_func,
void* context) = 0;
virtual void SetUrlPlayerDrmSystem(SbPlayer player,
SbDrmSystem drm_system) = 0;
virtual bool GetUrlPlayerOutputModeSupported(
SbPlayerOutputMode output_mode) = 0;
virtual void GetUrlPlayerExtraInfo(
SbPlayer player, SbUrlPlayerExtraInfo* out_url_player_info) = 0;
#endif // SB_HAS(PLAYER_WITH_URL)
#if SB_API_VERSION >= 15
virtual bool GetAudioConfiguration(
SbPlayer player, int index,
SbMediaAudioConfiguration* out_audio_configuration) = 0;
#endif // SB_API_VERSION >= 15
// disabled by default, but can be enabled via h5vcc setting.
void EnableCValStats(bool should_enable) {
cval_stats_.Enable(should_enable);
}
CValStats cval_stats_;
MediaMetricsProvider media_metrics_provider_;
};
class DefaultSbPlayerInterface final : public SbPlayerInterface {
public:
DefaultSbPlayerInterface();
SbPlayer Create(
SbWindow window, const SbPlayerCreationParam* creation_param,
SbPlayerDeallocateSampleFunc sample_deallocate_func,
SbPlayerDecoderStatusFunc decoder_status_func,
SbPlayerStatusFunc player_status_func,
SbPlayerErrorFunc player_error_func, void* context,
SbDecodeTargetGraphicsContextProvider* context_provider) override;
SbPlayerOutputMode GetPreferredOutputMode(
const SbPlayerCreationParam* creation_param) override;
void Destroy(SbPlayer player) override;
void Seek(SbPlayer player, base::TimeDelta seek_to_timestamp,
int ticket) override;
bool IsEnhancedAudioExtensionEnabled() const override;
void WriteSamples(SbPlayer player, SbMediaType sample_type,
const SbPlayerSampleInfo* sample_infos,
int number_of_sample_infos) override;
void WriteSamples(
SbPlayer player, SbMediaType sample_type,
const CobaltExtensionEnhancedAudioPlayerSampleInfo* sample_infos,
int number_of_sample_infos) override;
int GetMaximumNumberOfSamplesPerWrite(SbPlayer player,
SbMediaType sample_type) override;
void WriteEndOfStream(SbPlayer player, SbMediaType stream_type) override;
void SetBounds(SbPlayer player, int z_index, int x, int y, int width,
int height) override;
bool SetPlaybackRate(SbPlayer player, double playback_rate) override;
void SetVolume(SbPlayer player, double volume) override;
#if SB_API_VERSION >= 15
void GetInfo(SbPlayer player, SbPlayerInfo* out_player_info) override;
#else // SB_API_VERSION >= 15
void GetInfo(SbPlayer player, SbPlayerInfo2* out_player_info2) override;
#endif // SB_API_VERSION >= 15
SbDecodeTarget GetCurrentFrame(SbPlayer player) override;
#if SB_HAS(PLAYER_WITH_URL)
SbPlayer CreateUrlPlayer(const char* url, SbWindow window,
SbPlayerStatusFunc player_status_func,
SbPlayerEncryptedMediaInitDataEncounteredCB
encrypted_media_init_data_encountered_cb,
SbPlayerErrorFunc player_error_func,
void* context) override;
void SetUrlPlayerDrmSystem(SbPlayer player, SbDrmSystem drm_system) override;
bool GetUrlPlayerOutputModeSupported(SbPlayerOutputMode output_mode) override;
void GetUrlPlayerExtraInfo(
SbPlayer player, SbUrlPlayerExtraInfo* out_url_player_info) override;
#endif // SB_HAS(PLAYER_WITH_URL)
#if SB_API_VERSION >= 15
bool GetAudioConfiguration(
SbPlayer player, int index,
SbMediaAudioConfiguration* out_audio_configuration) override;
#endif // SB_API_VERSION >= 15
private:
void (*enhanced_audio_player_write_samples_)(
SbPlayer player, SbMediaType sample_type,
const CobaltExtensionEnhancedAudioPlayerSampleInfo* sample_infos,
int number_of_sample_infos) = nullptr;
};
} // namespace media
} // namespace cobalt
#endif // COBALT_MEDIA_BASE_SBPLAYER_INTERFACE_H_