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

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

Issue 8510039: Initial implementation of the DXVA 2.0 H.264 hardware decoder for pepper for Windows. The decodin... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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_decode_accelerator.h" 5 #include "content/common/gpu/media/gpu_video_decode_accelerator.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "gpu/command_buffer/common/command_buffer.h" 12 #include "gpu/command_buffer/common/command_buffer.h"
13 #include "ipc/ipc_message_macros.h" 13 #include "ipc/ipc_message_macros.h"
14 #include "ipc/ipc_message_utils.h" 14 #include "ipc/ipc_message_utils.h"
15 #include "content/common/gpu/gpu_channel.h" 15 #include "content/common/gpu/gpu_channel.h"
16 #include "content/common/gpu/gpu_command_buffer_stub.h" 16 #include "content/common/gpu/gpu_command_buffer_stub.h"
17 #include "content/common/gpu/gpu_messages.h" 17 #include "content/common/gpu/gpu_messages.h"
18 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) 18 #if (defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL)) || defined(OS_WIN)
19 #if defined(OS_WIN)
20 #include "content/common/gpu/media/dxva_video_decode_accelerator.h"
21 #else // OS_WIN
19 #include "content/common/gpu/media/omx_video_decode_accelerator.h" 22 #include "content/common/gpu/media/omx_video_decode_accelerator.h"
23 #endif
20 #include "ui/gfx/gl/gl_context.h" 24 #include "ui/gfx/gl/gl_context.h"
21 #include "ui/gfx/gl/gl_surface_egl.h" 25 #include "ui/gfx/gl/gl_surface_egl.h"
22 #endif 26 #endif
23 #include "ui/gfx/size.h" 27 #include "ui/gfx/size.h"
24 28
25 GpuVideoDecodeAccelerator::GpuVideoDecodeAccelerator( 29 GpuVideoDecodeAccelerator::GpuVideoDecodeAccelerator(
26 IPC::Message::Sender* sender, 30 IPC::Message::Sender* sender,
27 int32 host_route_id, 31 int32 host_route_id,
28 GpuCommandBufferStub* stub) 32 GpuCommandBufferStub* stub)
29 : sender_(sender), 33 : sender_(sender),
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 << "failed"; 106 << "failed";
103 } 107 }
104 } 108 }
105 109
106 void GpuVideoDecodeAccelerator::Initialize( 110 void GpuVideoDecodeAccelerator::Initialize(
107 const media::VideoDecodeAccelerator::Profile profile, 111 const media::VideoDecodeAccelerator::Profile profile,
108 IPC::Message* init_done_msg) { 112 IPC::Message* init_done_msg) {
109 DCHECK(!video_decode_accelerator_.get()); 113 DCHECK(!video_decode_accelerator_.get());
110 DCHECK(!init_done_msg_); 114 DCHECK(!init_done_msg_);
111 DCHECK(init_done_msg); 115 DCHECK(init_done_msg);
112 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) 116 #if (defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL)) || defined(OS_WIN)
113 DCHECK(stub_ && stub_->decoder()); 117 DCHECK(stub_ && stub_->decoder());
114 init_done_msg_ = init_done_msg; 118 init_done_msg_ = init_done_msg;
115 OmxVideoDecodeAccelerator* omx_decoder = new OmxVideoDecodeAccelerator(this); 119 #if defined(OS_WIN)
116 omx_decoder->SetEglState( 120 DLOG(INFO) << "Initializing DXVA HW decoder for windows.";
121 DXVAVideoDecodeAccelerator* video_decoder =
122 new DXVAVideoDecodeAccelerator(this);
123 #else // OS_WIN
124 OmxVideoDecodeAccelerator* video_decoder =
125 new OmxVideoDecodeAccelerator(this);
126 #endif // OS_WIN
127 video_decoder->SetEglState(
117 gfx::GLSurfaceEGL::GetHardwareDisplay(), 128 gfx::GLSurfaceEGL::GetHardwareDisplay(),
118 stub_->decoder()->GetGLContext()->GetHandle()); 129 stub_->decoder()->GetGLContext()->GetHandle());
119 video_decode_accelerator_ = omx_decoder; 130 video_decode_accelerator_ = video_decoder;
120 video_decode_accelerator_->Initialize(profile); 131 video_decode_accelerator_->Initialize(profile);
121 #else 132 #else
122 NOTIMPLEMENTED() << "HW video decode acceleration not available."; 133 NOTIMPLEMENTED() << "HW video decode acceleration not available.";
123 NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); 134 NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE);
124 #endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) 135 #endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL)
125 } 136 }
126 137
127 void GpuVideoDecodeAccelerator::OnDecode( 138 void GpuVideoDecodeAccelerator::OnDecode(
128 base::SharedMemoryHandle handle, int32 id, int32 size) { 139 base::SharedMemoryHandle handle, int32 id, int32 size,
140 int32 source_process_id) {
129 DCHECK(video_decode_accelerator_.get()); 141 DCHECK(video_decode_accelerator_.get());
130 video_decode_accelerator_->Decode(media::BitstreamBuffer(id, handle, size)); 142 video_decode_accelerator_->Decode(media::BitstreamBuffer(id, handle, size,
143 source_process_id));
131 } 144 }
132 145
133 void GpuVideoDecodeAccelerator::OnAssignPictureBuffers( 146 void GpuVideoDecodeAccelerator::OnAssignPictureBuffers(
134 const std::vector<int32>& buffer_ids, 147 const std::vector<int32>& buffer_ids,
135 const std::vector<uint32>& texture_ids, 148 const std::vector<uint32>& texture_ids,
136 const std::vector<gfx::Size>& sizes) { 149 const std::vector<gfx::Size>& sizes) {
137 DCHECK(stub_ && stub_->decoder()); // Ensure already Initialize()'d. 150 DCHECK(stub_ && stub_->decoder()); // Ensure already Initialize()'d.
138 gpu::gles2::GLES2Decoder* command_decoder = stub_->decoder(); 151 gpu::gles2::GLES2Decoder* command_decoder = stub_->decoder();
139 152
140 std::vector<media::PictureBuffer> buffers; 153 std::vector<media::PictureBuffer> buffers;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 209
197 void GpuVideoDecodeAccelerator::NotifyResetDone() { 210 void GpuVideoDecodeAccelerator::NotifyResetDone() {
198 if (!Send(new AcceleratedVideoDecoderHostMsg_ResetDone(host_route_id_))) 211 if (!Send(new AcceleratedVideoDecoderHostMsg_ResetDone(host_route_id_)))
199 DLOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ResetDone) failed"; 212 DLOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ResetDone) failed";
200 } 213 }
201 214
202 bool GpuVideoDecodeAccelerator::Send(IPC::Message* message) { 215 bool GpuVideoDecodeAccelerator::Send(IPC::Message* message) {
203 DCHECK(sender_); 216 DCHECK(sender_);
204 return sender_->Send(message); 217 return sender_->Send(message);
205 } 218 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698