提交 4b682907 编写于 作者: Z Zhang Rui

IJKFFPlayer: add msg pool

上级 401d22ab
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
@implementation IJKFFPlayerController { @implementation IJKFFPlayerController {
NSURL *_url; NSURL *_url;
IjkMediaPlayer *_mediaPlayer; IjkMediaPlayer *_mediaPlayer;
IJKFFPlayerMessagePool *_msgPool;
} }
@synthesize view = _view; @synthesize view = _view;
...@@ -29,6 +30,8 @@ ...@@ -29,6 +30,8 @@
_url = aUrl; _url = aUrl;
_mediaPlayer = ijkmp_ios_create(media_player_msg_loop); _mediaPlayer = ijkmp_ios_create(media_player_msg_loop);
_msgPool = [[IJKFFPlayerMessagePool alloc] init];
ijkmp_set_weak_thiz(_mediaPlayer, (__bridge_retained void *) self); ijkmp_set_weak_thiz(_mediaPlayer, (__bridge_retained void *) self);
IJKSDLGLView *glView = [[IJKSDLGLView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; IJKSDLGLView *glView = [[IJKSDLGLView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
...@@ -205,6 +208,12 @@ ...@@ -205,6 +208,12 @@
NSLog(@"unknown FFP_MSG_xxx(%d)", avmsg->what); NSLog(@"unknown FFP_MSG_xxx(%d)", avmsg->what);
break; break;
} }
[_msgPool recycle:msg];
}
- (IJKFFPlayerMessage *) obtainMessage {
return [_msgPool obtain];
} }
inline static IJKFFPlayerController *ffplayerRetain(void *arg) { inline static IJKFFPlayerController *ffplayerRetain(void *arg) {
...@@ -219,7 +228,10 @@ int media_player_msg_loop(void* arg) ...@@ -219,7 +228,10 @@ int media_player_msg_loop(void* arg)
while (ffpController && true) { while (ffpController && true) {
@autoreleasepool { @autoreleasepool {
IJKFFPlayerMessage *msg = [[IJKFFPlayerMessage alloc] init]; IJKFFPlayerMessage *msg = [ffpController obtainMessage];
if (!msg)
break;
int retval = ijkmp_get_msg(mp, &msg->_msg, 1); int retval = ijkmp_get_msg(mp, &msg->_msg, 1);
if (retval < 0) if (retval < 0)
break; break;
......
...@@ -16,6 +16,14 @@ ...@@ -16,6 +16,14 @@
@end @end
@interface IJKFFPlayerMessagePool : NSObject
- (IJKFFPlayerMessagePool *)init;
- (IJKFFPlayerMessage *) obtain;
- (void) recycle:(IJKFFPlayerMessage *)msg;
@end
struct IJKSize { struct IJKSize {
NSInteger width; NSInteger width;
......
...@@ -9,4 +9,48 @@ ...@@ -9,4 +9,48 @@
#import "IJKFFPlayerDef.h" #import "IJKFFPlayerDef.h"
@implementation IJKFFPlayerMessage @implementation IJKFFPlayerMessage
@end
@implementation IJKFFPlayerMessagePool{
NSMutableArray *_array;
}
- (IJKFFPlayerMessagePool *)init
{
self = [super init];
if (self) {
_array = [[NSMutableArray alloc] init];
}
return self;
}
- (IJKFFPlayerMessage *) obtain
{
IJKFFPlayerMessage *msg = nil;
@synchronized(self) {
NSUInteger count = [_array count];
if (count > 0) {
msg = [_array objectAtIndex:count - 1];
[_array removeLastObject];
}
}
if (!msg)
msg = [[IJKFFPlayerMessage alloc] init];
return msg;
}
- (void) recycle:(IJKFFPlayerMessage *)msg
{
if (!msg)
return;
@synchronized(self) {
if ([_array count] <= 10)
[_array addObject:msg];
}
}
@end @end
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册