| // 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 "content/browser/media/android/browser_demuxer_android.h" |
| |
| #include "content/common/media/media_player_messages_android.h" |
| |
| namespace content { |
| |
| BrowserDemuxerAndroid::BrowserDemuxerAndroid() {} |
| |
| BrowserDemuxerAndroid::~BrowserDemuxerAndroid() {} |
| |
| void BrowserDemuxerAndroid::OverrideThreadForMessage( |
| const IPC::Message& message, |
| BrowserThread::ID* thread) { |
| switch (message.type()) { |
| case MediaPlayerHostMsg_DemuxerReady::ID: |
| case MediaPlayerHostMsg_ReadFromDemuxerAck::ID: |
| case MediaPlayerHostMsg_DurationChanged::ID: |
| case MediaPlayerHostMsg_DemuxerSeekDone::ID: |
| *thread = BrowserThread::UI; |
| return; |
| } |
| } |
| |
| bool BrowserDemuxerAndroid::OnMessageReceived(const IPC::Message& message, |
| bool* message_was_ok) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP_EX(BrowserDemuxerAndroid, message, *message_was_ok) |
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DemuxerReady, OnDemuxerReady) |
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ReadFromDemuxerAck, |
| OnReadFromDemuxerAck) |
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DurationChanged, |
| OnDurationChanged) |
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DemuxerSeekDone, |
| OnDemuxerSeekDone) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| } |
| |
| void BrowserDemuxerAndroid::AddDemuxerClient( |
| int demuxer_client_id, |
| media::DemuxerAndroidClient* client) { |
| DVLOG(1) << __FUNCTION__ << " peer_pid=" << peer_pid() |
| << " demuxer_client_id=" << demuxer_client_id; |
| demuxer_clients_.AddWithID(client, demuxer_client_id); |
| } |
| |
| void BrowserDemuxerAndroid::RemoveDemuxerClient(int demuxer_client_id) { |
| DVLOG(1) << __FUNCTION__ << " peer_pid=" << peer_pid() |
| << " demuxer_client_id=" << demuxer_client_id; |
| demuxer_clients_.Remove(demuxer_client_id); |
| } |
| |
| void BrowserDemuxerAndroid::RequestDemuxerData( |
| int demuxer_client_id, media::DemuxerStream::Type type) { |
| DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id; |
| Send(new MediaPlayerMsg_ReadFromDemuxer(demuxer_client_id, type)); |
| } |
| |
| void BrowserDemuxerAndroid::RequestDemuxerSeek( |
| int demuxer_client_id, const base::TimeDelta& time_to_seek) { |
| DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id; |
| Send(new MediaPlayerMsg_DemuxerSeekRequest(demuxer_client_id, time_to_seek)); |
| } |
| |
| void BrowserDemuxerAndroid::RequestDemuxerConfigs(int demuxer_client_id) { |
| DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id; |
| Send(new MediaPlayerMsg_MediaConfigRequest(demuxer_client_id)); |
| } |
| |
| void BrowserDemuxerAndroid::OnDemuxerReady( |
| int demuxer_client_id, |
| const media::DemuxerConfigs& configs) { |
| media::DemuxerAndroidClient* client = |
| demuxer_clients_.Lookup(demuxer_client_id); |
| if (client) |
| client->OnDemuxerConfigsAvailable(configs); |
| } |
| |
| void BrowserDemuxerAndroid::OnReadFromDemuxerAck( |
| int demuxer_client_id, |
| const media::DemuxerData& data) { |
| media::DemuxerAndroidClient* client = |
| demuxer_clients_.Lookup(demuxer_client_id); |
| if (client) |
| client->OnDemuxerDataAvailable(data); |
| } |
| |
| void BrowserDemuxerAndroid::OnDemuxerSeekDone(int demuxer_client_id) { |
| media::DemuxerAndroidClient* client = |
| demuxer_clients_.Lookup(demuxer_client_id); |
| if (client) |
| client->OnDemuxerSeekDone(); |
| } |
| |
| void BrowserDemuxerAndroid::OnDurationChanged(int demuxer_client_id, |
| const base::TimeDelta& duration) { |
| media::DemuxerAndroidClient* client = |
| demuxer_clients_.Lookup(demuxer_client_id); |
| if (client) |
| client->OnDemuxerDurationChanged(duration); |
| } |
| |
| } // namespace content |