objective c - GPUImage memory usage -


i noticed more use gpuimage, more memory app takes on time (using instruments monitor memory use).

as example, use each filter in different methods:

 (uiimage*)toonfilter:(uiimage*)theimage     {     gpuimagesmoothtoonfilter *smoothtoonfilter = [[gpuimagesmoothtoonfilter alloc] init];     [smoothtoonfilter settexelheight:0.0025];     [smoothtoonfilter settexelwidth:0.0025];     return [smoothtoonfilter imagebyfilteringimage:theimage];     }      (uiimage*)sketchfilter:(uiimage*)theimage     {     gpuimagesketchfilter *sketchfilter = [[gpuimagesketchfilter alloc] init];     [sketchfilter settexelheight:0.003];     [sketchfilter settexelwidth:0.003];     return [sketchfilter imagebyfilteringimage:theimage];     }      (uiimage*)pixellatefilter:(uiimage*)theimage     {     gpuimagepixellatefilter *pixellatefilter = [[gpuimagepixellatefilter alloc] init];     [pixellatefilter setfractionalwidthofapixel:0.01;     return [pixellatefilter imagebyfilteringimage:theimage];     } 

and how use these filters (testimage uiimage):

testimage = [self sketchfilter:testimage]; testimage = [self pixellatefilter:testimage]; 

if cycle through these filters on , over, without doing else, app takes more , more memory.

what doing wrong? how can release memory once don't need anymore?

you keep allocating new filters every time call these functions. create them once in view controller etc , send them functions sample code below (as gpuimagepicture). don't forget call [removealltargets] on filters, not removed memory when have targets

(uiimage*)pixellatefilter:(uiimage*)theimage withpixellatefilter:(gpuimagepixellatefilter *) pixellatefilter andstaticpicture:(gpuimagepicture *)staticpicture 

and use [filter prepareforimagecapture] before getting uiimage filters

for example can build function like

(uiimage*)pixellatefilter:(uiimage*)theimage withpixellatefilter:(gpuimagepixellatefilter *) pixellatefilter andstaticpicture:(gpuimagepicture *)staticpicture{     [staticpicture removealltargets];     uiimage __block *imagetoreturn;     [staticpicture addtarget:pixellatefilter];     [staticpicture processimagewithcompletionhandler:^{             [pixellatefilter prepareforimagecapture];             imagetoreturn = [pixellatefilter imagefromcurrentlyprocessedoutput];             [pixellatefilter removealltargets];             pixellatefilter = nil;     }];     return imagetoreturn; } 

i use gpuimageview application allows use gpuimagefilters , gpuimagepictures directly without getting uiimage, should consider


Comments

Popular posts from this blog

c++ - Creating new partition disk winapi -

Android Prevent Bluetooth Pairing Dialog -

VBA function to include CDATA -