Index: content/common/gpu/media/gpu_video_service.cc |
diff --git a/content/common/gpu/media/gpu_video_service.cc b/content/common/gpu/media/gpu_video_service.cc |
index ebad95bfaa705fd19f266f6a1e629640336c3fca..2a9562ec33e82bd4b743f4ca077f5c5643fbe4f8 100644 |
--- a/content/common/gpu/media/gpu_video_service.cc |
+++ b/content/common/gpu/media/gpu_video_service.cc |
@@ -7,7 +7,6 @@ |
#include "content/common/gpu/gpu_channel.h" |
#include "content/common/gpu/gpu_messages.h" |
#include "content/common/gpu/media/gpu_video_decode_accelerator.h" |
-#include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
#include "content/common/gpu/media/omx_video_decode_accelerator.h" |
@@ -59,22 +58,14 @@ bool GpuVideoService::CreateVideoDecoder( |
MessageRouter* router, |
int32 decoder_host_id, |
int32 decoder_id, |
- gpu::gles2::GLES2Decoder* command_decoder, |
+ GpuCommandBufferStub* stub, |
const std::vector<uint32>& configs) { |
// Create GpuVideoDecodeAccelerator and add to map. |
scoped_refptr<GpuVideoDecodeAccelerator> decoder = |
- new GpuVideoDecodeAccelerator(channel, decoder_host_id); |
- |
-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
- OmxVideoDecodeAccelerator* omx_decoder = |
- new OmxVideoDecodeAccelerator(decoder, MessageLoop::current()); |
- omx_decoder->SetEglState(gfx::GLSurfaceEGL::GetDisplay(), |
- command_decoder->GetGLContext()->GetHandle()); |
- decoder->set_video_decode_accelerator(omx_decoder); |
-#endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
+ new GpuVideoDecodeAccelerator(channel, decoder_host_id, decoder_id, stub); |
bool result = decoder_map_.insert(std::make_pair( |
- decoder_id, VideoDecoderInfo(decoder, command_decoder))).second; |
+ decoder_id, VideoDecoderInfo(decoder, stub))).second; |
// Decoder ID is a unique ID determined by GpuVideoServiceHost. |
// We should always be adding entries here. |
@@ -90,6 +81,24 @@ bool GpuVideoService::CreateVideoDecoder( |
return true; |
} |
+void GpuVideoService::InitializeVideoDecoder(int32 decoder_id) { |
+#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
+ DecoderMap::iterator it = decoder_map_.find(decoder_id); |
+ DCHECK(it != decoder_map_.end()); |
+ GpuVideoDecodeAccelerator* decoder = it->second.video_decoder.get(); |
+ GpuCommandBufferStub* stub = it->second.stub; |
+ DCHECK(stub->scheduler()); |
+ OmxVideoDecodeAccelerator* omx_decoder = |
+ new OmxVideoDecodeAccelerator(decoder, MessageLoop::current()); |
+ omx_decoder->SetEglState( |
+ gfx::GLSurfaceEGL::GetDisplay(), |
+ stub->scheduler()->decoder()->GetGLContext()->GetHandle()); |
+ decoder->set_video_decode_accelerator(omx_decoder); |
+#else |
+ NOTIMPLEMENTED() << "HW video decode acceleration not available."; |
+#endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
+} |
+ |
void GpuVideoService::DestroyVideoDecoder( |
MessageRouter* router, |
int32 decoder_id) { |
@@ -106,7 +115,9 @@ void GpuVideoService::AssignTexturesToDecoder( |
DCHECK(it != decoder_map_.end()); |
DCHECK_EQ(it->first, decoder_id); |
GpuVideoDecodeAccelerator* video_decoder = it->second.video_decoder; |
- gpu::gles2::GLES2Decoder* command_decoder = it->second.command_decoder; |
+ DCHECK(it->second.stub->scheduler()); // Ensure already Initialize()'d. |
+ gpu::gles2::GLES2Decoder* command_decoder = |
+ it->second.stub->scheduler()->decoder(); |
std::vector<media::GLESBuffer> buffers; |
for (uint32 i = 0; i < buffer_ids.size(); ++i) { |