| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/common/gpu/media/gpu_video_service.h" | 5 #include "content/common/gpu/media/gpu_video_service.h" |
| 6 | 6 |
| 7 #include "content/common/gpu/gpu_channel.h" | 7 #include "content/common/gpu/gpu_channel.h" |
| 8 #include "content/common/gpu/gpu_messages.h" | 8 #include "content/common/gpu/gpu_messages.h" |
| 9 #include "content/common/gpu/media/gpu_video_decode_accelerator.h" | 9 #include "content/common/gpu/media/gpu_video_decode_accelerator.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 // Create GpuVideoDecodeAccelerator and add to map. | 64 // Create GpuVideoDecodeAccelerator and add to map. |
| 65 scoped_refptr<GpuVideoDecodeAccelerator> decoder = | 65 scoped_refptr<GpuVideoDecodeAccelerator> decoder = |
| 66 new GpuVideoDecodeAccelerator(channel, decoder_host_id); | 66 new GpuVideoDecodeAccelerator(channel, decoder_host_id); |
| 67 | 67 |
| 68 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) | 68 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
| 69 OmxVideoDecodeAccelerator* omx_decoder = | 69 OmxVideoDecodeAccelerator* omx_decoder = |
| 70 new OmxVideoDecodeAccelerator(decoder, MessageLoop::current()); | 70 new OmxVideoDecodeAccelerator(decoder, MessageLoop::current()); |
| 71 omx_decoder->SetEglState(gfx::GLSurfaceEGL::GetDisplay(), | 71 omx_decoder->SetEglState(gfx::GLSurfaceEGL::GetDisplay(), |
| 72 command_decoder->GetGLContext()->GetHandle()); | 72 command_decoder->GetGLContext()->GetHandle()); |
| 73 decoder->set_video_decode_accelerator(omx_decoder); | 73 decoder->set_video_decode_accelerator(omx_decoder); |
| 74 | |
| 75 #endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) | 74 #endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
| 76 | 75 |
| 77 bool result = decoder_map_.insert(std::make_pair( | 76 bool result = decoder_map_.insert(std::make_pair( |
| 78 decoder_id, VideoDecoderInfo(decoder, command_decoder))).second; | 77 decoder_id, VideoDecoderInfo(decoder, command_decoder))).second; |
| 79 | 78 |
| 80 // Decoder ID is a unique ID determined by GpuVideoServiceHost. | 79 // Decoder ID is a unique ID determined by GpuVideoServiceHost. |
| 81 // We should always be adding entries here. | 80 // We should always be adding entries here. |
| 82 DCHECK(result); | 81 DCHECK(result); |
| 83 | 82 |
| 84 router->AddRoute(decoder_id, decoder); | 83 router->AddRoute(decoder_id, decoder); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 96 int32 decoder_id) { | 95 int32 decoder_id) { |
| 97 router->RemoveRoute(decoder_id); | 96 router->RemoveRoute(decoder_id); |
| 98 decoder_map_.erase(decoder_id); | 97 decoder_map_.erase(decoder_id); |
| 99 } | 98 } |
| 100 | 99 |
| 101 void GpuVideoService::AssignTexturesToDecoder( | 100 void GpuVideoService::AssignTexturesToDecoder( |
| 102 int32 decoder_id, | 101 int32 decoder_id, |
| 103 const std::vector<int32>& buffer_ids, | 102 const std::vector<int32>& buffer_ids, |
| 104 const std::vector<uint32>& texture_ids, | 103 const std::vector<uint32>& texture_ids, |
| 105 const std::vector<gfx::Size>& sizes) { | 104 const std::vector<gfx::Size>& sizes) { |
| 105 DecoderMap::iterator it = decoder_map_.find(decoder_id); |
| 106 DCHECK(it != decoder_map_.end()); |
| 107 DCHECK_EQ(it->first, decoder_id); |
| 108 GpuVideoDecodeAccelerator* video_decoder = it->second.video_decoder; |
| 109 gpu::gles2::GLES2Decoder* command_decoder = it->second.command_decoder; |
| 110 |
| 106 std::vector<media::GLESBuffer> buffers; | 111 std::vector<media::GLESBuffer> buffers; |
| 107 for (uint32 i = 0; i < buffer_ids.size(); ++i) { | 112 for (uint32 i = 0; i < buffer_ids.size(); ++i) { |
| 108 uint32 service_texture_id; | 113 uint32 service_texture_id; |
| 109 bool result = TranslateTextureForDecoder( | 114 if (!command_decoder->GetServiceTextureId( |
| 110 decoder_id, texture_ids[i], &service_texture_id); | 115 texture_ids[i], &service_texture_id)) { |
| 111 // TODO(vrk): Send an error for invalid GLES buffers. | 116 // TODO(vrk): Send an error for invalid GLES buffers. |
| 112 if (!result) | 117 LOG(DFATAL) << "Failed to translate texture!"; |
| 113 return; | 118 return; |
| 114 buffers.push_back( | 119 } |
| 115 media::GLESBuffer(buffer_ids[i], sizes[i], service_texture_id)); | 120 buffers.push_back(media::GLESBuffer( |
| 121 buffer_ids[i], sizes[i], service_texture_id)); |
| 116 } | 122 } |
| 117 | 123 video_decoder->AssignGLESBuffers(buffers); |
| 118 DecoderMap::iterator it = decoder_map_.find(decoder_id); | |
| 119 DCHECK(it != decoder_map_.end()); | |
| 120 it->second.video_decoder->AssignGLESBuffers(buffers); | |
| 121 } | 124 } |
| 122 | |
| 123 bool GpuVideoService::TranslateTextureForDecoder( | |
| 124 int32 decoder_id, uint32 client_texture_id, uint32* service_texture_id) { | |
| 125 DecoderMap::iterator it = decoder_map_.find(decoder_id); | |
| 126 if (it == decoder_map_.end()) | |
| 127 return false; | |
| 128 it->second.command_decoder->MakeCurrent(); | |
| 129 return it->second.command_decoder->GetServiceTextureId( | |
| 130 client_texture_id, service_texture_id); | |
| 131 } | |
| OLD | NEW |