| Index: media/gpu/avda_shared_state.cc
|
| diff --git a/media/gpu/avda_shared_state.cc b/media/gpu/avda_shared_state.cc
|
| index 7e73c041de0c7f6a4d3579b947dfa52a9eeae105..d96fb9dcfbb83429e8b6c1fb73e72d2add626bca 100644
|
| --- a/media/gpu/avda_shared_state.cc
|
| +++ b/media/gpu/avda_shared_state.cc
|
| @@ -7,17 +7,30 @@
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/time/time.h"
|
| #include "media/gpu/avda_codec_image.h"
|
| +#include "ui/gl/android/surface_texture.h"
|
| #include "ui/gl/gl_bindings.h"
|
| #include "ui/gl/scoped_make_current.h"
|
|
|
| namespace media {
|
|
|
| AVDASharedState::AVDASharedState()
|
| - : surface_texture_service_id_(0),
|
| - frame_available_event_(false, false),
|
| - surface_texture_is_attached_(false) {}
|
| + : surface_texture_service_id_(0), frame_available_event_(false, false) {}
|
|
|
| -AVDASharedState::~AVDASharedState() {}
|
| +AVDASharedState::~AVDASharedState() {
|
| + if (!surface_texture_service_id_)
|
| + return;
|
| +
|
| + // XXX: Does this work in all the tear down paths? Should we be using the
|
| + // MakeContextCurrent callback that GVDA gives us, which observes stub
|
| + // destruction?
|
| + std::unique_ptr<ui::ScopedMakeCurrent> scoped_make_current;
|
| + if (!context_->IsCurrent(NULL)) {
|
| + scoped_make_current.reset(
|
| + new ui::ScopedMakeCurrent(context_.get(), surface_.get()));
|
| + }
|
| + if (!scoped_make_current || scoped_make_current->Succeeded())
|
| + glDeleteTextures(1, &surface_texture_service_id_);
|
| +}
|
|
|
| void AVDASharedState::SignalFrameAvailable() {
|
| frame_available_event_.Signal();
|
| @@ -53,13 +66,15 @@ void AVDASharedState::WaitForFrameAvailable() {
|
| }
|
| }
|
|
|
| -void AVDASharedState::DidAttachSurfaceTexture() {
|
| +void AVDASharedState::SetSurfaceTexture(
|
| + scoped_refptr<gfx::SurfaceTexture> surface_texture,
|
| + GLuint attached_service_id) {
|
| + surface_texture_ = surface_texture;
|
| + surface_texture_service_id_ = attached_service_id;
|
| context_ = gfx::GLContext::GetCurrent();
|
| surface_ = gfx::GLSurface::GetCurrent();
|
| DCHECK(context_);
|
| DCHECK(surface_);
|
| -
|
| - surface_texture_is_attached_ = true;
|
| }
|
|
|
| void AVDASharedState::CodecChanged(media::MediaCodecBridge* codec) {
|
|
|