25 if (size_in_bytes == 0 || duration == 0) {
26 LOG(WARNING) <<
"Ignore block with size=" << size_in_bytes
27 <<
", duration=" << duration;
31 const int kBitsInByte = 8;
32 const uint64_t size_in_bits = size_in_bytes * kBitsInByte;
33 total_size_in_bits_ += size_in_bits;
34 total_duration_ += duration;
36 const size_t kTargetDurationThreshold = 10;
37 if (initial_blocks_.size() < kTargetDurationThreshold) {
38 initial_blocks_.push_back({size_in_bits, duration});
42 if (target_block_duration_ == 0) {
45 target_block_duration_ = GetAverageBlockDuration();
46 for (
const Block& block : initial_blocks_) {
48 std::max(max_bitrate_, GetBitrate(block, target_block_duration_));
52 max_bitrate_ = std::max(max_bitrate_, GetBitrate({size_in_bits, duration},
53 target_block_duration_));
63 if (max_bitrate_ != 0)
68 DCHECK(target_block_duration_ == 0);
69 const double target_block_duration = GetAverageBlockDuration();
72 uint64_t max_bitrate = 0;
73 for (
const Block& block : initial_blocks_) {
75 std::max(max_bitrate, GetBitrate(block, target_block_duration));
84 std::accumulate(initial_blocks_.begin(), initial_blocks_.end(), 0.0,