2015-06-12 6 views
1

Мы экспортируем видео с помощью AVAssetWriter из UIImages, которые сначала преобразуются в CVPixelBufferRef, но изображения «скрипят» в видео черным «баром» с 160 пикселями пустые пиксели в нижней части.iOS AVAssetWriter Высота видео «Squished» при экспорте в UIImages

Учитывая, что изображения 640x480, видно, что 160 пикселей черной полосы - это как если бы изображение было повернуто, а нижнее было потеряно - НО - когда мы смотрим на видеоизображения - ту же высоту изображение захватывается - оно просто «сжимается», чтобы соответствовать черной полосе.

Ниже приведен код UIImage для CVBufferPixelRef.

Любые идеи, которые могут вызывать такое поведение?

- (CVPixelBufferRef) pixelBufferFromCGImage: (CGImageRef) image 
{ 
    ATHSingleton *singleton = [ATHSingleton singletons];  
    int height = singleton.screenHeight; 
    int width = singleton.screenWidth; 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey, 
          [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey, 
          nil]; 
    CVPixelBufferRef pxbuffer = NULL; 

    CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, 480, 
              640, kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options, 
              &pxbuffer); 


    NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL); 

    CVPixelBufferLockBaseAddress(pxbuffer, 0); 
    void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer); 
    NSParameterAssert(pxdata != NULL); 

    CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(pxdata, width, 
               height, 8, 4*width, rgbColorSpace, 
               kCGImageAlphaNoneSkipFirst); 
    NSParameterAssert(context); 
    CGContextConcatCTM(context, CGAffineTransformMakeRotation(0)); 

    CGContextDrawImage(context, CGRectMake(0, -80, 480, 640), image); 

    CGColorSpaceRelease(rgbColorSpace); 
    CGContextRelease(context); 

    CVPixelBufferUnlockBaseAddress(pxbuffer, 0); 

    return pxbuffer; 
} 

ответ

0

Мы обнаружили, причиной этого был код, который мы бежали, который добавлял логотип UIImage к каждому существующему UIImage для видео. Код, добавляющий логотип, фактически заставлял обрезать нижнюю часть исходного изображения.

Непонятно, что причиной написания логотипа была проблема с логотипом, потому что результатом операции с логотипом было изображение с баром белый. Белая полоска смешивалась с фоном, и мы не видели, чтобы изображение обрезалось.

Как только мы удалили код объединения UIImage, мы обнаружили, что наше видео создавалось правильно и без черной полосы в нижней части.

Мы установили код, который объединил два UIImages и правильно написал логотип, и теперь видеоролики производятся без черной полосы.