Project import generated by Copybara.
GitOrigin-RevId: 7e1d382a1788ebd8412c5626581b4c4cf2fe75ea
This commit is contained in:
@@ -225,6 +225,7 @@ objc_library(
|
||||
testonly = 1,
|
||||
srcs = [
|
||||
"CFHolderTests.mm",
|
||||
"MPPDisplayLinkWeakTargetTests.mm",
|
||||
"MPPGraphTests.mm",
|
||||
],
|
||||
copts = [
|
||||
@@ -250,6 +251,7 @@ objc_library(
|
||||
":MPPGraphTestBase",
|
||||
":Weakify",
|
||||
":mediapipe_framework_ios",
|
||||
":mediapipe_input_sources_ios",
|
||||
"//mediapipe/calculators/core:pass_through_calculator",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
// Copyright 2021 The MediaPipe Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import "mediapipe/objc/MPPDisplayLinkWeakTarget.h"
|
||||
|
||||
@interface DummyTarget : NSObject
|
||||
|
||||
@property(nonatomic) BOOL updateCalled;
|
||||
- (void)update:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DummyTarget
|
||||
|
||||
@synthesize updateCalled = _updateCalled;
|
||||
|
||||
- (void)update:(id)sender {
|
||||
_updateCalled = YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface MPPDisplayLinkWeakTargetTests : XCTestCase
|
||||
@end
|
||||
|
||||
@implementation MPPDisplayLinkWeakTargetTests {
|
||||
DummyTarget *_dummyTarget;
|
||||
}
|
||||
|
||||
- (void)setUp {
|
||||
_dummyTarget = [[DummyTarget alloc] init];
|
||||
}
|
||||
|
||||
- (void)testCallingLiveTarget {
|
||||
XCTAssertFalse(_dummyTarget.updateCalled);
|
||||
|
||||
MPPDisplayLinkWeakTarget *target =
|
||||
[[MPPDisplayLinkWeakTarget alloc] initWithTarget:_dummyTarget
|
||||
selector:@selector(update:)];
|
||||
[target displayLinkCallback:nil];
|
||||
|
||||
XCTAssertTrue(_dummyTarget.updateCalled);
|
||||
}
|
||||
|
||||
- (void)testDoesNotCrashWhenTargetIsDeallocated {
|
||||
MPPDisplayLinkWeakTarget *target =
|
||||
[[MPPDisplayLinkWeakTarget alloc] initWithTarget:_dummyTarget
|
||||
selector:@selector(update:)];
|
||||
_dummyTarget = nil;
|
||||
[target displayLinkCallback:nil];
|
||||
|
||||
XCTAssertNil(_dummyTarget);
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -34,6 +34,9 @@
|
||||
|
||||
- (void)displayLinkCallback:(CADisplayLink *)sender {
|
||||
__strong id target = _target;
|
||||
if (target == nil) {
|
||||
return;
|
||||
}
|
||||
void (*display)(id, SEL, CADisplayLink *) = (void *)[target methodForSelector:_selector];
|
||||
display(target, _selector, sender);
|
||||
}
|
||||
|
||||
@@ -140,7 +140,11 @@ static CVReturn renderCallback(CVDisplayLinkRef displayLink, const CVTimeStamp*
|
||||
}
|
||||
CFRelease(pixelBuffer);
|
||||
});
|
||||
} else if (!_videoDisplayLink.paused && _videoPlayer.rate == 0) {
|
||||
} else if (
|
||||
#if !TARGET_OS_OSX
|
||||
!_videoDisplayLink.paused &&
|
||||
#endif
|
||||
_videoPlayer.rate == 0) {
|
||||
// The video might be paused by the operating system fo other reasons not catched by the context
|
||||
// of an interruption. If this condition happens the @c _videoDisplayLink will not have a
|
||||
// paused state, while the _videoPlayer will have rate 0 AKA paused. In this scenario we restart
|
||||
|
||||
Reference in New Issue
Block a user