forked from bartvdbraak/blender
Quicktime Carbon: Fix memory leak when build with cocoa
This commit is contained in:
parent
1fd581ad77
commit
3b1c6d6065
@ -45,6 +45,10 @@ IF(APPLE)
|
||||
LIST(REMOVE_ITEM SRC "${CMAKE_CURRENT_SOURCE_DIR}/intern/GHOST_DisplayManagerX11.cpp")
|
||||
LIST(REMOVE_ITEM SRC "${CMAKE_CURRENT_SOURCE_DIR}/intern/GHOST_SystemX11.cpp")
|
||||
LIST(REMOVE_ITEM SRC "${CMAKE_CURRENT_SOURCE_DIR}/intern/GHOST_WindowX11.cpp")
|
||||
|
||||
IF(WITH_QUICKTIME)
|
||||
ADD_DEFINITIONS(-DWITH_QUICKTIME)
|
||||
ENDIF(WITH_QUICKTIME)
|
||||
ELSE(APPLE)
|
||||
IF(WIN32)
|
||||
SET(INC ${INC} ${WINTAB_INC})
|
||||
|
@ -12,6 +12,7 @@ if window_system == 'darwin':
|
||||
|
||||
|
||||
pf = ['GHOST_DisplayManager', 'GHOST_System', 'GHOST_Window', 'GHOST_DropTarget']
|
||||
defs=['_USE_MATH_DEFINES']
|
||||
|
||||
if window_system in ('linux2', 'openbsd3', 'sunos5', 'freebsd6', 'irix6'):
|
||||
for f in pf:
|
||||
@ -29,6 +30,10 @@ elif window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64
|
||||
pass
|
||||
elif window_system == 'darwin':
|
||||
if env['WITH_GHOST_COCOA']:
|
||||
if env['WITH_BF_QUICKTIME']:
|
||||
defs.append('WITH_QUICKTIME')
|
||||
if env['USE_QTKIT']:
|
||||
defs.append('USE_QTKIT')
|
||||
for f in pf:
|
||||
try:
|
||||
sources.remove('intern' + os.sep + f + 'Win32.cpp')
|
||||
@ -49,7 +54,6 @@ else:
|
||||
print "Unknown window system specified."
|
||||
Exit()
|
||||
|
||||
defs=['_USE_MATH_DEFINES']
|
||||
if env['BF_GHOST_DEBUG']:
|
||||
defs.append('BF_GHOST_DEBUG')
|
||||
|
||||
|
@ -389,6 +389,28 @@ extern "C" int GHOST_HACK_getFirstFile(char buf[FIRSTFILEBUFLG]) {
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(WITH_QUICKTIME) && !defined(USE_QTKIT)
|
||||
//Need to place this quicktime function in an ObjC file
|
||||
//It is used to avoid memory leak when raising the quicktime "compression settings" standard dialog
|
||||
extern "C" {
|
||||
struct bContext;
|
||||
struct wmOperator;
|
||||
extern int fromcocoa_request_qtcodec_settings(bContext *C, wmOperator *op);
|
||||
|
||||
|
||||
int cocoa_request_qtcodec_settings(bContext *C, wmOperator *op)
|
||||
{
|
||||
int result;
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
result = fromcocoa_request_qtcodec_settings(C, op);
|
||||
|
||||
[pool drain];
|
||||
return result;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#pragma mark Cocoa objects
|
||||
|
||||
|
@ -30,4 +30,9 @@ incs.append(env['BF_QUICKTIME_INC'])
|
||||
types = ['core','player']
|
||||
priorities = [200,235]
|
||||
|
||||
env.BlenderLib ('bf_quicktime', sources=source_files, includes=incs, defines=['WITH_QUICKTIME'], libtype=types, priority=priorities)
|
||||
defs=['WITH_QUICKTIME']
|
||||
|
||||
if env['WITH_GHOST_COCOA']:
|
||||
defs.append('GHOST_COCOA')
|
||||
|
||||
env.BlenderLib ('bf_quicktime', sources=source_files, includes=incs, defines=defs, libtype=types, priority=priorities)
|
||||
|
@ -783,7 +783,7 @@ static int request_qtcodec_settings(bContext *C, wmOperator *op)
|
||||
err = SCRequestSequenceSettings(qtdata->theComponent);
|
||||
|
||||
if (err == scUserCancelled) {
|
||||
return 0;
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
// update runtime codecsettings for use with the codec dialog
|
||||
@ -844,7 +844,7 @@ static int request_qtcodec_settings(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int ED_operator_setqtcodec(bContext *C)
|
||||
@ -852,6 +852,17 @@ static int ED_operator_setqtcodec(bContext *C)
|
||||
return G.have_quicktime != FALSE;
|
||||
}
|
||||
|
||||
#if defined(__APPLE__) && defined(GHOST_COCOA)
|
||||
//Need to set up a Cocoa NSAutoReleasePool to avoid memory leak
|
||||
//And it must be done in an objC file, so use a GHOST_SystemCocoa.mm function for that
|
||||
extern int cocoa_request_qtcodec_settings(bContext *C, wmOperator *op);
|
||||
|
||||
int fromcocoa_request_qtcodec_settings(bContext *C, wmOperator *op)
|
||||
{
|
||||
return request_qtcodec_settings(C, op);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void SCENE_OT_render_data_set_quicktime_codec(wmOperatorType *ot)
|
||||
{
|
||||
@ -861,7 +872,11 @@ void SCENE_OT_render_data_set_quicktime_codec(wmOperatorType *ot)
|
||||
ot->idname= "SCENE_OT_render_data_set_quicktime_codec";
|
||||
|
||||
/* api callbacks */
|
||||
#if defined(__APPLE__) && defined(GHOST_COCOA)
|
||||
ot->exec = cocoa_request_qtcodec_settings;
|
||||
#else
|
||||
ot->exec= request_qtcodec_settings;
|
||||
#endif
|
||||
ot->poll= ED_operator_setqtcodec;
|
||||
|
||||
/* flags */
|
||||
|
Loading…
Reference in New Issue
Block a user