• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Concurrent loading of images ?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Concurrent loading of images ?


  • Subject: Re: Concurrent loading of images ?
  • From: Gabriel Zachmann via Cocoa-dev <email@hidden>
  • Date: Mon, 18 May 2020 17:27:53 +0200

> I’m not sure if you can create and manipulate a CALayer on a background
> thread, all UI code must be run on main thread.

Yes, that's what I was suspecting, too.

Interestingly, when I create a layer in the background, and add it to the main
layer *in the background thread* , it helps a lot.
The stuttering is much much better now! not 100% perfect, but OK to distribute,
IMHO.
Code is attached, just for reference, should someone else stumble in here.


>
> It’s worth noting that I’m using Lanczos scaling with cpu renderer because
> I’m scaling relatively low-resolution images for print output so I need the
> highest quality scaling regardless of performance.

Do you scale up? or down?

(I'm only scaling down, if any.)

> According to this NSHipster guide (https://nshipster.com/image-resizing/)
> simply getting an appropriate size via CGImageSourceCreateThumbnailAtIndex
> should be your best option. You’re already doing this, so maybe you don’t
> need CIImage at all?

Yes, I have just removed CIImage functions completely.

>
> The CALayer animation should be using the GPU.

Yes, I think, it does.

> If loading the new image at the same time you’re starting the animation of
> the current image causes a stutter, you could try delaying execution of your
> block by a little (using dispatch_after instead of dispatch_async).

Good idea !
I tried that and it seems to help a bit further against stuttering.


So, thanks a million to you (and everyone else who chimed in)!
You kept me experimenting.

Best regards, Gabriel



Encl.:

This is my solution to the stuttering problem, at the moment.
(Let's hope, Apple doesn't change the semantics of all the API's, LOL.)


    NSDictionary * imageOpts = @{
(id)kCGImageSourceCreateThumbnailWithTransform: (id)kCFBooleanTrue,  // takes
care of EXIF orientation, too

(id)kCGImageSourceCreateThumbnailFromImageIfAbsent: (id)kCFBooleanTrue,

(id)kCGImageSourceCreateThumbnailFromImageAlways: (id)kCFBooleanTrue,
                                  (id)kCGImageSourceShouldCacheImmediately:
(id)kCFBooleanTrue,
                                  (id)kCGImageSourceThumbnailMaxPixelSize:
@(8192)                                };
    CGImageRef newImageRef = CGImageSourceCreateThumbnailAtIndex( new_image, 0,
                                                               (__bridge
CFDictionaryRef) imageOpts );

    if ( prefetchLayer_ )
        [prefetchLayer_ removeFromSuperlayer];
    prefetchLayer_ = [CALayer layer];
    prefetchLayer_.contents  = (__bridge id)(newImageRef);
    prefetchLayer_.delegate            = nil;
    prefetchLayer_.minificationFilter  = kCAFilterTrilinear;
// kCAFilterLinear is faster
    prefetchLayer_.magnificationFilter = imgLayer.minificationFilter;

    prefetchLayer_.bounds = NSRectToCGRect( drawRect_ );

    prefetchLayer_.zPosition = -10.0;
    prefetchLayer_.opacity = 0.0;  // hopefully, Apple never optimizes layers
away b/c of zero opacity!
    [mainLayer_ addSublayer: prefetchLayer_];


Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

References: 
 >Concurrent loading of images ? (From: Gabriel Zachmann via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Jens Alfke via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Rob Petrovec via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Gabriel Zachmann via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Jens Alfke via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Gabriel Zachmann via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Alex Zavatone via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Gabriel Zachmann via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Alex Zavatone via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Gabriel Zachmann via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: James Crate via Cocoa-dev <email@hidden>)
 >Re: Concurrent loading of images ? (From: Gabriel Zachmann via Cocoa-dev <email@hidden>)

  • Prev by Date: Re: Concurrent loading of images ?
  • Next by Date: Finding memory leaks
  • Previous by thread: Re: Concurrent loading of images ?
  • Next by thread: Re: Concurrent loading of images ?
  • Index(es):
    • Date
    • Thread