blob: 161d544c43ccf6b223b082cf96d0edab08429166 [file] [log] [blame]
// Copyright 2020 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.
#include "starboard/nplb/player_creation_param_helpers.h"
#include "starboard/common/log.h"
namespace starboard {
namespace nplb {
SbMediaAudioSampleInfo CreateAudioSampleInfo(SbMediaAudioCodec codec) {
SbMediaAudioSampleInfo audio_sample_info = {};
#if SB_API_VERSION >= 11
audio_sample_info.codec = codec;
#endif // SB_API_VERSION >= 11
#if SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
audio_sample_info.mime = "";
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
switch (codec) {
case kSbMediaAudioCodecNone:
break;
case kSbMediaAudioCodecAac: {
static const uint8_t kAacAudioSpecificConfig[16] = {18, 16};
audio_sample_info.format_tag = 0xff;
audio_sample_info.number_of_channels = 2;
audio_sample_info.samples_per_second = 44100;
audio_sample_info.block_alignment = 4;
audio_sample_info.bits_per_sample = 16;
audio_sample_info.audio_specific_config = kAacAudioSpecificConfig;
audio_sample_info.audio_specific_config_size =
sizeof(kAacAudioSpecificConfig);
audio_sample_info.average_bytes_per_second =
audio_sample_info.samples_per_second *
audio_sample_info.number_of_channels *
audio_sample_info.bits_per_sample / 8;
break;
}
case kSbMediaAudioCodecAc3:
case kSbMediaAudioCodecEac3: {
audio_sample_info.format_tag = 0xff;
audio_sample_info.number_of_channels = 6;
audio_sample_info.samples_per_second = 48000;
audio_sample_info.block_alignment = 4;
audio_sample_info.bits_per_sample = 16;
audio_sample_info.audio_specific_config = nullptr;
audio_sample_info.audio_specific_config_size = 0;
audio_sample_info.average_bytes_per_second =
audio_sample_info.samples_per_second *
audio_sample_info.number_of_channels *
audio_sample_info.bits_per_sample / 8;
break;
}
case kSbMediaAudioCodecOpus: {
static const uint8_t kOpusAudioSpecificConfig[19] = {
79, 112, 117, 115, 72, 101, 97, 100, 1, 2, 56, 1, 128, 187};
audio_sample_info.format_tag = 0xff;
audio_sample_info.number_of_channels = 2;
audio_sample_info.samples_per_second = 48000;
audio_sample_info.block_alignment = 4;
audio_sample_info.bits_per_sample = 32;
audio_sample_info.audio_specific_config = kOpusAudioSpecificConfig;
audio_sample_info.audio_specific_config_size =
sizeof(kOpusAudioSpecificConfig);
audio_sample_info.average_bytes_per_second =
audio_sample_info.samples_per_second *
audio_sample_info.number_of_channels *
audio_sample_info.bits_per_sample / 8;
break;
}
case kSbMediaAudioCodecVorbis: {
// Note that unlike the configuration of the other formats, the following
// configuration is made up, instead of taking from a real input.
audio_sample_info.format_tag = 0xff;
audio_sample_info.number_of_channels = 2;
audio_sample_info.samples_per_second = 48000;
audio_sample_info.block_alignment = 4;
audio_sample_info.bits_per_sample = 16;
audio_sample_info.audio_specific_config = nullptr;
audio_sample_info.audio_specific_config_size = 0;
audio_sample_info.average_bytes_per_second =
audio_sample_info.samples_per_second *
audio_sample_info.number_of_channels *
audio_sample_info.bits_per_sample / 8;
break;
}
}
return audio_sample_info;
}
SbMediaVideoSampleInfo CreateVideoSampleInfo(SbMediaVideoCodec codec) {
SbMediaVideoSampleInfo video_sample_info = {};
#if SB_API_VERSION >= 11
video_sample_info.codec = codec;
#endif // SB_API_VERSION >= 11
#if SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
video_sample_info.mime = "";
video_sample_info.max_video_capabilities = "";
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
#if SB_API_VERSION >= 11
video_sample_info.color_metadata.primaries = kSbMediaPrimaryIdBt709;
video_sample_info.color_metadata.transfer = kSbMediaTransferIdBt709;
video_sample_info.color_metadata.matrix = kSbMediaMatrixIdBt709;
video_sample_info.color_metadata.range = kSbMediaRangeIdLimited;
#else // SB_API_VERSION >= 11
static SbMediaColorMetadata color_metadata;
color_metadata.primaries = kSbMediaPrimaryIdBt709;
color_metadata.transfer = kSbMediaTransferIdBt709;
color_metadata.matrix = kSbMediaMatrixIdBt709;
color_metadata.range = kSbMediaRangeIdLimited;
video_sample_info.color_metadata = &color_metadata;
#endif // SB_API_VERSION >= 11
video_sample_info.frame_width = 1920;
video_sample_info.frame_height = 1080;
return video_sample_info;
}
#if SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
SbPlayerCreationParam CreatePlayerCreationParam(SbMediaAudioCodec audio_codec,
SbMediaVideoCodec video_codec) {
SbPlayerCreationParam creation_param = {};
creation_param.drm_system = kSbDrmSystemInvalid;
creation_param.audio_sample_info = CreateAudioSampleInfo(audio_codec);
creation_param.video_sample_info = CreateVideoSampleInfo(video_codec);
creation_param.output_mode = kSbPlayerOutputModeInvalid;
return creation_param;
}
#endif // SB_HAS(PLAYER_CREATION_AND_OUTPUT_MODE_QUERY_IMPROVEMENT)
} // namespace nplb
} // namespace starboard