2013-01-07 14 views
6

Stiamo utilizzando lo stile AVAssetReader e AVAssetWriter nello stile come indicato in Video Encoding using AVAssetWriter - CRASHES in pratica per leggere un video che abbiamo ottenuto dalla galleria fotografica/libreria di asset e quindi lo abbiamo scritto con un bit rate diverso per ridurne le dimensioni (per l'eventuale caricamento in rete).Come scegliere il tipo di formato di un pixel (kCVPixelBufferPixelFormatTypeKey) da utilizzare con AVAssetReader?

Il trucco per ottenere questo a lavorare per noi è stato quello di specificare una chiave kCVPixelBufferPixelFormatTypeKey e valore nel outputSettings su AVAssetReaderTrackOutput, qualcosa di simile:

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

Quindi, in pratica abbiamo usato il valore kCVPixelFormatType_32BGRA per la chiave kCVPixelBufferPixelFormatTypeKey.

Ma a quanto pare ci sono molti possibili formati di pixel che potremmo scegliere. L'esecuzione del codice annotato al Technical Q&A QA1501: Core Video - Available Pixel Formats su un dispositivo iOS 6.0.1 iPhone, ecco l'elenco dei tipi di formato supporto dei pixel che mostra:

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 

Anche se kCVPixelFormatType_32BGRA lavorato (almeno apparentemente) per noi, siamo curiosi come se esiste una scelta migliore rispetto a quella dell'elenco precedente. Come dovremmo scegliere il tipo di formato di pixel giusto per noi?

+0

Se ci fosse un hardware in formato compatibile per tessitura decodificati fotogrammi video grezzo, si potrebbe pensare che ottenere in quel formato sarebbe stato più veloce di conversione in RGB, per esempio. Questo potrebbe essere passato a GL e uno shader di frammenti usato per convertire nello spazio colore dello schermo. – MrMaxP

risposta

1

È possibile sperimentare diverse impostazioni e confrontare le prestazioni. Fornire i buffer all'encoder in diversi formati di pixel può causare differenze nella perfomance di codifica. Gli encoder con accelerazione hardware utilizzano spesso "420v".

Vedi anche, Query for optimal pixel format when capturing video on iOS?

Problemi correlati