blob: ccd24fb22a82e8e7cbc5b7f18f38c23dd829efb6 [file] [log] [blame]
// 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