Index: chrome/renderer/media/gles2_video_decode_context.cc |
=================================================================== |
--- chrome/renderer/media/gles2_video_decode_context.cc (revision 78386) |
+++ chrome/renderer/media/gles2_video_decode_context.cc (working copy) |
@@ -1,122 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <GLES2/gl2.h> |
- |
-#include "base/message_loop.h" |
-#include "chrome/renderer/ggl/ggl.h" |
-#include "chrome/renderer/media/gles2_video_decode_context.h" |
- |
-Gles2VideoDecodeContext::Gles2VideoDecodeContext( |
- MessageLoop* message_loop, bool memory_mapped, ggl::Context* context) |
- : message_loop_(message_loop), |
- memory_mapped_(memory_mapped), |
- context_(context) { |
-} |
- |
-Gles2VideoDecodeContext::~Gles2VideoDecodeContext() { |
-} |
- |
-void* Gles2VideoDecodeContext::GetDevice() { |
- // This decode context is used inside the renderer and so hardware decoder |
- // device handler should not be used. |
- return NULL; |
-} |
- |
-void Gles2VideoDecodeContext::AllocateVideoFrames( |
- int num_frames, size_t width, size_t height, |
- media::VideoFrame::Format format, |
- std::vector<scoped_refptr<media::VideoFrame> >* frames_out, Task* task) { |
- if (MessageLoop::current() != message_loop_) { |
- message_loop_->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(this, &Gles2VideoDecodeContext::AllocateVideoFrames, |
- num_frames, width, height, format, frames_out, |
- task)); |
- return; |
- } |
- |
- // In this method we need to make the ggl context current and then generate |
- // textures for each video frame. We also need to allocate memory for each |
- // texture generated. |
- bool ret = ggl::MakeCurrent(context_); |
- CHECK(ret) << "Failed to switch context"; |
- |
- frames_.resize(num_frames); |
- for (int i = 0; i < num_frames; ++i) { |
- int planes = media::VideoFrame::GetNumberOfPlanes(format); |
- media::VideoFrame::GlTexture textures[media::VideoFrame::kMaxPlanes]; |
- |
- // Set the color format of the textures. |
- DCHECK(format == media::VideoFrame::RGBA || |
- format == media::VideoFrame::YV12); |
- int gl_format = format == media::VideoFrame::RGBA ? GL_RGBA : GL_LUMINANCE; |
- |
- glGenTextures(planes, textures); |
- for (int j = 0; j < planes; ++j) { |
- glBindTexture(GL_TEXTURE_2D, textures[j]); |
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
- glTexImage2D(GL_TEXTURE_2D, 0, gl_format, width, height, 0, gl_format, |
- GL_UNSIGNED_BYTE, NULL); |
- } |
- glFlush(); |
- |
- scoped_refptr<media::VideoFrame> frame; |
- media::VideoFrame::CreateFrameGlTexture(format, width, height, textures, |
- &frame); |
- frames_[i] = frame; |
- } |
- *frames_out = frames_; |
- |
- task->Run(); |
- delete task; |
-} |
- |
-void Gles2VideoDecodeContext::ReleaseAllVideoFrames() { |
- if (MessageLoop::current() != message_loop_) { |
- message_loop_->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(this, |
- &Gles2VideoDecodeContext::ReleaseAllVideoFrames)); |
- return; |
- } |
- |
- // Make the context current and then release the video frames. |
- bool ret = ggl::MakeCurrent(context_); |
- CHECK(ret) << "Failed to switch context"; |
- |
- for (size_t i = 0; i < frames_.size(); ++i) { |
- for (size_t j = 0; j < frames_[i]->planes(); ++j) { |
- media::VideoFrame::GlTexture texture = frames_[i]->gl_texture(j); |
- glDeleteTextures(1, &texture); |
- } |
- } |
- frames_.clear(); |
-} |
- |
-void Gles2VideoDecodeContext::ConvertToVideoFrame( |
- void* buffer, scoped_refptr<media::VideoFrame> frame, Task* task) { |
- DCHECK(memory_mapped_); |
- // TODO(hclam): Implement. |
-} |
- |
-void Gles2VideoDecodeContext::Destroy(Task* task) { |
- if (MessageLoop::current() != message_loop_) { |
- message_loop_->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(this, &Gles2VideoDecodeContext::Destroy, task)); |
- return; |
- } |
- |
- ReleaseAllVideoFrames(); |
- DCHECK_EQ(0u, frames_.size()); |
- |
- task->Run(); |
- delete task; |
-} |
- |
-DISABLE_RUNNABLE_METHOD_REFCOUNT(Gles2VideoDecodeContext); |