]> git.sesse.net Git - cubemap/blobdiff - server.cpp
Add a helper variable.
[cubemap] / server.cpp
index 946dc5d1df12d0c5b9c3d88058c0b5dad68c5a8d..d81181806f101c340fae84a5da8f02e20f6f9190 100644 (file)
@@ -337,8 +337,18 @@ void Server::set_header(int stream_index, const string &http_header, const strin
        MutexLock lock(&mutex);
        assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
        streams[stream_index]->http_header = http_header;
+
+       if (stream_header != streams[stream_index]->stream_header) {
+               // We cannot start at any of the older starting points anymore,
+               // since they'd get the wrong header for the stream (not to mention
+               // that a changed header probably means the stream restarted,
+               // which means any client starting on the old one would probably
+               // stop playing properly at the change point). Next block
+               // should be a suitable starting point (if not, something is
+               // pretty strange), so it will fill up again soon enough.
+               streams[stream_index]->suitable_starting_points.clear();
+       }
        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)
@@ -463,18 +473,17 @@ sending_header_or_error_again:
                // words, we won't send any of the backlog, but we'll start
                // sending immediately as we get the next keyframe block.
                // This is postcondition #3.
+               Stream *stream = client->stream;
                if (client->stream_pos == size_t(-2)) {
                        client->stream_pos = std::min<size_t>(
-                           client->stream->bytes_received - client->stream->backlog_size,
+                           stream->bytes_received - stream->backlog_size,
                            0);
                        client->state = Client::SENDING_DATA;
                } else {
-                       // client->stream_pos should be -1, but it might not be,
-                       // if we have clients from an older version.
-                       client->stream_pos = client->stream->bytes_received;
+                       client->stream_pos = stream->bytes_received;
                        client->state = Client::WAITING_FOR_KEYFRAME;
                }
-               client->stream->put_client_to_sleep(client);
+               stream->put_client_to_sleep(client);
                return;
        }
        case Client::WAITING_FOR_KEYFRAME: {