// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // SeekableBuffer to support backward and forward seeking in a buffer for // reading a media data source. // // In order to support backward and forward seeking, this class buffers data in // both backward and forward directions, the current read position can be reset // to anywhere in the buffered data. // // The amount of data buffered is regulated by two variables at construction, // |backward_capacity| and |forward_capacity|. // // In the case of reading and seeking forward, the current read position // advances and there will be more data in the backward direction. If backward // bytes exceeds |backward_capacity|, the exceeding bytes are evicted and thus // backward_bytes() will always be less than or equal to |backward_capacity|. // The eviction will be caused by Read() and Seek() in the forward direction and // is done internally when the mentioned criteria is fulfilled. // // In the case of appending data to the buffer, there is an advisory limit of // how many bytes can be kept in the forward direction, regulated by // |forward_capacity|. The append operation (by calling Append()) that caused // forward bytes to exceed |forward_capacity| will have a return value that // advises a halt of append operation, further append operations are allowed but // are not advised. Since this class is used as a backend buffer for caching // media files downloaded from network we cannot afford losing data, we can // only advise a halt of further writing to this buffer. // This class is not inherently thread-safe. Concurrent access must be // externally serialized. #ifndef MEDIA_BASE_SEEKABLE_BUFFER_H_ #define MEDIA_BASE_SEEKABLE_BUFFER_H_ #include <stdint.h> #include <list> #include "base/memory/scoped_refptr.h" #include "base/time/time.h" #include "media/base/media_export.h" namespace media { class DataBuffer; class MEDIA_EXPORT SeekableBuffer { … }; } // namespace media #endif // MEDIA_BASE_SEEKABLE_BUFFER_H_