Chromium Code Reviews| Index: media/mp4/offset_byte_queue.h |
| diff --git a/media/mp4/offset_byte_queue.h b/media/mp4/offset_byte_queue.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..09fe2fb625bd54ddd66aca7f0ec7f8f62b082465 |
| --- /dev/null |
| +++ b/media/mp4/offset_byte_queue.h |
| @@ -0,0 +1,65 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef MEDIA_MP4_OFFSET_BYTE_QUEUE_H_ |
| +#define MEDIA_MP4_OFFSET_BYTE_QUEUE_H_ |
| + |
| +#include "base/basictypes.h" |
| +#include "media/base/byte_queue.h" |
| + |
| +namespace media { |
| + |
| +// A wrapper around a ByteQueue which maintains a notion of a |
| +// monotonically-increasing offset. All buffer access is done by passing these |
| +// offsets into this class, going some way towards preventing the proliferation |
| +// of many different meanings of "offset", "head", etc. |
| +class OffsetByteQueue { |
| + public: |
| + OffsetByteQueue(); |
| + ~OffsetByteQueue(); |
| + |
| + // These work like their underlying ByteQueue counterparts. |
| + void Reset(); |
| + void Push(const uint8* buf, size_t size); |
| + void Peek(const uint8** buf, size_t* size); |
| + void Pop(size_t count); |
| + |
| + // Sets |buf| to point at the first buffered byte corresponding to |offset|, |
| + // and |size| to the number of bytes available starting from that offset. |
| + // |
| + // It is an error if the offset is before the current head. It's not an error |
| + // if the current offset is beyond tail(), but you will of course get back |
| + // a null |buf| and a |size| of zero. |
| + void PeekAt(size_t offset, const uint8** buf, size_t* size); |
| + |
| + // Marks the bytes up to (but not including) |max_offset| as ready for |
| + // deletion. This is relatively inexpensive, but will not necessarily reduce |
| + // the resident buffer size right away (or ever). |
| + // |
| + // Returns true if the full range of bytes were successfully trimmed, |
| + // including the case where |max_offset| is less than the current head. |
| + // Returns false if |max_offset| > tail() (although all bytes currently |
| + // buffered are still cleared). |
| + bool Trim(size_t max_offset); |
| + |
| + // The head and tail positions, in terms of the file's absolute offsets. |
| + // tail() is an exclusive bound. |
| + size_t head() { return head_; } |
|
acolwell GONE FROM CHROMIUM
2012/06/07 19:44:02
Is there any reason these and other values in here
strobe_
2012/06/07 22:04:22
Done.
|
| + size_t tail() { return head_ + size_; } |
| + |
| + private: |
| + // Synchronize |buf_| and |size_| with |queue_|. |
| + void Sync(); |
| + |
| + ByteQueue queue_; |
| + const uint8* buf_; |
| + size_t size_; |
| + size_t head_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(OffsetByteQueue); |
| +}; |
| + |
| +} // namespace media |
| + |
| +#endif // MEDIA_MP4_MP4_STREAM_PARSER_H_ |