2013-01-07 9 views
6

Używamy AVAssetReader i AVAssetWriter nieco w stylu opisanym w Video Encoding using AVAssetWriter - CRASHES w zasadzie po to, aby przeczytać wideo, które otrzymaliśmy z galerii zdjęć/biblioteki zasobów, a następnie zapisać je z inną szybkością bitową, aby zmniejszyć jego rozmiar (w przypadku ewentualnego przesłania do sieci).Jak wybrać typ formatu pikseli (kCVPixelBufferPixelFormatTypeKey) do użycia z AVAssetReader?

Trick do uzyskania to do pracy dla nas było, aby określić kCVPixelBufferPixelFormatTypeKey klucz i wartość w outputSettings na AVAssetReaderTrackOutput, coś takiego:

NSDictionary *outputSettings = [NSDictionary 
    dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] 
        forKey:(id)kCVPixelBufferPixelFormatTypeKey];  
readerTrackOutput = 
    [[AVAssetReaderTrackOutput alloc] initWithTrack:src_track 
            outputSettings:outputSettings]; 

Więc w zasadzie użyliśmy wartości kCVPixelFormatType_32BGRA klucza kCVPixelBufferPixelFormatTypeKey.

Ale najwyraźniej istnieje wiele możliwych typów formatów pikseli, z których moglibyśmy wybierać. Uruchomiony kod zanotowany w Technical Q&A QA1501: Core Video - Available Pixel Formats w sprawie iOS 6.0.1 urządzenia iPhone, oto lista typów formatów wsparcie pikseli że pokazuje:

Core Video Supported Pixel Format Types: 
Core Video Pixel Format Type: 32 
Core Video Pixel Format Type: 24 
Core Video Pixel Format Type: 16 
Core Video Pixel Format Type (FourCC): L565 
Core Video Pixel Format Type (FourCC): 2vuy 
Core Video Pixel Format Type (FourCC): yuvs 
Core Video Pixel Format Type (FourCC): yuvf 
Core Video Pixel Format Type: 40 
Core Video Pixel Format Type (FourCC): L008 
Core Video Pixel Format Type (FourCC): 2C08 
Core Video Pixel Format Type (FourCC): r408 
Core Video Pixel Format Type (FourCC): v408 
Core Video Pixel Format Type (FourCC): y408 
Core Video Pixel Format Type (FourCC): y416 
Core Video Pixel Format Type (FourCC): BGRA 
Core Video Pixel Format Type (FourCC): b64a 
Core Video Pixel Format Type (FourCC): b48r 
Core Video Pixel Format Type (FourCC): b32a 
Core Video Pixel Format Type (FourCC): b16g 
Core Video Pixel Format Type (FourCC): R10k 
Core Video Pixel Format Type (FourCC): v308 
Core Video Pixel Format Type (FourCC): v216 
Core Video Pixel Format Type (FourCC): v210 
Core Video Pixel Format Type (FourCC): v410 
Core Video Pixel Format Type (FourCC): r4fl 
Core Video Pixel Format Type (FourCC): grb4 
Core Video Pixel Format Type (FourCC): rgg4 
Core Video Pixel Format Type (FourCC): bgg4 
Core Video Pixel Format Type (FourCC): gbr4 
Core Video Pixel Format Type (FourCC): 420v 
Core Video Pixel Format Type (FourCC): 420f 
Core Video Pixel Format Type (FourCC): 411v 
Core Video Pixel Format Type (FourCC): 411f 
Core Video Pixel Format Type (FourCC): 422v 
Core Video Pixel Format Type (FourCC): 422f 
Core Video Pixel Format Type (FourCC): 444v 
Core Video Pixel Format Type (FourCC): 444f 
Core Video Pixel Format Type (FourCC): y420 
Core Video Pixel Format Type (FourCC): f420 
Core Video Pixel Format Type (FourCC): a2vy 
Core Video Pixel Format Type (FourCC): L00h 
Core Video Pixel Format Type (FourCC): L00f 
Core Video Pixel Format Type (FourCC): 2C0h 
Core Video Pixel Format Type (FourCC): 2C0f 
Core Video Pixel Format Type (FourCC): RGhA 
Core Video Pixel Format Type (FourCC): RGfA 

Nawet kCVPixelFormatType_32BGRA pracował (przynajmniej pozornie) dla nas, jesteśmy ciekawi jak do tego, czy istnieje lepszy wybór niż ten z powyższej listy. Jak powinniśmy wybrać odpowiedni typ formatu pikseli?

+0

Jeżeli były kompatybilne sprzętowo Format tekstury dekodowane ramek surowe wideo, można by pomyśleć, że uzyskanie w tym formacie będzie szybciej niż konwersji RGB na przykład. Może to zostać przekazane do GL i fragmentu shadera używanego do konwersji do przestrzeni kolorów ekranu. – MrMaxP

Odpowiedz

1

Możesz eksperymentować z różnymi ustawieniami i porównywać wydajność. Dostarczenie buforów do kodera w różnych formatach pikseli może spowodować różnice w wydajności kodowania. Sprzętowe enkodery przyspieszające często używają "420v".

Zobacz także Query for optimal pixel format when capturing video on iOS?

Powiązane problemy