// 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. #ifndef MEDIA_BASE_STREAM_PARSER_H_ #define MEDIA_BASE_STREAM_PARSER_H_ #include <stddef.h> #include <stdint.h> #include <memory> #include <vector> #include "base/containers/circular_deque.h" #include "base/containers/flat_map.h" #include "base/containers/span.h" #include "base/functional/callback_forward.h" #include "base/memory/scoped_refptr.h" #include "base/time/time.h" #include "media/base/demuxer_stream.h" #include "media/base/eme_constants.h" #include "media/base/media_export.h" namespace media { class MediaLog; class MediaTracks; class StreamParserBuffer; // Abstract interface for parsing media byte streams. class MEDIA_EXPORT StreamParser { … }; // Appends to |merged_buffers| the provided buffers in decode-timestamp order. // Any previous contents of |merged_buffers| is assumed to have lower // decode timestamps versus the provided buffers. All provided buffer queues // are assumed to already be in decode-timestamp order. // Returns false if any of the provided audio/video buffers are found // to not be in decode timestamp order, or have a decode timestamp less than // the last buffer, if any, in |merged_buffers|. Partial results may exist // in |merged_buffers| in this case. Returns true on success. // No validation of media type within the various buffer queues is done here. // TODO(wolenetz/acolwell): Merge incrementally in parsers to eliminate // subtle issues with tie-breaking. See http://crbug.com/338484. MEDIA_EXPORT bool MergeBufferQueues(const StreamParser::BufferQueueMap& buffers, StreamParser::BufferQueue* merged_buffers); } // namespace media #endif // MEDIA_BASE_STREAM_PARSER_H_