Home | History | Annotate | Download | only in base
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "media/base/fake_text_track_stream.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/callback_helpers.h"
      9 #include "media/base/decoder_buffer.h"
     10 #include "media/filters/webvtt_util.h"
     11 
     12 namespace media {
     13 
     14 FakeTextTrackStream::FakeTextTrackStream()
     15     : task_runner_(base::MessageLoopProxy::current()),
     16       stopping_(false) {
     17 }
     18 
     19 FakeTextTrackStream::~FakeTextTrackStream() {
     20   DCHECK(read_cb_.is_null());
     21 }
     22 
     23 void FakeTextTrackStream::Read(const ReadCB& read_cb) {
     24   DCHECK(!read_cb.is_null());
     25   DCHECK(read_cb_.is_null());
     26   OnRead();
     27   read_cb_ = read_cb;
     28 
     29   if (stopping_) {
     30     task_runner_->PostTask(FROM_HERE, base::Bind(
     31         &FakeTextTrackStream::AbortPendingRead, base::Unretained(this)));
     32   }
     33 }
     34 
     35 DemuxerStream::Type FakeTextTrackStream::type() {
     36   return DemuxerStream::TEXT;
     37 }
     38 
     39 bool FakeTextTrackStream::SupportsConfigChanges() { return false; }
     40 
     41 void FakeTextTrackStream::SatisfyPendingRead(
     42     const base::TimeDelta& start,
     43     const base::TimeDelta& duration,
     44     const std::string& id,
     45     const std::string& content,
     46     const std::string& settings) {
     47   DCHECK(!read_cb_.is_null());
     48 
     49   const uint8* const data_buf = reinterpret_cast<const uint8*>(content.data());
     50   const int data_len = static_cast<int>(content.size());
     51 
     52   std::vector<uint8> side_data;
     53   MakeSideData(id.begin(), id.end(),
     54                 settings.begin(), settings.end(),
     55                 &side_data);
     56 
     57   const uint8* const sd_buf = &side_data[0];
     58   const int sd_len = static_cast<int>(side_data.size());
     59 
     60   scoped_refptr<DecoderBuffer> buffer;
     61   buffer = DecoderBuffer::CopyFrom(data_buf, data_len, sd_buf, sd_len);
     62 
     63   buffer->set_timestamp(start);
     64   buffer->set_duration(duration);
     65 
     66   base::ResetAndReturn(&read_cb_).Run(kOk, buffer);
     67 }
     68 
     69 void FakeTextTrackStream::AbortPendingRead() {
     70   DCHECK(!read_cb_.is_null());
     71   base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
     72 }
     73 
     74 void FakeTextTrackStream::SendEosNotification() {
     75   DCHECK(!read_cb_.is_null());
     76   base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
     77 }
     78 
     79 void FakeTextTrackStream::Stop() {
     80   stopping_ = true;
     81   if (!read_cb_.is_null())
     82     AbortPendingRead();
     83 }
     84 
     85 }  // namespace media
     86