OLD | NEW |
| (Empty) |
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 "content/renderer/media/android/renderer_demuxer_android.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "base/single_thread_task_runner.h" | |
9 #include "content/child/thread_safe_sender.h" | |
10 #include "content/common/media/media_player_messages_android.h" | |
11 #include "content/renderer/media/android/media_source_delegate.h" | |
12 #include "content/renderer/render_thread_impl.h" | |
13 | |
14 namespace content { | |
15 | |
16 RendererDemuxerAndroid::RendererDemuxerAndroid() | |
17 : thread_safe_sender_(RenderThreadImpl::current()->thread_safe_sender()), | |
18 media_task_runner_( | |
19 RenderThreadImpl::current()->GetMediaThreadTaskRunner()) {} | |
20 | |
21 RendererDemuxerAndroid::~RendererDemuxerAndroid() {} | |
22 | |
23 int RendererDemuxerAndroid::GetNextDemuxerClientID() { | |
24 // Don't use zero for IDs since it can be interpreted as having no ID. | |
25 return next_demuxer_client_id_.GetNext() + 1; | |
26 } | |
27 | |
28 void RendererDemuxerAndroid::AddDelegate(int demuxer_client_id, | |
29 MediaSourceDelegate* delegate) { | |
30 DCHECK(media_task_runner_->BelongsToCurrentThread()); | |
31 delegates_.AddWithID(delegate, demuxer_client_id); | |
32 } | |
33 | |
34 void RendererDemuxerAndroid::RemoveDelegate(int demuxer_client_id) { | |
35 DCHECK(media_task_runner_->BelongsToCurrentThread()); | |
36 delegates_.Remove(demuxer_client_id); | |
37 } | |
38 | |
39 bool RendererDemuxerAndroid::OnMessageReceived(const IPC::Message& message) { | |
40 switch (message.type()) { | |
41 case MediaPlayerMsg_DemuxerSeekRequest::ID: | |
42 case MediaPlayerMsg_ReadFromDemuxer::ID: | |
43 media_task_runner_->PostTask(FROM_HERE, base::Bind( | |
44 &RendererDemuxerAndroid::DispatchMessage, this, message)); | |
45 return true; | |
46 } | |
47 return false; | |
48 } | |
49 | |
50 void RendererDemuxerAndroid::DemuxerReady( | |
51 int demuxer_client_id, | |
52 const media::DemuxerConfigs& configs) { | |
53 thread_safe_sender_->Send(new MediaPlayerHostMsg_DemuxerReady( | |
54 demuxer_client_id, configs)); | |
55 } | |
56 | |
57 void RendererDemuxerAndroid::ReadFromDemuxerAck( | |
58 int demuxer_client_id, | |
59 const media::DemuxerData& data) { | |
60 thread_safe_sender_->Send(new MediaPlayerHostMsg_ReadFromDemuxerAck( | |
61 demuxer_client_id, data)); | |
62 } | |
63 | |
64 void RendererDemuxerAndroid::DemuxerSeekDone( | |
65 int demuxer_client_id, | |
66 const base::TimeDelta& actual_browser_seek_time) { | |
67 thread_safe_sender_->Send(new MediaPlayerHostMsg_DemuxerSeekDone( | |
68 demuxer_client_id, actual_browser_seek_time)); | |
69 } | |
70 | |
71 void RendererDemuxerAndroid::DurationChanged(int demuxer_client_id, | |
72 const base::TimeDelta& duration) { | |
73 thread_safe_sender_->Send(new MediaPlayerHostMsg_DurationChanged( | |
74 demuxer_client_id, duration)); | |
75 } | |
76 | |
77 void RendererDemuxerAndroid::DispatchMessage(const IPC::Message& message) { | |
78 IPC_BEGIN_MESSAGE_MAP(RendererDemuxerAndroid, message) | |
79 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DemuxerSeekRequest, OnDemuxerSeekRequest) | |
80 IPC_MESSAGE_HANDLER(MediaPlayerMsg_ReadFromDemuxer, OnReadFromDemuxer) | |
81 IPC_END_MESSAGE_MAP() | |
82 } | |
83 | |
84 void RendererDemuxerAndroid::OnReadFromDemuxer( | |
85 int demuxer_client_id, | |
86 media::DemuxerStream::Type type) { | |
87 MediaSourceDelegate* delegate = delegates_.Lookup(demuxer_client_id); | |
88 if (delegate) | |
89 delegate->OnReadFromDemuxer(type); | |
90 } | |
91 | |
92 void RendererDemuxerAndroid::OnDemuxerSeekRequest( | |
93 int demuxer_client_id, | |
94 const base::TimeDelta& time_to_seek, | |
95 bool is_browser_seek) { | |
96 MediaSourceDelegate* delegate = delegates_.Lookup(demuxer_client_id); | |
97 if (delegate) | |
98 delegate->Seek(time_to_seek, is_browser_seek); | |
99 } | |
100 | |
101 } // namespace content | |
OLD | NEW |