Index: content/common/gpu/media/avda_codec_image.h |
diff --git a/content/common/gpu/media/avda_codec_image.h b/content/common/gpu/media/avda_codec_image.h |
index 8bbcf13d916af38ce0cfbd8902672e15f696c9f9..33eb15b23c2a0c1914bca05c9d15a3b5256bb200 100644 |
--- a/content/common/gpu/media/avda_codec_image.h |
+++ b/content/common/gpu/media/avda_codec_image.h |
@@ -11,6 +11,10 @@ |
#include "content/common/gpu/media/avda_shared_state.h" |
#include "ui/gl/gl_image.h" |
+namespace ui { |
+class ScopedMakeCurrent; |
+} |
+ |
namespace content { |
// GLImage that renders MediaCodec buffers to a SurfaceTexture or SurfaceView as |
@@ -44,6 +48,7 @@ class AVDACodecImage : public gl::GLImage { |
void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, |
uint64_t process_tracing_id, |
const std::string& dump_name) override; |
+ bool GetCustomMatrix(int matrixId, float xform[16]) override; |
public: |
// Decoded buffer index that has the image for us to display. |
@@ -63,15 +68,31 @@ class AVDACodecImage : public gl::GLImage { |
private: |
enum { kInvalidCodecBufferIndex = -1 }; |
- // Make sure that the surface texture's front buffer is current. |
- void UpdateSurfaceTexture(); |
- |
- // Attach the surface texture to our GL context, with a texture that we |
- // create for it. |
+ // Make sure that the surface texture's front buffer is current. This will |
+ // save / restore the current context. It will optionally restore the texture |
+ // bindings in the surface texture's context, based on |mode|. This is |
+ // intended as a hint if we don't need to change contexts. If we do need to |
+ // change contexts, then we'll always preserve the texture bindings in the |
+ // both contexts. In other words, the caller is telling us whether it's |
+ // okay to change the binding in the current context. |
+ enum RestoreBindingsMode { kDontRestoreBindings, kDoRestoreBindings }; |
+ void UpdateSurfaceTexture(RestoreBindingsMode mode); |
+ |
+ // Attach the surface texture to our GL context to whatever texture is bound |
+ // on the active unit. |
void AttachSurfaceTextureToContext(); |
- // Install the current texture matrix into the shader. |
- void InstallTextureMatrix(); |
+ // Make shared_state_->context() current if it isn't already. |
+ scoped_ptr<ui::ScopedMakeCurrent> MakeCurrentIfNeeded(); |
+ |
+ // Return whether or not the current context is in the same share group as |
+ // |surface_texture_|'s client texture. |
+ // TODO(liberato): is this needed? |
+ bool IsCorrectShareGroup() const; |
+ |
+ // Return whether there is a codec buffer that we haven't rendered yet. Will |
+ // return false also if there's no codec or we otherwise can't update. |
+ bool IsCodecBufferOutstanding() const; |
// Shared state between the AVDA and all AVDACodecImages. |
scoped_refptr<AVDASharedState> shared_state_; |
@@ -99,12 +120,6 @@ class AVDACodecImage : public gl::GLImage { |
// The texture that we're attached to. |
gpu::gles2::Texture* texture_; |
- // Have we cached |texmatrix_uniform_location_| yet? |
- bool need_shader_info_; |
- |
- // Uniform ID of the texture matrix in the shader. |
- GLint texmatrix_uniform_location_; |
- |
// Texture matrix of the front buffer of the surface texture. |
float gl_matrix_[16]; |