mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 06:10:40 +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;
|
- (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. */
|
/** Initialize an RTCVideoTrack with a source and an id. */
|
||||||
- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
|
- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
|
||||||
trackId:(NSString *)trackId;
|
trackId:(NSString *)trackId;
|
||||||
|
|
|
@ -247,6 +247,13 @@
|
||||||
workerThread:_workerThread.get()];
|
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
|
- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
|
||||||
trackId:(NSString *)trackId {
|
trackId:(NSString *)trackId {
|
||||||
return [[RTC_OBJC_TYPE(RTCVideoTrack) alloc] initWithFactory:self source:source trackId: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
|
signalingThread:(rtc::Thread *)signalingThread
|
||||||
workerThread:(rtc::Thread *)workerThread;
|
workerThread:(rtc::Thread *)workerThread;
|
||||||
|
|
||||||
|
- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
|
||||||
|
signalingThread:(rtc::Thread *)signalingThread
|
||||||
|
workerThread:(rtc::Thread *)workerThread
|
||||||
|
isScreenCast:(BOOL)isScreenCast;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
|
@ -51,8 +51,18 @@ static webrtc::ObjCVideoTrackSource *getObjCVideoSource(
|
||||||
- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
|
- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
|
||||||
signalingThread:(rtc::Thread *)signalingThread
|
signalingThread:(rtc::Thread *)signalingThread
|
||||||
workerThread:(rtc::Thread *)workerThread {
|
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(
|
rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objCVideoTrackSource(
|
||||||
new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>());
|
new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>(isScreenCast));
|
||||||
|
|
||||||
return [self initWithFactory:factory
|
return [self initWithFactory:factory
|
||||||
nativeVideoSource:webrtc::VideoTrackSourceProxy::Create(
|
nativeVideoSource:webrtc::VideoTrackSourceProxy::Create(
|
||||||
|
|
|
@ -27,10 +27,9 @@ namespace webrtc {
|
||||||
class ObjCVideoTrackSource : public rtc::AdaptedVideoTrackSource {
|
class ObjCVideoTrackSource : public rtc::AdaptedVideoTrackSource {
|
||||||
public:
|
public:
|
||||||
ObjCVideoTrackSource();
|
ObjCVideoTrackSource();
|
||||||
|
explicit ObjCVideoTrackSource(bool is_screencast);
|
||||||
explicit ObjCVideoTrackSource(RTCObjCVideoSourceAdapter* adapter);
|
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;
|
bool is_screencast() const override;
|
||||||
|
|
||||||
// Indicates that the encoder should denoise video before encoding it.
|
// Indicates that the encoder should denoise video before encoding it.
|
||||||
|
@ -52,6 +51,7 @@ class ObjCVideoTrackSource : public rtc::AdaptedVideoTrackSource {
|
||||||
rtc::TimestampAligner timestamp_aligner_;
|
rtc::TimestampAligner timestamp_aligner_;
|
||||||
|
|
||||||
RTCObjCVideoSourceAdapter* adapter_;
|
RTCObjCVideoSourceAdapter* adapter_;
|
||||||
|
bool is_screencast_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|
|
@ -34,15 +34,18 @@
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
ObjCVideoTrackSource::ObjCVideoTrackSource()
|
ObjCVideoTrackSource::ObjCVideoTrackSource() : ObjCVideoTrackSource(false) {}
|
||||||
: AdaptedVideoTrackSource(/* required resolution alignment */ 2) {}
|
|
||||||
|
ObjCVideoTrackSource::ObjCVideoTrackSource(bool is_screencast)
|
||||||
|
: AdaptedVideoTrackSource(/* required resolution alignment */ 2),
|
||||||
|
is_screencast_(is_screencast) {}
|
||||||
|
|
||||||
ObjCVideoTrackSource::ObjCVideoTrackSource(RTCObjCVideoSourceAdapter *adapter) : adapter_(adapter) {
|
ObjCVideoTrackSource::ObjCVideoTrackSource(RTCObjCVideoSourceAdapter *adapter) : adapter_(adapter) {
|
||||||
adapter_.objCVideoTrackSource = this;
|
adapter_.objCVideoTrackSource = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjCVideoTrackSource::is_screencast() const {
|
bool ObjCVideoTrackSource::is_screencast() const {
|
||||||
return false;
|
return is_screencast_;
|
||||||
}
|
}
|
||||||
|
|
||||||
absl::optional<bool> ObjCVideoTrackSource::needs_denoising() const {
|
absl::optional<bool> ObjCVideoTrackSource::needs_denoising() const {
|
||||||
|
|
Loading…
Reference in a new issue