• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
FakeTextTrackStream()14 FakeTextTrackStream::FakeTextTrackStream()
15     : task_runner_(base::MessageLoopProxy::current()),
16       stopping_(false) {
17 }
18 
~FakeTextTrackStream()19 FakeTextTrackStream::~FakeTextTrackStream() {
20   DCHECK(read_cb_.is_null());
21 }
22 
Read(const ReadCB & read_cb)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 
type()35 DemuxerStream::Type FakeTextTrackStream::type() {
36   return DemuxerStream::TEXT;
37 }
38 
SupportsConfigChanges()39 bool FakeTextTrackStream::SupportsConfigChanges() { return false; }
40 
SatisfyPendingRead(const base::TimeDelta & start,const base::TimeDelta & duration,const std::string & id,const std::string & content,const std::string & settings)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 
AbortPendingRead()69 void FakeTextTrackStream::AbortPendingRead() {
70   DCHECK(!read_cb_.is_null());
71   base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
72 }
73 
SendEosNotification()74 void FakeTextTrackStream::SendEosNotification() {
75   DCHECK(!read_cb_.is_null());
76   base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
77 }
78 
Stop()79 void FakeTextTrackStream::Stop() {
80   stopping_ = true;
81   if (!read_cb_.is_null())
82     AbortPendingRead();
83 }
84 
85 }  // namespace media
86