| Index: content/renderer/media/android/stream_texture_factory.cc
|
| diff --git a/content/renderer/media/android/stream_texture_factory.cc b/content/renderer/media/android/stream_texture_factory.cc
|
| index c8c015a3b521d6729891aa22dd78fd86f9728221..dc785addf5e33f7bdb79fbeec0806c4c946e4b9b 100644
|
| --- a/content/renderer/media/android/stream_texture_factory.cc
|
| +++ b/content/renderer/media/android/stream_texture_factory.cc
|
| @@ -35,7 +35,6 @@ void StreamTextureProxy::Release() {
|
| }
|
|
|
| void StreamTextureProxy::BindToTaskRunner(
|
| - int32_t stream_id,
|
| const base::Closure& received_frame_cb,
|
| scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
|
| DCHECK(task_runner.get());
|
| @@ -48,18 +47,17 @@ void StreamTextureProxy::BindToTaskRunner(
|
| }
|
|
|
| if (task_runner->BelongsToCurrentThread()) {
|
| - BindOnThread(stream_id);
|
| + BindOnThread();
|
| return;
|
| }
|
| // Unretained is safe here only because the object is deleted on |loop_|
|
| // thread.
|
| - task_runner->PostTask(FROM_HERE,
|
| - base::Bind(&StreamTextureProxy::BindOnThread,
|
| - base::Unretained(this), stream_id));
|
| + task_runner->PostTask(FROM_HERE, base::Bind(&StreamTextureProxy::BindOnThread,
|
| + base::Unretained(this)));
|
| }
|
|
|
| -void StreamTextureProxy::BindOnThread(int32_t stream_id) {
|
| - host_->BindToCurrentThread(stream_id, this);
|
| +void StreamTextureProxy::BindOnThread() {
|
| + host_->BindToCurrentThread(this);
|
| }
|
|
|
| void StreamTextureProxy::OnFrameAvailable() {
|
| @@ -68,6 +66,19 @@ void StreamTextureProxy::OnFrameAvailable() {
|
| received_frame_cb_.Run();
|
| }
|
|
|
| +void StreamTextureProxy::EstablishPeer(int player_id, int frame_id) {
|
| + host_->EstablishPeer(player_id, frame_id);
|
| +}
|
| +
|
| +void StreamTextureProxy::SetStreamTextureSize(const gfx::Size& size) {
|
| + host_->SetStreamTextureSize(size);
|
| +}
|
| +
|
| +void StreamTextureProxy::ForwardStreamTextureForSurfaceRequest(
|
| + const base::UnguessableToken& request_token) {
|
| + host_->ForwardStreamTextureForSurfaceRequest(request_token);
|
| +}
|
| +
|
| // static
|
| scoped_refptr<StreamTextureFactory> StreamTextureFactory::Create(
|
| scoped_refptr<ContextProviderCommandBuffer> context_provider) {
|
| @@ -83,44 +94,40 @@ StreamTextureFactory::StreamTextureFactory(
|
|
|
| StreamTextureFactory::~StreamTextureFactory() {}
|
|
|
| -StreamTextureProxy* StreamTextureFactory::CreateProxy() {
|
| - StreamTextureHost* host = new StreamTextureHost(channel_);
|
| +StreamTextureProxy* StreamTextureFactory::CreateProxy(
|
| + unsigned texture_target,
|
| + unsigned* texture_id,
|
| + gpu::Mailbox* texture_mailbox) {
|
| + int32_t route_id =
|
| + CreateStreamTexture(texture_target, texture_id, texture_mailbox);
|
| + if (!route_id)
|
| + return nullptr;
|
| + StreamTextureHost* host = new StreamTextureHost(channel_, route_id);
|
| return new StreamTextureProxy(host);
|
| }
|
|
|
| -void StreamTextureFactory::EstablishPeer(int32_t stream_id,
|
| - int player_id,
|
| - int frame_id) {
|
| - channel_->Send(
|
| - new GpuStreamTextureMsg_EstablishPeer(stream_id, frame_id, player_id));
|
| -}
|
| -
|
| -void StreamTextureFactory::ForwardStreamTextureForSurfaceRequest(
|
| - int32_t stream_id,
|
| - const base::UnguessableToken& request_token) {
|
| - channel_->Send(new GpuStreamTextureMsg_ForwardForSurfaceRequest(
|
| - stream_id, request_token));
|
| -}
|
| -
|
| unsigned StreamTextureFactory::CreateStreamTexture(
|
| unsigned texture_target,
|
| unsigned* texture_id,
|
| gpu::Mailbox* texture_mailbox) {
|
| - GLuint stream_id = 0;
|
| + GLuint route_id = 0;
|
| gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL();
|
| gl->GenTextures(1, texture_id);
|
| gl->ShallowFlushCHROMIUM();
|
| - stream_id = context_provider_->GetCommandBufferProxy()->CreateStreamTexture(
|
| + route_id = context_provider_->GetCommandBufferProxy()->CreateStreamTexture(
|
| *texture_id);
|
| - gl->GenMailboxCHROMIUM(texture_mailbox->name);
|
| - gl->ProduceTextureDirectCHROMIUM(
|
| - *texture_id, texture_target, texture_mailbox->name);
|
| - return stream_id;
|
| -}
|
| -
|
| -void StreamTextureFactory::SetStreamTextureSize(int32_t stream_id,
|
| - const gfx::Size& size) {
|
| - channel_->Send(new GpuStreamTextureMsg_SetSize(stream_id, size));
|
| + if (!route_id) {
|
| + gl->DeleteTextures(1, texture_id);
|
| + // Flush to ensure that the stream texture gets deleted in a timely fashion.
|
| + gl->ShallowFlushCHROMIUM();
|
| + *texture_id = 0;
|
| + *texture_mailbox = gpu::Mailbox();
|
| + } else {
|
| + gl->GenMailboxCHROMIUM(texture_mailbox->name);
|
| + gl->ProduceTextureDirectCHROMIUM(*texture_id, texture_target,
|
| + texture_mailbox->name);
|
| + }
|
| + return route_id;
|
| }
|
|
|
| gpu::gles2::GLES2Interface* StreamTextureFactory::ContextGL() {
|
|
|