Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(649)

Side by Side Diff: content/common/gpu/media/gpu_video_service.cc

Issue 7200033: Fix crashes when loading gles2.cc on browser startup, and during playback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698