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

Unified Diff: content/renderer/media/android/stream_texture_factory.h

Issue 532993002: work-in-progress patch to fix context lost black video (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more threading fix Created 6 years, 3 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/renderer/media/android/stream_texture_factory.h
diff --git a/content/renderer/media/android/stream_texture_factory.h b/content/renderer/media/android/stream_texture_factory.h
index 70d31e9391a8c2ac760ae5b2559866f30869093f..f6799f6ac2293ed507e259e89f076b7055ec7e3f 100644
--- a/content/renderer/media/android/stream_texture_factory.h
+++ b/content/renderer/media/android/stream_texture_factory.h
@@ -7,6 +7,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop_proxy.h"
#include "cc/layers/video_frame_provider.h"
#include "gpu/command_buffer/common/mailbox.h"
#include "ui/gfx/size.h"
@@ -25,13 +26,12 @@ class StreamTextureProxy {
public:
virtual ~StreamTextureProxy() {}
- // Initialize and bind to the current thread, which becomes the thread that
- // a connected client will receive callbacks on.
- virtual void BindToCurrentThread(int32 stream_id) = 0;
-
- // Setting the target for callback when a frame is available. This function
- // could be called on both the main thread and the compositor thread.
- virtual void SetClient(cc::VideoFrameProvider::Client* client) = 0;
+ // Initialize and bind to the loop, which becomes the thread that
+ // a connected client will receive callbacks on. This can be called
+ // on any thread, but must be called with the same loop every time.
+ virtual void BindToLoop(int32 stream_id,
+ cc::VideoFrameProvider::Client* client,
+ scoped_refptr<base::MessageLoopProxy> loop) = 0;
// Causes this instance to be deleted on the thread it is bound to.
virtual void Release() = 0;
@@ -44,6 +44,12 @@ class StreamTextureProxy {
typedef scoped_ptr<StreamTextureProxy, StreamTextureProxy::Deleter>
ScopedStreamTextureProxy;
+class StreamTextureFactoryContextObserver {
+ public:
+ ~StreamTextureFactoryContextObserver() {}
+ virtual void ResetStreamTextureProxy() = 0;
+};
+
// Factory class for managing stream textures.
class StreamTextureFactory : public base::RefCounted<StreamTextureFactory> {
public:
@@ -69,6 +75,9 @@ class StreamTextureFactory : public base::RefCounted<StreamTextureFactory> {
virtual gpu::gles2::GLES2Interface* ContextGL() = 0;
+ virtual void AddObserver(StreamTextureFactoryContextObserver* obs) = 0;
+ virtual void RemoveObserver(StreamTextureFactoryContextObserver* obs) = 0;
+
protected:
friend class base::RefCounted<StreamTextureFactory>;
virtual ~StreamTextureFactory() {}

Powered by Google App Engine
This is Rietveld 408576698