diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-11-28 11:55:43 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-11-28 11:55:43 +0000 |
commit | f2477e01787aa58f445919b809d89e252beef54f (patch) | |
tree | 2db962b4af39f0db3a5f83b314373d0530c484b8 /media/base/fake_text_track_stream.cc | |
parent | 7daea1dd5ff7e419322de831b642d81af3247912 (diff) | |
download | chromium_org-f2477e01787aa58f445919b809d89e252beef54f.tar.gz |
Merge from Chromium at DEPS revision 237746
This commit was generated by merge_to_master.py.
Change-Id: I8997af4cddfeb09a7c26f7e8e672c712cab461ea
Diffstat (limited to 'media/base/fake_text_track_stream.cc')
-rw-r--r-- | media/base/fake_text_track_stream.cc | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/media/base/fake_text_track_stream.cc b/media/base/fake_text_track_stream.cc new file mode 100644 index 0000000000..3136c475a7 --- /dev/null +++ b/media/base/fake_text_track_stream.cc @@ -0,0 +1,83 @@ +// 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. + +#include "media/base/fake_text_track_stream.h" + +#include "base/bind.h" +#include "base/callback_helpers.h" +#include "media/base/decoder_buffer.h" +#include "media/filters/webvtt_util.h" + +namespace media { + +FakeTextTrackStream::FakeTextTrackStream() + : message_loop_(base::MessageLoopProxy::current()), + stopping_(false) { +} + +FakeTextTrackStream::~FakeTextTrackStream() { + DCHECK(read_cb_.is_null()); +} + +void FakeTextTrackStream::Read(const ReadCB& read_cb) { + DCHECK(!read_cb.is_null()); + DCHECK(read_cb_.is_null()); + OnRead(); + read_cb_ = read_cb; + + if (stopping_) { + message_loop_->PostTask(FROM_HERE, base::Bind( + &FakeTextTrackStream::AbortPendingRead, base::Unretained(this))); + } +} + +DemuxerStream::Type FakeTextTrackStream::type() { + return DemuxerStream::TEXT; +} + +void FakeTextTrackStream::SatisfyPendingRead( + const base::TimeDelta& start, + const base::TimeDelta& duration, + const std::string& id, + const std::string& content, + const std::string& settings) { + DCHECK(!read_cb_.is_null()); + + const uint8* const data_buf = reinterpret_cast<const uint8*>(content.data()); + const int data_len = static_cast<int>(content.size()); + + std::vector<uint8> side_data; + MakeSideData(id.begin(), id.end(), + settings.begin(), settings.end(), + &side_data); + + const uint8* const sd_buf = &side_data[0]; + const int sd_len = static_cast<int>(side_data.size()); + + scoped_refptr<DecoderBuffer> buffer; + buffer = DecoderBuffer::CopyFrom(data_buf, data_len, sd_buf, sd_len); + + buffer->set_timestamp(start); + buffer->set_duration(duration); + + base::ResetAndReturn(&read_cb_).Run(kOk, buffer); +} + +void FakeTextTrackStream::AbortPendingRead() { + DCHECK(!read_cb_.is_null()); + base::ResetAndReturn(&read_cb_).Run(kAborted, NULL); +} + +void FakeTextTrackStream::SendEosNotification() { + DCHECK(!read_cb_.is_null()); + base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer()); +} + +void FakeTextTrackStream::Stop() { + stopping_ = true; + if (!read_cb_.is_null()) + AbortPendingRead(); +} + +} // namespace media |