Revert "Add file capturer to AppRTCMobile on simulator."
This reverts commit 5adcd198752b651f7b7e9199a91f9b873b7d7237.
Reason for revert: <INSERT REASONING HERE>
Original change's description:
> Add file capturer to AppRTCMobile on simulator.
>
> To achieve this, the CL does the following
> - Adds sample mp4 video
> - Refactors the existing RTCFileVideoCapturer to achieve continious
> capture and adds tests.
>
> Bug: webrtc:8406
> Change-Id: Ibc0891176c58ec9053b42e340d2113036e7199ec
> Reviewed-on: https://webrtc-review.googlesource.com/12180
> Reviewed-by: Anders Carlsson <andersc@webrtc.org>
> Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> Commit-Queue: Daniela Jovanoska Petrenko <denicija@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#20598}
TBR=magjed@webrtc.org,andersc@webrtc.org,denicija@webrtc.org
Change-Id: I73b35c67296c964f65d206454ac1329b4b979628
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8406
Reviewed-on: https://webrtc-review.googlesource.com/21240
Reviewed-by: Daniela Jovanoska Petrenko <denicija@webrtc.org>
Commit-Queue: Daniela Jovanoska Petrenko <denicija@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20599}
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.h b/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.h
new file mode 100644
index 0000000..c8793ca
--- /dev/null
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WebRTC/RTCVideoCapturer.h>
+
+/**
+ * RTCVideoCapturer that reads buffers from file.
+ *
+ * Per design, the file capturer can only be run once and once stopped it cannot run again.
+ * To run another file capture session, create new instance of the class.
+ */
+NS_CLASS_AVAILABLE_IOS(10)
+@interface RTCFileVideoCapturer : RTCVideoCapturer
+
+- (void)startCapturingFromFileNamed:(NSString *)nameOfFile;
+- (void)stopCapture;
+
+@end
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.m b/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.m
index 07cb2c6..178a958 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.m
@@ -8,91 +8,60 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#import "WebRTC/RTCFileVideoCapturer.h"
+#import "RTCFileVideoCapturer.h"
#import "WebRTC/RTCLogging.h"
#import "WebRTC/RTCVideoFrameBuffer.h"
-NSString *const kRTCFileVideoCapturerErrorDomain = @"org.webrtc.RTCFileVideoCapturer";
-
-typedef NS_ENUM(NSInteger, RTCFileVideoCapturerErrorCode) {
- RTCFileVideoCapturerErrorCode_CapturerRunning = 2000,
- RTCFileVideoCapturerErrorCode_FileNotFound
-};
-
-typedef NS_ENUM(NSInteger, RTCFileVideoCapturerStatus) {
- RTCFileVideoCapturerStatusNotInitialized,
- RTCFileVideoCapturerStatusStarted,
- RTCFileVideoCapturerStatusStopped
-};
-
@implementation RTCFileVideoCapturer {
AVAssetReader *_reader;
AVAssetReaderTrackOutput *_outTrack;
- RTCFileVideoCapturerStatus _status;
+ BOOL _capturerStopped;
CMTime _lastPresentationTime;
dispatch_queue_t _frameQueue;
- NSURL *_fileURL;
}
-- (void)startCapturingFromFileNamed:(NSString *)nameOfFile
- onError:(RTCFileVideoCapturerErrorBlock)errorBlock {
- if (_status == RTCFileVideoCapturerStatusStarted) {
- NSError *error =
- [NSError errorWithDomain:kRTCFileVideoCapturerErrorDomain
- code:RTCFileVideoCapturerErrorCode_CapturerRunning
- userInfo:@{NSUnderlyingErrorKey : @"Capturer has been started."}];
-
- errorBlock(error);
- return;
- } else {
- _status = RTCFileVideoCapturerStatusStarted;
- }
-
+- (void)startCapturingFromFileNamed:(NSString *)nameOfFile {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ if (_reader && _reader.status == AVAssetReaderStatusReading) {
+ RTCLog("Capturer exists and reads another file. Start capture request failed.");
+ return;
+ }
NSString *pathForFile = [self pathForFileName:nameOfFile];
if (!pathForFile) {
- NSString *errorString =
- [NSString stringWithFormat:@"File %@ not found in bundle", nameOfFile];
- NSError *error = [NSError errorWithDomain:kRTCFileVideoCapturerErrorDomain
- code:RTCFileVideoCapturerErrorCode_FileNotFound
- userInfo:@{NSUnderlyingErrorKey : errorString}];
- errorBlock(error);
+ RTCLog("File %@ not found in bundle", nameOfFile);
return;
}
_lastPresentationTime = CMTimeMake(0, 0);
- _fileURL = [NSURL fileURLWithPath:pathForFile];
- [self setupReaderOnError:errorBlock];
+ NSURL *URLForFile = [NSURL fileURLWithPath:pathForFile];
+ AVURLAsset *asset = [AVURLAsset URLAssetWithURL:URLForFile options:nil];
+
+ NSArray *allTracks = [asset tracksWithMediaType:AVMediaTypeVideo];
+ NSError *error = nil;
+ _reader = [[AVAssetReader alloc] initWithAsset:asset error:&error];
+ if (error) {
+ RTCLog("File reader failed with error: %@", error);
+ return;
+ }
+
+ NSDictionary *options = @{
+ (NSString *)
+ kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)
+ };
+ _outTrack = [[AVAssetReaderTrackOutput alloc] initWithTrack:allTracks.firstObject
+ outputSettings:options];
+ [_reader addOutput:_outTrack];
+
+ [_reader startReading];
+ RTCLog(@"File capturer started reading");
+ [self readNextBuffer];
});
}
-- (void)setupReaderOnError:(RTCFileVideoCapturerErrorBlock)errorBlock {
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:_fileURL options:nil];
-
- NSArray *allTracks = [asset tracksWithMediaType:AVMediaTypeVideo];
- NSError *error = nil;
-
- _reader = [[AVAssetReader alloc] initWithAsset:asset error:&error];
- if (error) {
- errorBlock(error);
- return;
- }
-
- NSDictionary *options = @{
- (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)
- };
- _outTrack =
- [[AVAssetReaderTrackOutput alloc] initWithTrack:allTracks.firstObject outputSettings:options];
- [_reader addOutput:_outTrack];
-
- [_reader startReading];
- RTCLog(@"File capturer started reading");
- [self readNextBuffer];
-}
- (void)stopCapture {
- _status = RTCFileVideoCapturerStatusStopped;
+ _capturerStopped = YES;
RTCLog(@"File capturer stopped.");
}
@@ -119,19 +88,12 @@
}
- (void)readNextBuffer {
- if (_status == RTCFileVideoCapturerStatusStopped) {
+ if (_reader.status != AVAssetReaderStatusReading || _capturerStopped) {
[_reader cancelReading];
_reader = nil;
return;
}
- if (_reader.status == AVAssetReaderStatusCompleted) {
- [_reader cancelReading];
- _reader = nil;
- [self setupReaderOnError:nil];
- return;
- }
-
CMSampleBufferRef sampleBuffer = [_outTrack copyNextSampleBuffer];
if (!sampleBuffer) {
[self readNextBuffer];