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

Side by Side Diff: content/browser/renderer_host/media/video_capture_controller.h

Issue 15906019: Hook up EncodedVideoSource on the browser side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@screencast_cl_6
Patch Set: bbd3b746f Rebase. Created 7 years, 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // VideoCaptureController is the glue between VideoCaptureHost, 5 // VideoCaptureController is the glue between VideoCaptureHost,
6 // VideoCaptureManager and VideoCaptureDevice. 6 // VideoCaptureManager and VideoCaptureDevice.
7 // It provides functions for VideoCaptureHost to start a VideoCaptureDevice and 7 // It provides functions for VideoCaptureHost to start a VideoCaptureDevice and
8 // is responsible for keeping track of shared DIBs and filling them with I420 8 // is responsible for keeping track of shared DIBs and filling them with I420
9 // video frames for IPC communication between VideoCaptureHost and 9 // video frames for IPC communication between VideoCaptureHost and
10 // VideoCaptureMessageFilter. 10 // VideoCaptureMessageFilter.
(...skipping 12 matching lines...) Expand all
23 #include "base/memory/ref_counted.h" 23 #include "base/memory/ref_counted.h"
24 #include "base/process.h" 24 #include "base/process.h"
25 #include "base/synchronization/lock.h" 25 #include "base/synchronization/lock.h"
26 #include "content/browser/renderer_host/media/video_capture_buffer_pool.h" 26 #include "content/browser/renderer_host/media/video_capture_buffer_pool.h"
27 #include "content/browser/renderer_host/media/video_capture_controller_event_han dler.h" 27 #include "content/browser/renderer_host/media/video_capture_controller_event_han dler.h"
28 #include "content/common/content_export.h" 28 #include "content/common/content_export.h"
29 #include "content/common/media/video_capture.h" 29 #include "content/common/media/video_capture.h"
30 #include "media/video/capture/video_capture.h" 30 #include "media/video/capture/video_capture.h"
31 #include "media/video/capture/video_capture_device.h" 31 #include "media/video/capture/video_capture_device.h"
32 #include "media/video/capture/video_capture_types.h" 32 #include "media/video/capture/video_capture_types.h"
33 #include "media/video/video_encode_types.h"
33 34
34 namespace content { 35 namespace content {
35 class VideoCaptureManager; 36 class VideoCaptureManager;
36 class VideoCaptureBufferPool; 37 class VideoCaptureBufferPool;
37 38
38 class CONTENT_EXPORT VideoCaptureController 39 class CONTENT_EXPORT VideoCaptureController
39 : public base::RefCountedThreadSafe<VideoCaptureController>, 40 : public base::RefCountedThreadSafe<VideoCaptureController>,
40 public media::VideoCaptureDevice::EventHandler { 41 public media::VideoCaptureDevice::EventHandler {
41 public: 42 public:
42 VideoCaptureController(VideoCaptureManager* video_capture_manager); 43 VideoCaptureController(VideoCaptureManager* video_capture_manager);
(...skipping 17 matching lines...) Expand all
60 // API called directly by VideoCaptureManager in case the device is 61 // API called directly by VideoCaptureManager in case the device is
61 // prematurely closed. 62 // prematurely closed.
62 void StopSession(int session_id); 63 void StopSession(int session_id);
63 64
64 // Return a buffer previously given in 65 // Return a buffer previously given in
65 // VideoCaptureControllerEventHandler::OnBufferReady. 66 // VideoCaptureControllerEventHandler::OnBufferReady.
66 void ReturnBuffer(const VideoCaptureControllerID& id, 67 void ReturnBuffer(const VideoCaptureControllerID& id,
67 VideoCaptureControllerEventHandler* event_handler, 68 VideoCaptureControllerEventHandler* event_handler,
68 int buffer_id); 69 int buffer_id);
69 70
71 // Attempt to configure the encoding parameters for an encoded bitstream.
72 // Fails silently if the capture device does not support encoding.
73 void TryConfigureEncodedBitstream(
74 const media::RuntimeVideoEncodingParameters& params);
75
70 // Implement media::VideoCaptureDevice::EventHandler. 76 // Implement media::VideoCaptureDevice::EventHandler.
71 virtual scoped_refptr<media::VideoFrame> ReserveOutputBuffer() OVERRIDE; 77 virtual scoped_refptr<media::VideoFrame> ReserveOutputVideoFrame() OVERRIDE;
78 virtual scoped_refptr<media::EncodedBitstreamBuffer>
79 ReserveOutputEncodedBitstreamBuffer() OVERRIDE;
72 virtual void OnIncomingCapturedFrame(const uint8* data, 80 virtual void OnIncomingCapturedFrame(const uint8* data,
73 int length, 81 int length,
74 base::Time timestamp, 82 base::Time timestamp,
75 int rotation, 83 int rotation,
76 bool flip_vert, 84 bool flip_vert,
77 bool flip_horiz) OVERRIDE; 85 bool flip_horiz) OVERRIDE;
78 virtual void OnIncomingCapturedVideoFrame( 86 virtual void OnIncomingCapturedVideoFrame(
79 const scoped_refptr<media::VideoFrame>& frame, 87 const scoped_refptr<media::VideoFrame>& frame,
80 base::Time timestamp) OVERRIDE; 88 base::Time timestamp) OVERRIDE;
89 virtual void OnIncomingCapturedEncodedBitstreamBuffer(
90 const scoped_refptr<media::EncodedBitstreamBuffer>& buffer,
91 size_t data_size,
92 base::Time timestamp) OVERRIDE;
81 virtual void OnError() OVERRIDE; 93 virtual void OnError() OVERRIDE;
82 virtual void OnFrameInfo( 94 virtual void OnFrameInfo(
83 const media::VideoCaptureCapability& info) OVERRIDE; 95 const media::VideoCaptureCapability& info) OVERRIDE;
96 virtual void OnEncodedFrameInfo(
97 const media::VideoEncodingParameters& info) OVERRIDE;
98 virtual void OnBitstreamConfigChanged(
99 const media::RuntimeVideoEncodingParameters& params) OVERRIDE;
84 100
85 // Reserve a media::VideoFrame in I420 format from a buffer pool. 101 // Reserve a media::VideoFrame in I420 format from a buffer pool.
86 static scoped_refptr<media::VideoFrame> ReserveI420VideoFrame( 102 static scoped_refptr<media::VideoFrame> ReserveI420VideoFrame(
87 VideoCaptureBufferPool* buffer_pool, const gfx::Size& size); 103 VideoCaptureBufferPool* buffer_pool, const gfx::Size& size);
88 104
105 // Reserve a media::EncodedBitstreaBuffer from a buffer pool.
106 static scoped_refptr<media::EncodedBitstreamBuffer>
107 ReserveEncodedBitstreamBuffer(VideoCaptureBufferPool* buffer_pool);
108
89 protected: 109 protected:
90 virtual ~VideoCaptureController(); 110 virtual ~VideoCaptureController();
91 111
92 private: 112 private:
93 friend class base::RefCountedThreadSafe<VideoCaptureController>; 113 friend class base::RefCountedThreadSafe<VideoCaptureController>;
94 114
95 struct ControllerClient; 115 struct ControllerClient;
96 typedef std::list<ControllerClient*> ControllerClients; 116 typedef std::list<ControllerClient*> ControllerClients;
97 117
98 // Callback when manager has stopped device. 118 // Callback when manager has stopped device.
99 void OnDeviceStopped(); 119 void OnDeviceStopped();
100 120
101 // Worker functions on IO thread. 121 // Worker functions on IO thread.
102 void DoIncomingCapturedFrameOnIOThread( 122 void DoIncomingCapturedVideoFrameOnIOThread(
103 const scoped_refptr<media::VideoFrame>& captured_frame, 123 const scoped_refptr<media::VideoFrame>& frame,
104 base::Time timestamp); 124 base::Time timestamp);
105 void DoFrameInfoOnIOThread(); 125 void DoIncomingCapturedEncodedBitstreamBufferOnIOThread(
126 const scoped_refptr<media::EncodedBitstreamBuffer>& buffer,
127 size_t data_size,
128 base::Time timestamp);
129 void DoIncomingCapturedSharedMemoryOnIOThread(
130 base::SharedMemoryHandle reserved_handle,
131 size_t data_size,
132 base::Time timestamp);
133 void DoFrameInfoOnIOThread(bool encoded);
134 void DoBitstreamConfigChangedOnIOThread(
135 const media::RuntimeVideoEncodingParameters& params);
106 void DoErrorOnIOThread(); 136 void DoErrorOnIOThread();
107 void DoDeviceStoppedOnIOThread(); 137 void DoDeviceStoppedOnIOThread();
108 138
109 // Send frame info and init buffers to |client|. 139 // Send frame info and init buffers to |client|.
110 void SendFrameInfoAndBuffers(ControllerClient* client); 140 void SendFrameInfoAndBuffers(ControllerClient* client);
111 141
112 // Find a client of |id| and |handler| in |clients|. 142 // Find a client of |id| and |handler| in |clients|.
113 ControllerClient* FindClient( 143 ControllerClient* FindClient(
114 const VideoCaptureControllerID& id, 144 const VideoCaptureControllerID& id,
115 VideoCaptureControllerEventHandler* handler, 145 VideoCaptureControllerEventHandler* handler,
(...skipping 20 matching lines...) Expand all
136 166
137 // All clients waiting for service. 167 // All clients waiting for service.
138 ControllerClients pending_clients_; 168 ControllerClients pending_clients_;
139 169
140 // The parameter that currently used for the capturing. 170 // The parameter that currently used for the capturing.
141 media::VideoCaptureParams current_params_; 171 media::VideoCaptureParams current_params_;
142 172
143 // It's modified on caller thread, assuming there is only one OnFrameInfo() 173 // It's modified on caller thread, assuming there is only one OnFrameInfo()
144 // call per StartCapture(). 174 // call per StartCapture().
145 media::VideoCaptureCapability frame_info_; 175 media::VideoCaptureCapability frame_info_;
176 media::VideoEncodingParameters encoded_frame_info_;
sheu 2013/06/12 08:06:21 (see below)
146 177
147 // Chopped pixels in width/height in case video capture device has odd numbers 178 // Chopped pixels in width/height in case video capture device has odd numbers
148 // for width/height. 179 // for width/height.
149 int chopped_width_; 180 int chopped_width_;
150 int chopped_height_; 181 int chopped_height_;
151 182
152 // It's accessed only on IO thread. 183 // It's accessed only on IO thread.
153 bool frame_info_available_; 184 bool frame_info_available_;
185 bool encoded_frame_info_available_;
sheu 2013/06/12 08:06:21 This is bad and I feel bad. This and its implicat
154 186
155 VideoCaptureManager* video_capture_manager_; 187 VideoCaptureManager* video_capture_manager_;
156 188
157 bool device_in_use_; 189 bool device_in_use_;
158 VideoCaptureState state_; 190 VideoCaptureState state_;
159 191
160 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoCaptureController); 192 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoCaptureController);
161 }; 193 };
162 194
163 } // namespace content 195 } // namespace content
164 196
165 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_CONTROLLER_H_ 197 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698