Skip to content

Commit ed2ab42

Browse files
author
汪洋
committed
enhance AYEffectHandler
1 parent 4fe591c commit ed2ab42

File tree

16 files changed

+313
-300
lines changed

16 files changed

+313
-300
lines changed

AiyaEffectSDK/AiyaEffectSDK.xcodeproj/xcuserdata/wangyang.xcuserdatad/xcschemes/xcschememanagement.plist

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,41 @@
1414
<key>orderHint</key>
1515
<integer>6</integer>
1616
</dict>
17+
<key>AyBeauty.xcscheme_^#shared#^_</key>
18+
<dict>
19+
<key>orderHint</key>
20+
<integer>8</integer>
21+
</dict>
1722
<key>AyCore.xcscheme</key>
1823
<dict>
1924
<key>orderHint</key>
20-
<integer>2</integer>
25+
<integer>1</integer>
2126
</dict>
2227
<key>AyEffect.xcscheme</key>
2328
<dict>
2429
<key>orderHint</key>
2530
<integer>5</integer>
2631
</dict>
32+
<key>AyEffect.xcscheme_^#shared#^_</key>
33+
<dict>
34+
<key>orderHint</key>
35+
<integer>7</integer>
36+
</dict>
2737
<key>AyFaceTrack.xcscheme</key>
2838
<dict>
2939
<key>orderHint</key>
30-
<integer>3</integer>
40+
<integer>2</integer>
3141
</dict>
3242
<key>AyShortVideoEffect.xcscheme</key>
3343
<dict>
3444
<key>orderHint</key>
3545
<integer>7</integer>
3646
</dict>
47+
<key>AyShortVideoEffect.xcscheme_^#shared#^_</key>
48+
<dict>
49+
<key>orderHint</key>
50+
<integer>9</integer>
51+
</dict>
3752
</dict>
3853
<key>SuppressBuildableAutocreation</key>
3954
<dict>

AiyaEffectSDK/AiyaEffectSDK/AyGPUImage/AYGPUImageContext.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ void runAYSynchronouslyOnContextQueue(AYGPUImageContext *context, void (^block)(
2525
@property(readonly) CVOpenGLESTextureCacheRef coreVideoTextureCache;
2626
@property(readonly, retain, nonatomic) AYGPUImageFramebufferCache *framebufferCache;
2727

28+
- (instancetype)initWithNewGLContext;
29+
30+
- (instancetype)initWithCurrentGLContext;
31+
2832
- (void)useAsCurrentContext;
2933

3034
- (void)presentBufferForDisplay;

AiyaEffectSDK/AiyaEffectSDK/AyGPUImage/AYGPUImageContext.m

Lines changed: 25 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ @interface AYGPUImageContext()
4242
{
4343
NSMutableDictionary *shaderProgramCache;
4444
EAGLSharegroup *_sharegroup;
45-
46-
BOOL _newGLContext;
4745
}
4846

4947
@end
@@ -56,47 +54,36 @@ @implementation AYGPUImageContext
5654
@synthesize coreVideoTextureCache = _coreVideoTextureCache;
5755
@synthesize framebufferCache = _framebufferCache;
5856

59-
- (id)init{
60-
if (!(self = [super init]))
61-
{
62-
return nil;
63-
}
64-
65-
if ([EAGLContext currentContext]) {
66-
[self initWithCurrentGLContext];
67-
}else {
68-
[self initWithNewGLContext];
69-
}
70-
71-
[self context];
72-
73-
return self;
74-
}
75-
7657
static int specificKey;
7758

78-
- (void)initWithNewGLContext;
59+
- (instancetype)initWithNewGLContext
7960
{
80-
_contextQueue = dispatch_queue_create("com.aiyaapp.AYGPUImage", AYGPUImageDefaultQueueAttribute());
81-
82-
CFStringRef specificValue = CFSTR("AYGPUImageQueue");
83-
dispatch_queue_set_specific(_contextQueue,
84-
&specificKey,
85-
(void*)specificValue,
86-
(dispatch_function_t)CFRelease);
87-
88-
shaderProgramCache = [[NSMutableDictionary alloc] init];
89-
90-
_newGLContext = YES;
91-
61+
self = [super init];
62+
if (self) {
63+
_contextQueue = dispatch_queue_create("com.aiyaapp.AYGPUImage", AYGPUImageDefaultQueueAttribute());
64+
65+
CFStringRef specificValue = CFSTR("AYGPUImageQueue");
66+
dispatch_queue_set_specific(_contextQueue,
67+
&specificKey,
68+
(void*)specificValue,
69+
(dispatch_function_t)CFRelease);
70+
71+
shaderProgramCache = [[NSMutableDictionary alloc] init];
72+
73+
_context = [self createContext];
74+
}
75+
return self;
9276
}
9377

94-
- (void)initWithCurrentGLContext;
78+
- (instancetype)initWithCurrentGLContext
9579
{
96-
97-
shaderProgramCache = [[NSMutableDictionary alloc] init];
98-
99-
_newGLContext = NO;
80+
self = [super init];
81+
if (self) {
82+
shaderProgramCache = [[NSMutableDictionary alloc] init];
83+
84+
_context = [EAGLContext currentContext];
85+
}
86+
return self;
10087
}
10188

10289
- (void *)contextKey {
@@ -150,19 +137,6 @@ - (EAGLContext *)createContext;
150137

151138
- (EAGLContext *)context;
152139
{
153-
if (_newGLContext) {
154-
if (_context == nil)
155-
{
156-
_context = [self createContext];
157-
[EAGLContext setCurrentContext:_context];
158-
159-
// Set up a few global settings for the image processing pipeline
160-
glDisable(GL_DEPTH_TEST);
161-
}
162-
}else {
163-
_context = [EAGLContext currentContext];
164-
}
165-
166140
return _context;
167141
}
168142

@@ -191,4 +165,5 @@ - (AYGPUImageFramebufferCache *)framebufferCache;
191165

192166
return _framebufferCache;
193167
}
168+
194169
@end

AiyaEffectSDK/AiyaEffectSDK/AyGPUImageCustomFilter/AYGPUImageTrackOutput.m

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,31 +45,32 @@ - (instancetype)initWithContext:(AYGPUImageContext *)context{
4545

4646
_context = context;
4747

48-
[context useAsCurrentContext];
49-
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYGPUImagePassthroughFragmentShaderString];
50-
51-
if (!dataProgram.initialized)
52-
{
53-
if (![dataProgram link])
48+
runAYSynchronouslyOnContextQueue(context, ^{
49+
[context useAsCurrentContext];
50+
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYGPUImagePassthroughFragmentShaderString];
51+
52+
if (!dataProgram.initialized)
5453
{
55-
NSString *progLog = [dataProgram programLog];
56-
NSLog(@"Program link log: %@", progLog);
57-
NSString *fragLog = [dataProgram fragmentShaderLog];
58-
NSLog(@"Fragment shader compile log: %@", fragLog);
59-
NSString *vertLog = [dataProgram vertexShaderLog];
60-
NSLog(@"Vertex shader compile log: %@", vertLog);
61-
dataProgram = nil;
54+
if (![dataProgram link])
55+
{
56+
NSString *progLog = [dataProgram programLog];
57+
NSLog(@"Program link log: %@", progLog);
58+
NSString *fragLog = [dataProgram fragmentShaderLog];
59+
NSLog(@"Fragment shader compile log: %@", fragLog);
60+
NSString *vertLog = [dataProgram vertexShaderLog];
61+
NSLog(@"Vertex shader compile log: %@", vertLog);
62+
dataProgram = nil;
63+
}
6264
}
63-
}
64-
65-
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
66-
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
67-
dataInputTextureUniform = [dataProgram uniformIndex:@"inputImageTexture"];
68-
65+
66+
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
67+
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
68+
dataInputTextureUniform = [dataProgram uniformIndex:@"inputImageTexture"];
69+
6970
#if AY_ENABLE_TRACK
70-
_track = [[AyFaceTrack alloc] init];
71+
_track = [[AyFaceTrack alloc] init];
7172
#endif
72-
73+
});
7374
return self;
7475
}
7576

AiyaEffectSDK/AiyaEffectSDK/AyGPUImageCustomFilter/inputOutput/AYGPUImageBGRADataInput.m

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,29 @@ - (instancetype)initWithContext:(AYGPUImageContext *)context
2929
return nil;
3030
}
3131

32-
[context useAsCurrentContext];
33-
34-
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYGPUImagePassthroughFragmentShaderString];
35-
36-
if (!dataProgram.initialized)
37-
{
38-
if (![dataProgram link])
32+
runAYSynchronouslyOnContextQueue(context, ^{
33+
[context useAsCurrentContext];
34+
35+
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYGPUImagePassthroughFragmentShaderString];
36+
37+
if (!dataProgram.initialized)
3938
{
40-
NSString *progLog = [dataProgram programLog];
41-
NSLog(@"Program link log: %@", progLog);
42-
NSString *fragLog = [dataProgram fragmentShaderLog];
43-
NSLog(@"Fragment shader compile log: %@", fragLog);
44-
NSString *vertLog = [dataProgram vertexShaderLog];
45-
NSLog(@"Vertex shader compile log: %@", vertLog);
46-
dataProgram = nil;
39+
if (![dataProgram link])
40+
{
41+
NSString *progLog = [dataProgram programLog];
42+
NSLog(@"Program link log: %@", progLog);
43+
NSString *fragLog = [dataProgram fragmentShaderLog];
44+
NSLog(@"Fragment shader compile log: %@", fragLog);
45+
NSString *vertLog = [dataProgram vertexShaderLog];
46+
NSLog(@"Vertex shader compile log: %@", vertLog);
47+
dataProgram = nil;
48+
}
4749
}
48-
}
49-
50-
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
51-
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
52-
dataInputTextureUniform = [dataProgram uniformIndex:@"inputImageTexture"];
53-
50+
51+
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
52+
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
53+
dataInputTextureUniform = [dataProgram uniformIndex:@"inputImageTexture"];
54+
});
5455
return self;
5556
}
5657

AiyaEffectSDK/AiyaEffectSDK/AyGPUImageCustomFilter/inputOutput/AYGPUImageBGRADataOutput.m

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,28 @@ - (instancetype)initWithContext:(AYGPUImageContext *)context
4040
}
4141

4242
_context = context;
43-
44-
[context useAsCurrentContext];
45-
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYGPUImagePassthroughFragmentShaderString];
46-
47-
if (!dataProgram.initialized)
48-
{
49-
if (![dataProgram link])
43+
runAYSynchronouslyOnContextQueue(context, ^{
44+
[context useAsCurrentContext];
45+
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYGPUImagePassthroughFragmentShaderString];
46+
47+
if (!dataProgram.initialized)
5048
{
51-
NSString *progLog = [dataProgram programLog];
52-
NSLog(@"Program link log: %@", progLog);
53-
NSString *fragLog = [dataProgram fragmentShaderLog];
54-
NSLog(@"Fragment shader compile log: %@", fragLog);
55-
NSString *vertLog = [dataProgram vertexShaderLog];
56-
NSLog(@"Vertex shader compile log: %@", vertLog);
57-
dataProgram = nil;
49+
if (![dataProgram link])
50+
{
51+
NSString *progLog = [dataProgram programLog];
52+
NSLog(@"Program link log: %@", progLog);
53+
NSString *fragLog = [dataProgram fragmentShaderLog];
54+
NSLog(@"Fragment shader compile log: %@", fragLog);
55+
NSString *vertLog = [dataProgram vertexShaderLog];
56+
NSLog(@"Vertex shader compile log: %@", vertLog);
57+
dataProgram = nil;
58+
}
5859
}
59-
}
60-
61-
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
62-
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
63-
dataInputTextureUniform = [dataProgram uniformIndex:@"inputImageTexture"];
64-
60+
61+
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
62+
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
63+
dataInputTextureUniform = [dataProgram uniformIndex:@"inputImageTexture"];
64+
});
6565
return self;
6666
}
6767

AiyaEffectSDK/AiyaEffectSDK/AyGPUImageCustomFilter/inputOutput/AYGPUImageI420DataInput.m

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -59,31 +59,32 @@ - (instancetype)initWithContext:(AYGPUImageContext *)context
5959
return nil;
6060
}
6161

62-
[context useAsCurrentContext];
63-
64-
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYRGBConversion2FragmentShaderString];
65-
66-
if (!dataProgram.initialized)
67-
{
68-
if (![dataProgram link])
62+
runAYSynchronouslyOnContextQueue(context, ^{
63+
[context useAsCurrentContext];
64+
65+
dataProgram = [context programForVertexShaderString:kAYGPUImageVertexShaderString fragmentShaderString:kAYRGBConversion2FragmentShaderString];
66+
67+
if (!dataProgram.initialized)
6968
{
70-
NSString *progLog = [dataProgram programLog];
71-
NSLog(@"Program link log: %@", progLog);
72-
NSString *fragLog = [dataProgram fragmentShaderLog];
73-
NSLog(@"Fragment shader compile log: %@", fragLog);
74-
NSString *vertLog = [dataProgram vertexShaderLog];
75-
NSLog(@"Vertex shader compile log: %@", vertLog);
76-
dataProgram = nil;
69+
if (![dataProgram link])
70+
{
71+
NSString *progLog = [dataProgram programLog];
72+
NSLog(@"Program link log: %@", progLog);
73+
NSString *fragLog = [dataProgram fragmentShaderLog];
74+
NSLog(@"Fragment shader compile log: %@", fragLog);
75+
NSString *vertLog = [dataProgram vertexShaderLog];
76+
NSLog(@"Vertex shader compile log: %@", vertLog);
77+
dataProgram = nil;
78+
}
7779
}
78-
}
79-
80-
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
81-
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
82-
datayTextureUniform = [dataProgram uniformIndex:@"yTexture"];
83-
datauTextureUniform = [dataProgram uniformIndex:@"uTexture"];
84-
datavTextureUniform = [dataProgram uniformIndex:@"vTexture"];
85-
colorConversionUniform = [dataProgram uniformIndex:@"colorConversionMatrix"];
86-
80+
81+
dataPositionAttribute = [dataProgram attributeIndex:@"position"];
82+
dataTextureCoordinateAttribute = [dataProgram attributeIndex:@"inputTextureCoordinate"];
83+
datayTextureUniform = [dataProgram uniformIndex:@"yTexture"];
84+
datauTextureUniform = [dataProgram uniformIndex:@"uTexture"];
85+
datavTextureUniform = [dataProgram uniformIndex:@"vTexture"];
86+
colorConversionUniform = [dataProgram uniformIndex:@"colorConversionMatrix"];
87+
});
8788
return self;
8889
}
8990

0 commit comments

Comments
 (0)