blob: 5087eed8e14849b3bb538c9f19c02b934279ef8b [file] [log] [blame]
// Copyright 2018 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/media.h"
#include "starboard/log.h"
#if SB_API_VERSION >= 10
// These are the legacy default values of the GYP variables.
#define LEGACY_MAX_CAPACITY_1080P 36 * 1024 * 1024
#define LEGACY_MAX_CAPACITY_4K 65 * 1024 * 1024
int SbMediaGetMaxBufferCapacity(SbMediaVideoCodec codec,
int resolution_width,
int resolution_height,
int bits_per_pixel) {
SB_UNREFERENCED_PARAMETER(codec);
if ((resolution_width <= 1920 && resolution_height <= 1080) ||
resolution_width == kSbMediaVideoResolutionDimensionInvalid ||
resolution_height == kSbMediaVideoResolutionDimensionInvalid) {
// The maximum amount of memory that will be used to store media buffers
// when video resolution is 1080p. If 0, then memory can grow without bound.
// This must be larger than sum of 1080p video budget and non-video budget.
#if defined(COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P) && \
COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P != LEGACY_MAX_CAPACITY_1080P
SB_DLOG(WARNING) << "COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P will be "
"deprecated in a future Starboard version.";
// Use define forwarded from GYP variable.
return COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P;
#else // defined(COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P) &&
// COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P != LEGACY_MAX_CAPACITY_1080P
return 50 * 1024 * 1024;
#endif // defined(COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P) &&
// COBALT_MEDIA_BUFFER_MAX_CAPACITY_1080P != LEGACY_MAX_CAPACITY_1080P
}
if (resolution_width <= 3840 && resolution_height <= 2160) {
if (bits_per_pixel <= 8) {
// The maximum amount of memory that will be used to store media buffers
// when video resolution is 4k and bit per pixel is lower than 8. If 0,
// then memory can grow without bound. This must be larger than sum of 4k
// video budget and non-video budget.
#if defined(COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K) && \
COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K != LEGACY_MAX_CAPACITY_4K
SB_DLOG(WARNING) << "COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K will be "
"deprecated in a future Starboard version.";
// Use define forwarded from GYP variable.
return COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K;
#else // defined(COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K) &&
// COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K != LEGACY_MAX_CAPACITY_4K
return 140 * 1024 * 1024;
#endif // defined(COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K) &&
// COBALT_MEDIA_BUFFER_MAX_CAPACITY_4K != LEGACY_MAX_CAPACITY_4K
} else {
// The maximum amount of memory that will be used to store media buffers
// when video resolution is 4k and bit per pixel is greater than 8. If 0,
// then memory can grow without bound. This must be larger than sum of 4k
// video budget and non-video budget.
return 210 * 1024 * 1024;
}
}
// The maximum amount of memory that will be used to store media buffers when
// video resolution is 8k. If 0, then memory can grow without bound. This
// must be larger than sum of 8k video budget and non-video budget.
return 360 * 1024 * 1024;
}
#endif // SB_API_VERSION >= 10