| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include <string> | 34 #include <string> |
| 35 #include <vector> | 35 #include <vector> |
| 36 | 36 |
| 37 #include "talk/media/base/mediachannel.h" | 37 #include "talk/media/base/mediachannel.h" |
| 38 #include "talk/media/base/videoadapter.h" | 38 #include "talk/media/base/videoadapter.h" |
| 39 #include "talk/media/base/videocommon.h" | 39 #include "talk/media/base/videocommon.h" |
| 40 #include "talk/media/base/videoframefactory.h" | 40 #include "talk/media/base/videoframefactory.h" |
| 41 #include "talk/media/devices/devicemanager.h" | 41 #include "talk/media/devices/devicemanager.h" |
| 42 #include "webrtc/base/basictypes.h" | 42 #include "webrtc/base/basictypes.h" |
| 43 #include "webrtc/base/criticalsection.h" | 43 #include "webrtc/base/criticalsection.h" |
| 44 #include "webrtc/media/base/videosourceinterface.h" |
| 44 #include "webrtc/base/messagehandler.h" | 45 #include "webrtc/base/messagehandler.h" |
| 45 #include "webrtc/base/rollingaccumulator.h" | 46 #include "webrtc/base/rollingaccumulator.h" |
| 46 #include "webrtc/base/scoped_ptr.h" | 47 #include "webrtc/base/scoped_ptr.h" |
| 47 #include "webrtc/base/sigslot.h" | 48 #include "webrtc/base/sigslot.h" |
| 48 #include "webrtc/base/thread.h" | 49 #include "webrtc/base/thread.h" |
| 49 #include "webrtc/base/timing.h" | 50 #include "webrtc/base/timing.h" |
| 50 | 51 |
| 51 | 52 |
| 52 namespace cricket { | 53 namespace cricket { |
| 53 | 54 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 // GetCaptureFormat() optionally | 121 // GetCaptureFormat() optionally |
| 121 // Stop() | 122 // Stop() |
| 122 // | 123 // |
| 123 // Assumption: | 124 // Assumption: |
| 124 // The Start() and Stop() methods are called by a single thread (E.g., the | 125 // The Start() and Stop() methods are called by a single thread (E.g., the |
| 125 // media engine thread). Hence, the VideoCapture subclasses dont need to be | 126 // media engine thread). Hence, the VideoCapture subclasses dont need to be |
| 126 // thread safe. | 127 // thread safe. |
| 127 // | 128 // |
| 128 class VideoCapturer | 129 class VideoCapturer |
| 129 : public sigslot::has_slots<>, | 130 : public sigslot::has_slots<>, |
| 130 public rtc::MessageHandler { | 131 public rtc::MessageHandler, |
| 132 public rtc::VideoSourceBase<cricket::VideoFrame> { |
| 131 public: | 133 public: |
| 132 // All signals are marshalled to |thread| or the creating thread if | 134 // All signals are marshalled to |thread| or the creating thread if |
| 133 // none is provided. | 135 // none is provided. |
| 134 VideoCapturer(); | 136 VideoCapturer(); |
| 135 explicit VideoCapturer(rtc::Thread* thread); | 137 explicit VideoCapturer(rtc::Thread* thread); |
| 136 virtual ~VideoCapturer() {} | 138 virtual ~VideoCapturer() {} |
| 137 | 139 |
| 138 // Gets the id of the underlying device, which is available after the capturer | 140 // Gets the id of the underlying device, which is available after the capturer |
| 139 // is initialized. Can be used to determine if two capturers reference the | 141 // is initialized. Can be used to determine if two capturers reference the |
| 140 // same device. | 142 // same device. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 // Signal all capture state changes that are not a direct result of calling | 252 // Signal all capture state changes that are not a direct result of calling |
| 251 // Start(). | 253 // Start(). |
| 252 sigslot::signal2<VideoCapturer*, CaptureState> SignalStateChange; | 254 sigslot::signal2<VideoCapturer*, CaptureState> SignalStateChange; |
| 253 // Frame callbacks are multithreaded to allow disconnect and connect to be | 255 // Frame callbacks are multithreaded to allow disconnect and connect to be |
| 254 // called concurrently. It also ensures that it is safe to call disconnect | 256 // called concurrently. It also ensures that it is safe to call disconnect |
| 255 // at any time which is needed since the signal may be called from an | 257 // at any time which is needed since the signal may be called from an |
| 256 // unmarshalled thread owned by the VideoCapturer. | 258 // unmarshalled thread owned by the VideoCapturer. |
| 257 // Signal the captured frame to downstream. | 259 // Signal the captured frame to downstream. |
| 258 sigslot::signal2<VideoCapturer*, const CapturedFrame*, | 260 sigslot::signal2<VideoCapturer*, const CapturedFrame*, |
| 259 sigslot::multi_threaded_local> SignalFrameCaptured; | 261 sigslot::multi_threaded_local> SignalFrameCaptured; |
| 262 |
| 260 // Signal the captured and possibly adapted frame to downstream consumers | 263 // Signal the captured and possibly adapted frame to downstream consumers |
| 261 // such as the encoder. | 264 // such as the encoder. |
| 262 sigslot::signal2<VideoCapturer*, const VideoFrame*, | 265 sigslot::signal2<VideoCapturer*, const VideoFrame*, |
| 263 sigslot::multi_threaded_local> SignalVideoFrame; | 266 sigslot::multi_threaded_local> SignalVideoFrame; |
| 264 | 267 |
| 265 // If true, run video adaptation. By default, video adaptation is enabled | 268 // If true, run video adaptation. By default, video adaptation is enabled |
| 266 // and users must call video_adapter()->OnOutputFormatRequest() | 269 // and users must call video_adapter()->OnOutputFormatRequest() |
| 267 // to receive frames. | 270 // to receive frames. |
| 268 bool enable_video_adapter() const { return enable_video_adapter_; } | 271 bool enable_video_adapter() const { return enable_video_adapter_; } |
| 269 void set_enable_video_adapter(bool enable_video_adapter) { | 272 void set_enable_video_adapter(bool enable_video_adapter) { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 | 379 |
| 377 // Whether capturer should apply rotation to the frame before signaling it. | 380 // Whether capturer should apply rotation to the frame before signaling it. |
| 378 bool apply_rotation_; | 381 bool apply_rotation_; |
| 379 | 382 |
| 380 RTC_DISALLOW_COPY_AND_ASSIGN(VideoCapturer); | 383 RTC_DISALLOW_COPY_AND_ASSIGN(VideoCapturer); |
| 381 }; | 384 }; |
| 382 | 385 |
| 383 } // namespace cricket | 386 } // namespace cricket |
| 384 | 387 |
| 385 #endif // TALK_MEDIA_BASE_VIDEOCAPTURER_H_ | 388 #endif // TALK_MEDIA_BASE_VIDEOCAPTURER_H_ |
| OLD | NEW |