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?
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