Index: content/renderer/media/rtc_video_decoder.h |
diff --git a/content/renderer/media/rtc_video_decoder.h b/content/renderer/media/rtc_video_decoder.h |
index 346cb031c77aa25138e9b82e217fc99ea3f6b0d3..11e58527145e3881ff13dfa0ef9162e8f1cd679f 100644 |
--- a/content/renderer/media/rtc_video_decoder.h |
+++ b/content/renderer/media/rtc_video_decoder.h |
@@ -36,13 +36,11 @@ class GpuVideoDecoderFactories; |
namespace content { |
// This class uses hardware accelerated video decoder to decode video for |
-// WebRTC. The message loop of RendererGpuVideoDecoderFactories is stored as |
-// |vda_message_loop_|. It is the compositor thread, or the renderer thread if |
-// threaded compositing is disabled. VDA::Client methods run on |
-// |vda_message_loop_|. webrtc::VideoDecoder methods run on WebRTC |
+// WebRTC. |vda_message_loop_| is the message loop proxy of the media thread, |
+// which VDA::Client methods run on. webrtc::VideoDecoder methods run on WebRTC |
// DecodingThread or Chrome_libJingle_WorkerThread, which are trampolined to |
// |vda_message_loop_|. Decode() is non-blocking and queues the buffers. Decoded |
-// frames are delivered on |vda_message_loop_|. |
+// frames are delivered to WebRTC on |vda_message_loop_|. |
class CONTENT_EXPORT RTCVideoDecoder |
: NON_EXPORTED_BASE(public webrtc::VideoDecoder), |
public media::VideoDecodeAccelerator::Client, |
@@ -50,8 +48,10 @@ class CONTENT_EXPORT RTCVideoDecoder |
public: |
virtual ~RTCVideoDecoder(); |
- // Creates a RTCVideoDecoder. Returns NULL if failed. |
+ // Creates a RTCVideoDecoder. Returns NULL if failed. The video decoder will |
+ // run on the message loop of |factories|. |
static scoped_ptr<RTCVideoDecoder> Create( |
+ webrtc::VideoCodecType type, |
const scoped_refptr<media::GpuVideoDecoderFactories>& factories); |
// webrtc::VideoDecoder implementation. |
@@ -111,6 +111,7 @@ class CONTENT_EXPORT RTCVideoDecoder |
FRIEND_TEST_ALL_PREFIXES(RTCVideoDecoderTest, IsBufferAfterReset); |
+ // The meessage loop of |factories| will be saved to |vda_loop_proxy_|. |
RTCVideoDecoder( |
const scoped_refptr<media::GpuVideoDecoderFactories>& factories); |
@@ -198,18 +199,9 @@ class CONTENT_EXPORT RTCVideoDecoder |
scoped_refptr<media::GpuVideoDecoderFactories> factories_; |
- // The message loop to run callbacks on. This is should be the same as the one |
- // of |factories_|. |
+ // The message loop to run callbacks on. This is from |factories_|. |
scoped_refptr<base::MessageLoopProxy> vda_loop_proxy_; |
- // The thread to create shared memory. CreateSharedMemory is trampolined to |
- // the child thread. When |vda_loop_proxy_| is the compositor thread, blocking |
- // on the child thread will deadlock. During WebRTC hang up, the child thread |
- // waits for Chrome_libJingle_WorkerThread. libJingle thread cannot finish |
- // when DecodingThread holds a WebRTC lock and blocks on the child thread. So |
- // we need to call CreateSharedMemory asynchronously from a different thread. |
- base::Thread create_shm_thread_; |
- |
// The texture target used for decoded pictures. |
uint32 decoder_texture_target_; |