2011-07-08 15 views

Odpowiedz

3

To będzie prawie w czasie rzeczywistym na iPhone 4 i do przodu. iPhone 3GS będzie trochę niepewny. iPhone 3 i wcześniejsze nie są zalecane.

55

Teraz, gdy Core Image jest na iOS od jakiegoś czasu, możemy mówić o kilku trudnych liczbach wydajności. Stworzyłem test porównawczy w ramach testów dla mojego środowiska GPUImage i profilowałem wydajność filtrów opartych na procesorze, filtrach obrazu rdzeniowego i filtrach GPUImage z kanałami wideo na żywo. Następujące osoby były czasy (w milisekundach) każdy wziął zastosować pojedynczy filtr gamma na ramie 640x480 wideo z aparatu iPhone (dla dwóch różnych modeli sprzętu z systemem dwie różne wersje OS):

   iPhone 4 (iOS 5) | iPhone 4S (iOS 6) 
------------------------------------------------ 
CPU   458 ms (2.2 FPS)  183 ms (5.5 FPS) 
Core Image 106 ms (6.7 FPS)  8.2 ms (122 FPS) 
GPUImage  2.5 ms (400 FPS)  1.8 ms (555 FPS) 

do rdzeń obrazu, przekłada się to maksymalnie na 9,4 FPS dla prostego filtru gamma na iPhone 4, ale znacznie powyżej 60 FPS dla tego samego na iPhone 4S. Chodzi o najprostszą obudowę filtru obrazu rdzenia, którą można skonfigurować, więc wydajność będzie z pewnością zależała od bardziej złożonych operacji. Mogłoby się to wydawać, że Core Image nie może przetwarzać na żywo wystarczająco szybko, aby dopasować je do współczynnika sygnału iPhone'a w iPhone 4 z systemem iOS 5, ale od wersji iOS 6 przetwarza wideo więcej niż wystarczająco szybko, aby wykonać filtrowanie na żywo w telefonie iPhone 4S lub nowszym .

Źródło tych testów porównawczych można znaleźć pod numerem my GitHub repository), jeśli chcesz sprawdzić, skąd biorę te liczby.

Zaktualizowałem tę odpowiedź z mojego oryginału, który był zbyt krytyczny dla wydajności Core Image. Filtr tonów sepii, którego użyłem jako podstawy porównania, nie wykonywał tej samej operacji co moja, więc był to kiepski benchmark. Wydajność filtrów Core Image znacznie się poprawiła również w systemie iOS 6, dzięki czemu były one na tyle szybkie, że mogły przetwarzać wideo na żywo na iPhone 4S i nowsze. Od tego czasu znalazłem kilka przypadków, like large-radius blurs, gdzie Core Image znacznie przewyższa moją framework GPUImage.

poprzedniej odpowiedzi, dla potomności:

jak w przypadku wszelkich kwestii związanych zadaniowego, odpowiedź zależy od złożoności filtrów, rozmiar obrazu jest filtrowany, a właściwości użytkowe urządzenia you” ponowne uruchomienie.

Ponieważ obraz główny jest dostępny przez jakiś czas na komputerach Mac, mogę wskazać Ci numer Core Image Programming Guide jako źródło do nauki architektury. Nie mogę komentować elementów specyficznych dla systemu iOS, biorąc pod uwagę NDA, ale bardzo polecam obejrzeć film na WWDC 2011 Sesja 422 - Używanie obrazu Core w systemie iOS i Mac OS X.

Obraz rdzenia (głównie) korzysta z GPU do przetwarzania obrazu, abyś mógł zobaczyć jak szybkie moduły cieniujące OpenGL ES 2.0 obsługują przetwarzanie obrazu na istniejących urządzeniach. I did some work in this area recently, i okazało się, że iPhone 4 może wykonać 60 FPS przetwarzania przy użyciu prostego modułu cieniującego na wideo w czasie rzeczywistym podawanym w rozdzielczości 480 x 320. Można pobrać tam przykładową aplikację i spróbować dostosować moduł cieniujący i/lub rozmiar wejściowy wideo do określić, czy dane urządzenie może obsłużyć to przetwarzanie przy przyzwoitej szybkości klatek na sekundę. Obraz rdzenia może dodać trochę narzut, ale ma też pewne sprytne optymalizacje, jak organizuje łańcuchy filtrów.

Najwolniejszymi zgodnymi urządzeniami są iPhone 3G S i iPod touch 3. generacji, ale nie są one o wiele wolniejsze od iPhone'a 4. iPad 2 wysadza je wszystkie dzięki potężnej mocy przetwarzania fragmentów.

+0

Jakiego rodzaju CIContekstu użyłeś w powyższej tabeli porównawczej? CPU lub procesor graficzny? BTW: Właśnie rzuciłem okiem na twoją strukturę GPUImage i wygląda niesamowicie! GJ! –

+1

@ Błażej - w zależności od GPU. Musiałem zweryfikować te dane, ale wygląda na to, że Core Image przeładowuje GPU podczas przetwarzania na iPhone 4. Wygląda na to, że Core Image był skierowany na nowsze urządzenia A5, a nie na iPhone 3G S, iPhone 4, lub oryginalny iPad. –

+0

Hej Brad, Ponieważ zarówno Core Image, jak i GPUImage (na podstawie nazwy) są oparte na GPU, procesory GPUImage są znacznie szybsze? – tom

6

IMHO, Core Image to zawsze Twoja pierwsza opcja od iOS6.0. Jest kilka dobrych funkcji, które ci się spodobają, takie jak:

  1. Parametry wejściowe obrazu Core obsługują glTexture2d;
  2. Parametry wyjściowe obrazu wyjściowego obsługują glTexture2d;
  3. Możesz używać CI wyłącznie z GPU; init a CIContext np. _CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts];
  4. Wiele filtrów jest teraz dostępnych na platformę iOS, 93 lub więcej filtrów?
  5. Można wybrać przetwarzanie bufora wyłącznie z procesorem, gdy aplikacja tymczasowo działa w tle, co jednak nie jest zalecane.

Są to wszystkie wymienione w wideo sesji WWDC2012, część Core Image. Spójrz, może znajdziesz tam swoje rozwiązanie.

Powiązane problemy