| 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];
|
|
|
|
|