The old one has been deprecated for a long time. Bug: webrtc:6333, webrtc:6898, webrtc:7861 Change-Id: Ib9b798262817e80019afcacc5b41d18957a28101 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/124827 Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> Commit-Queue: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26993}
85 lines
3.0 KiB
Plaintext
85 lines
3.0 KiB
Plaintext
/*
|
|
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "test/mac_capturer.h"
|
|
|
|
#import "sdk/objc/base/RTCVideoCapturer.h"
|
|
#import "sdk/objc/components/capturer/RTCCameraVideoCapturer.h"
|
|
#import "sdk/objc/native/api/video_capturer.h"
|
|
#import "sdk/objc/native/src/objc_frame_buffer.h"
|
|
|
|
@interface RTCTestVideoSourceAdapter : NSObject <RTCVideoCapturerDelegate>
|
|
@property(nonatomic) webrtc::test::MacCapturer *capturer;
|
|
@end
|
|
|
|
@implementation RTCTestVideoSourceAdapter
|
|
@synthesize capturer = _capturer;
|
|
|
|
- (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame {
|
|
const int64_t timestamp_us = frame.timeStampNs / rtc::kNumNanosecsPerMicrosec;
|
|
rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer =
|
|
new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(frame.buffer);
|
|
_capturer->OnFrame(webrtc::VideoFrame::Builder()
|
|
.set_video_frame_buffer(buffer)
|
|
.set_rotation(webrtc::kVideoRotation_0)
|
|
.set_timestamp_us(timestamp_us)
|
|
.build());
|
|
}
|
|
|
|
@end
|
|
|
|
namespace webrtc {
|
|
namespace test {
|
|
|
|
MacCapturer::MacCapturer(size_t width,
|
|
size_t height,
|
|
size_t target_fps,
|
|
size_t capture_device_index) {
|
|
RTCTestVideoSourceAdapter *adapter = [[RTCTestVideoSourceAdapter alloc] init];
|
|
adapter_ = (__bridge_retained void *)adapter;
|
|
adapter.capturer = this;
|
|
|
|
RTCCameraVideoCapturer *capturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:adapter];
|
|
capturer_ = (__bridge_retained void *)capturer;
|
|
|
|
AVCaptureDevice *device =
|
|
[[RTCCameraVideoCapturer captureDevices] objectAtIndex:capture_device_index];
|
|
AVCaptureDeviceFormat *format =
|
|
[[RTCCameraVideoCapturer supportedFormatsForDevice:device] objectAtIndex:0];
|
|
[capturer startCaptureWithDevice:device format:format fps:target_fps];
|
|
}
|
|
|
|
MacCapturer *MacCapturer::Create(size_t width,
|
|
size_t height,
|
|
size_t target_fps,
|
|
size_t capture_device_index) {
|
|
return new MacCapturer(width, height, target_fps, capture_device_index);
|
|
}
|
|
|
|
void MacCapturer::Destroy() {
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wunused-variable"
|
|
RTCTestVideoSourceAdapter *adapter = (__bridge_transfer RTCTestVideoSourceAdapter *)adapter_;
|
|
RTCCameraVideoCapturer *capturer = (__bridge_transfer RTCCameraVideoCapturer *)capturer_;
|
|
[capturer stopCapture];
|
|
#pragma clang diagnostic pop
|
|
}
|
|
|
|
MacCapturer::~MacCapturer() {
|
|
Destroy();
|
|
}
|
|
|
|
void MacCapturer::OnFrame(const VideoFrame &frame) {
|
|
TestVideoCapturer::OnFrame(frame);
|
|
}
|
|
|
|
} // namespace test
|
|
} // namespace webrtc
|