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

Unified Diff: content/common/gpu/media/avda_codec_image.cc

Issue 1401423003: Re-land: ui: Move GLImage::BindTexImage fallback from GLImage implementations to GLES2CmdDecoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix stream texture issue Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/media/avda_codec_image.cc
diff --git a/content/common/gpu/media/avda_codec_image.cc b/content/common/gpu/media/avda_codec_image.cc
index 062b39b9ef0bafef5ed8ed79a08dcca1a608e3ea..6009597416e67fd1464647b88e07995876d45457 100644
--- a/content/common/gpu/media/avda_codec_image.cc
+++ b/content/common/gpu/media/avda_codec_image.cc
@@ -5,6 +5,7 @@
#include "content/common/gpu/media/avda_codec_image.h"
#include "content/common/gpu/media/avda_shared_state.h"
+#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/context_state.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/service/texture_manager.h"
@@ -50,18 +51,15 @@ unsigned AVDACodecImage::GetInternalFormat() {
}
bool AVDACodecImage::BindTexImage(unsigned target) {
- return true;
+ return false;
}
void AVDACodecImage::ReleaseTexImage(unsigned target) {}
-bool AVDACodecImage::CopyTexSubImage(unsigned target,
- const gfx::Point& offset,
- const gfx::Rect& rect) {
- return false;
-}
+bool AVDACodecImage::CopyTexImage(unsigned target) {
+ if (target != GL_TEXTURE_EXTERNAL_OES)
+ return false;
-void AVDACodecImage::WillUseTexImage() {
// Have we bound the SurfaceTexture's texture handle to the active
// texture unit yet?
bool bound_texture = false;
@@ -75,29 +73,38 @@ void AVDACodecImage::WillUseTexImage() {
// Make sure that we have the right image in the front buffer.
bound_texture |= UpdateSurfaceTexture();
- // TODO(liberato): Handle the texture matrix properly.
- // Either we can update the shader with it or we can move all of the logic
- // to updateTexImage() to the right place in the cc to send it to the shader.
- // For now, we just skip it. crbug.com/530681
-
// Sneakily bind the ST texture handle in the real GL context.
// If we called UpdateTexImage() to update the ST front buffer, then we can
// skip this. Since one draw/frame is the common case, we optimize for it.
if (!bound_texture)
glBindTexture(GL_TEXTURE_EXTERNAL_OES,
shared_state_->surface_texture_service_id());
+
+ // TODO(liberato): Handle the texture matrix properly.
+ // Either we can update the shader with it or we can move all of the logic
+ // to updateTexImage() to the right place in the cc to send it to the shader.
+ // For now, we just skip it. crbug.com/530681
+
+ gpu::gles2::TextureManager* texture_manager =
+ decoder_->GetContextGroup()->texture_manager();
+ gpu::gles2::Texture* texture =
+ texture_manager->GetTextureForServiceId(
+ shared_state_->surface_texture_service_id());
+ if (texture) {
+ // By setting image state to UNBOUND instead of COPIED we ensure that
+ // CopyTexImage() is called each time the surface texture is used for
+ // drawing.
+ texture->SetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0, this,
+ gpu::gles2::Texture::UNBOUND);
+ }
+
+ return true;
}
-void AVDACodecImage::DidUseTexImage() {
- // Unbind the ST's service_id in the real GL context in favor of whatever
- // the decoder thinks is bound there.
- const gpu::gles2::ContextState* state = decoder_->GetContextState();
- const gpu::gles2::TextureUnit& active_unit =
- state->texture_units[state->active_texture_unit];
- glBindTexture(GL_TEXTURE_EXTERNAL_OES,
- active_unit.bound_texture_external_oes.get()
- ? active_unit.bound_texture_external_oes->service_id()
- : 0);
+bool AVDACodecImage::CopyTexSubImage(unsigned target,
+ const gfx::Point& offset,
+ const gfx::Rect& rect) {
+ return false;
}
bool AVDACodecImage::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
« no previous file with comments | « content/common/gpu/media/avda_codec_image.h ('k') | content/common/gpu/media/gpu_video_decode_accelerator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698