mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Add ability to mark video sources for screen casting in ObjC
Bug: webrtc:13033 Change-Id: If30a4889cd2cb0ecc5ee91eed2ee9b496a40c852 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227295 Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Commit-Queue: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34818}
This commit is contained in:
parent
723ceae567
commit
4d0760e7f9
6 changed files with 38 additions and 6 deletions
|
@ -60,6 +60,13 @@ RTC_OBJC_EXPORT
|
|||
*/
|
||||
- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSource;
|
||||
|
||||
/** Initialize a generic RTCVideoSource with he posibility of marking
|
||||
* it as usable for screen sharing. The RTCVideoSource should be
|
||||
* passed to a RTCVideoCapturer implementation, e.g.
|
||||
* RTCCameraVideoCapturer, in order to produce frames.
|
||||
*/
|
||||
- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSourceForScreenCast:(BOOL)forScreenCast;
|
||||
|
||||
/** Initialize an RTCVideoTrack with a source and an id. */
|
||||
- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
|
||||
trackId:(NSString *)trackId;
|
||||
|
|
|
@ -247,6 +247,13 @@
|
|||
workerThread:_workerThread.get()];
|
||||
}
|
||||
|
||||
- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSourceForScreenCast:(BOOL)forScreenCast {
|
||||
return [[RTC_OBJC_TYPE(RTCVideoSource) alloc] initWithFactory:self
|
||||
signalingThread:_signalingThread.get()
|
||||
workerThread:_workerThread.get()
|
||||
isScreenCast:forScreenCast];
|
||||
}
|
||||
|
||||
- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
|
||||
trackId:(NSString *)trackId {
|
||||
return [[RTC_OBJC_TYPE(RTCVideoTrack) alloc] initWithFactory:self source:source trackId:trackId];
|
||||
|
|
|
@ -41,6 +41,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
signalingThread:(rtc::Thread *)signalingThread
|
||||
workerThread:(rtc::Thread *)workerThread;
|
||||
|
||||
- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
|
||||
signalingThread:(rtc::Thread *)signalingThread
|
||||
workerThread:(rtc::Thread *)workerThread
|
||||
isScreenCast:(BOOL)isScreenCast;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -51,8 +51,18 @@ static webrtc::ObjCVideoTrackSource *getObjCVideoSource(
|
|||
- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
|
||||
signalingThread:(rtc::Thread *)signalingThread
|
||||
workerThread:(rtc::Thread *)workerThread {
|
||||
return [self initWithFactory:factory
|
||||
signalingThread:signalingThread
|
||||
workerThread:workerThread
|
||||
isScreenCast:NO];
|
||||
}
|
||||
|
||||
- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
|
||||
signalingThread:(rtc::Thread *)signalingThread
|
||||
workerThread:(rtc::Thread *)workerThread
|
||||
isScreenCast:(BOOL)isScreenCast {
|
||||
rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objCVideoTrackSource(
|
||||
new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>());
|
||||
new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>(isScreenCast));
|
||||
|
||||
return [self initWithFactory:factory
|
||||
nativeVideoSource:webrtc::VideoTrackSourceProxy::Create(
|
||||
|
|
|
@ -27,10 +27,9 @@ namespace webrtc {
|
|||
class ObjCVideoTrackSource : public rtc::AdaptedVideoTrackSource {
|
||||
public:
|
||||
ObjCVideoTrackSource();
|
||||
explicit ObjCVideoTrackSource(bool is_screencast);
|
||||
explicit ObjCVideoTrackSource(RTCObjCVideoSourceAdapter* adapter);
|
||||
|
||||
// This class can not be used for implementing screen casting. Hopefully, this
|
||||
// function will be removed before we add that to iOS/Mac.
|
||||
bool is_screencast() const override;
|
||||
|
||||
// Indicates that the encoder should denoise video before encoding it.
|
||||
|
@ -52,6 +51,7 @@ class ObjCVideoTrackSource : public rtc::AdaptedVideoTrackSource {
|
|||
rtc::TimestampAligner timestamp_aligner_;
|
||||
|
||||
RTCObjCVideoSourceAdapter* adapter_;
|
||||
bool is_screencast_;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
|
|
@ -34,15 +34,18 @@
|
|||
|
||||
namespace webrtc {
|
||||
|
||||
ObjCVideoTrackSource::ObjCVideoTrackSource()
|
||||
: AdaptedVideoTrackSource(/* required resolution alignment */ 2) {}
|
||||
ObjCVideoTrackSource::ObjCVideoTrackSource() : ObjCVideoTrackSource(false) {}
|
||||
|
||||
ObjCVideoTrackSource::ObjCVideoTrackSource(bool is_screencast)
|
||||
: AdaptedVideoTrackSource(/* required resolution alignment */ 2),
|
||||
is_screencast_(is_screencast) {}
|
||||
|
||||
ObjCVideoTrackSource::ObjCVideoTrackSource(RTCObjCVideoSourceAdapter *adapter) : adapter_(adapter) {
|
||||
adapter_.objCVideoTrackSource = this;
|
||||
}
|
||||
|
||||
bool ObjCVideoTrackSource::is_screencast() const {
|
||||
return false;
|
||||
return is_screencast_;
|
||||
}
|
||||
|
||||
absl::optional<bool> ObjCVideoTrackSource::needs_denoising() const {
|
||||
|
|
Loading…
Reference in a new issue