| // Copyright 2013 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 COBALT_MEDIA_BLINK_WEBSOURCEBUFFER_IMPL_H_ |
| #define COBALT_MEDIA_BLINK_WEBSOURCEBUFFER_IMPL_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "base/time.h" |
| #include "starboard/types.h" |
| #include "third_party/WebKit/public/platform/WebSourceBuffer.h" |
| |
| namespace cobalt { |
| namespace media { |
| class ChunkDemuxer; |
| class MediaTracks; |
| |
| class WebSourceBufferImpl : public blink::WebSourceBuffer { |
| public: |
| WebSourceBufferImpl(const std::string& id, ChunkDemuxer* demuxer); |
| ~WebSourceBufferImpl() OVERRIDE; |
| |
| // blink::WebSourceBuffer implementation. |
| void setClient(blink::WebSourceBufferClient* client) OVERRIDE; |
| bool setMode(AppendMode mode) OVERRIDE; |
| blink::WebTimeRanges buffered() OVERRIDE; |
| double highestPresentationTimestamp() OVERRIDE; |
| bool evictCodedFrames(double currentPlaybackTime, |
| size_t newDataSize) OVERRIDE; |
| bool append(const unsigned char* data, unsigned length, |
| double* timestamp_offset) OVERRIDE; |
| void resetParserState() OVERRIDE; |
| void remove(double start, double end) OVERRIDE; |
| bool setTimestampOffset(double offset) OVERRIDE; |
| void setAppendWindowStart(double start) OVERRIDE; |
| void setAppendWindowEnd(double end) OVERRIDE; |
| void removedFromMediaSource() OVERRIDE; |
| |
| private: |
| // Demuxer callback handler to process an initialization segment received |
| // during an append() call. |
| void InitSegmentReceived(std::unique_ptr<MediaTracks> tracks); |
| |
| std::string id_; |
| ChunkDemuxer* demuxer_; // Owned by WebMediaPlayerImpl. |
| |
| blink::WebSourceBufferClient* client_; |
| |
| // Controls the offset applied to timestamps when processing appended media |
| // segments. It is initially 0, which indicates that no offset is being |
| // applied. Both setTimestampOffset() and append() may update this value. |
| base::TimeDelta timestamp_offset_; |
| |
| base::TimeDelta append_window_start_; |
| base::TimeDelta append_window_end_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WebSourceBufferImpl); |
| }; |
| |
| } // namespace media |
| } // namespace cobalt |
| |
| #endif // COBALT_MEDIA_BLINK_WEBSOURCEBUFFER_IMPL_H_ |