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

Side by Side Diff: content/renderer/media/webrtc/video_destination_handler.h

Issue 631903003: Move VideoDestinationHandler processing to the IO-thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | content/renderer/media/webrtc/video_destination_handler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_VIDEO_DESTINATION_HANDLER_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_VIDEO_DESTINATION_HANDLER_H_
6 #define CONTENT_RENDERER_MEDIA_WEBRTC_VIDEO_DESTINATION_HANDLER_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_VIDEO_DESTINATION_HANDLER_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/memory/weak_ptr.h" 12 #include "base/memory/weak_ptr.h"
13 #include "content/common/content_export.h" 13 #include "content/common/content_export.h"
14 #include "content/renderer/media/media_stream_video_source.h" 14 #include "content/renderer/media/media_stream_video_source.h"
15 #include "media/base/video_frame_pool.h" 15 #include "media/base/video_frame_pool.h"
16 16
17 namespace content { 17 namespace content {
18 18
19 class PeerConnectionDependencyFactory;
20 class MediaStreamRegistryInterface; 19 class MediaStreamRegistryInterface;
21 class PPB_ImageData_Impl; 20 class PPB_ImageData_Impl;
22 21
23 // Interface used by the effects pepper plugin to output the processed frame 22 // VideoDestinationHandler is a glue class between the content MediaStream and
24 // to the video track. 23 // the effects pepper plugin host.
25 class CONTENT_EXPORT FrameWriterInterface { 24 class CONTENT_EXPORT VideoDestinationHandler {
26 public: 25 public:
27 // The ownership of the |image_data| deosn't transfer. So the implementation 26 // FrameWriterCallback is used to forward frames from the pepper host.
28 // of this interface should make a copy of the |image_data| before return. 27 // It must be invoked on the main render thread.
29 virtual void PutFrame(PPB_ImageData_Impl* image_data, 28 typedef base::Callback<
30 int64 time_stamp_ns) = 0; 29 void(const scoped_refptr<PPB_ImageData_Impl>& frame,
31 virtual ~FrameWriterInterface() {} 30 int64 time_stamp_ns)> FrameWriterCallback;
31
32 // Instantiates and adds a new video track to the MediaStream specified by
33 // |url|. Returns a handler for delivering frames to the new video track as
34 // |frame_writer|.
35 // If |registry| is NULL the global blink::WebMediaStreamRegistry will be
36 // used to look up the media stream.
37 // Returns true on success and false on failure.
38 static bool Open(MediaStreamRegistryInterface* registry,
39 const std::string& url,
40 FrameWriterCallback* frame_writer);
41
42 private:
43 DISALLOW_COPY_AND_ASSIGN(VideoDestinationHandler);
32 }; 44 };
33 45
34 // PpFrameWriter implements MediaStreamVideoSource and can therefore provide 46 // PpFrameWriter implements MediaStreamVideoSource and can therefore provide
35 // video frames to MediaStreamVideoTracks. It also implements 47 // video frames to MediaStreamVideoTracks.
36 // FrameWriterInterface, which will be used by the effects pepper plugin to
37 // inject the processed frame.
38 class CONTENT_EXPORT PpFrameWriter 48 class CONTENT_EXPORT PpFrameWriter
39 : NON_EXPORTED_BASE(public MediaStreamVideoSource), 49 : NON_EXPORTED_BASE(public MediaStreamVideoSource) {
40 public FrameWriterInterface,
41 NON_EXPORTED_BASE(public base::SupportsWeakPtr<PpFrameWriter>) {
42 public: 50 public:
43 PpFrameWriter(); 51 PpFrameWriter();
44 virtual ~PpFrameWriter(); 52 virtual ~PpFrameWriter();
45 53
46 // FrameWriterInterface implementation. 54 // Returns a callback that can be used for delivering frames to this
47 // This method will be called by the Pepper host from render thread. 55 // MediaStreamSource implementation.
48 virtual void PutFrame(PPB_ImageData_Impl* image_data, 56 VideoDestinationHandler::FrameWriterCallback GetFrameWriterCallback();
49 int64 time_stamp_ns) override; 57
50 protected: 58 protected:
51 // MediaStreamVideoSource implementation. 59 // MediaStreamVideoSource implementation.
52 virtual void GetCurrentSupportedFormats( 60 virtual void GetCurrentSupportedFormats(
53 int max_requested_width, 61 int max_requested_width,
54 int max_requested_height, 62 int max_requested_height,
55 double max_requested_frame_rate, 63 double max_requested_frame_rate,
56 const VideoCaptureDeviceFormatsCB& callback) override; 64 const VideoCaptureDeviceFormatsCB& callback) override;
57 virtual void StartSourceImpl( 65 virtual void StartSourceImpl(
58 const media::VideoCaptureFormat& format, 66 const media::VideoCaptureFormat& format,
59 const VideoCaptureDeliverFrameCB& frame_callback) override; 67 const VideoCaptureDeliverFrameCB& frame_callback) override;
60 virtual void StopSourceImpl() override; 68 virtual void StopSourceImpl() override;
61 69
62 private: 70 private:
63 media::VideoFramePool frame_pool_;
64
65 class FrameWriterDelegate; 71 class FrameWriterDelegate;
66 scoped_refptr<FrameWriterDelegate> delegate_; 72 scoped_refptr<FrameWriterDelegate> delegate_;
67 73
68 DISALLOW_COPY_AND_ASSIGN(PpFrameWriter); 74 DISALLOW_COPY_AND_ASSIGN(PpFrameWriter);
69 }; 75 };
70 76
71 // VideoDestinationHandler is a glue class between the content MediaStream and
72 // the effects pepper plugin host.
73 class CONTENT_EXPORT VideoDestinationHandler {
74 public:
75 // Instantiates and adds a new video track to the MediaStream specified by
76 // |url|. Returns a handler for delivering frames to the new video track as
77 // |frame_writer|.
78 // If |registry| is NULL the global blink::WebMediaStreamRegistry will be
79 // used to look up the media stream.
80 // The caller of the function takes the ownership of |frame_writer|.
81 // Returns true on success and false on failure.
82 static bool Open(MediaStreamRegistryInterface* registry,
83 const std::string& url,
84 FrameWriterInterface** frame_writer);
85
86 private:
87 DISALLOW_COPY_AND_ASSIGN(VideoDestinationHandler);
88 };
89
90 } // namespace content 77 } // namespace content
91 78
92 #endif // CONTENT_RENDERER_MEDIA_VIDEO_DESTINATION_HANDLER_H_ 79 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_VIDEO_DESTINATION_HANDLER_H_
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/webrtc/video_destination_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698