Quindi sto ottenendo dati YUV grezzi in 3 array separati da una richiamata di rete (app VoIP). Da quello che ho capito non è possibile creare buffer di pixel IOSurface sostenuto con CVPixelBufferCreateWithPlanarBytes
in base alle hereCreare CVPixelBuffer da YUV con IOSurface supportato
Importante: Non è possibile utilizzare CVPixelBufferCreateWithBytes() o CVPixelBufferCreateWithPlanarBytes() con kCVPixelBufferIOSurfacePropertiesKey. Chiamando CVPixelBufferCreateWithBytes() o CVPixelBufferCreateWithPlanarBytes() si tradurrà in CVPixelBuffers che non sono IOSurface-backed
Così dunque si deve creare con CVPixelBufferCreate
, ma come si fa a trasferire i dati dalla chiamata al CVPixelBufferRef
che crei?
- (void)videoCallBack(uint8_t *yPlane, uint8_t *uPlane, uint8_t *vPlane, size_t width, size_t height, size_t stride yStride,
size_t uStride, size_t vStride)
NSDictionary *pixelAttributes = @{(id)kCVPixelBufferIOSurfacePropertiesKey : @{}};
CVPixelBufferRef pixelBuffer = NULL;
CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
(__bridge CFDictionaryRef)(pixelAttributes),
&pixelBuffer);
Non so cosa fare dopo? Alla fine voglio trasformare questo in un CIImage che poi posso usare il mio GLKView per renderizzare il video. In che modo le persone "inseriscono" i dati nei buffer da quando li crei?
Si prega di fornire il codice per la U e V aerei e numberOfElementsForChroma – JULIIncognito
@JULIIncognito L'uvPlane è solo una serie di uint_8 credo. Questo è molto tempo fa, mi dispiace. numberOfElementsForChroma sarà semplicemente la dimensione fissa di cui hai bisogno. – cvu
@JULIIncognito NumberOfElementsForChroma è uguale alla larghezza * altezza? Perché non funziona. – lilouch