assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
streams[stream_index]->set_backlog_size(new_size);
}
+
+void Server::set_prebuffering_bytes(int stream_index, size_t new_amount)
+{
+ MutexLock lock(&mutex);
+ assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
+ streams[stream_index]->prebuffering_bytes = new_amount;
+}
void Server::set_encoding(int stream_index, Stream::Encoding encoding)
{
assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
streams[stream_index]->http_header = http_header;
streams[stream_index]->stream_header = stream_header;
+ // FIXME: We should reset last_suitable_starting_point at this point.
}
void Server::set_pacing_rate(int stream_index, uint32_t pacing_rate)
}
case Client::WAITING_FOR_KEYFRAME: {
Stream *stream = client->stream;
- if (ssize_t(client->stream_pos) > stream->last_suitable_starting_point) {
+ if (stream->suitable_starting_points.empty() ||
+ client->stream_pos > stream->suitable_starting_points.back()) {
// We haven't received a keyframe since this stream started waiting,
// so keep on waiting for one.
// This is postcondition #3.
stream->put_client_to_sleep(client);
return;
}
- client->stream_pos = stream->last_suitable_starting_point;
+ client->stream_pos = stream->suitable_starting_points.back();
client->state = Client::PREBUFFERING;
// Fall through.
}
assert(bytes_to_send <= stream->backlog_size);
if (bytes_to_send < stream->prebuffering_bytes) {
// We don't have enough bytes buffered to start this client yet.
+ // This is postcondition #3.
stream->put_client_to_sleep(client);
return;
}