如何在AVAssetReaderTrackOutput中更改位颜色?

时间:2013-06-21 05:18:16

标签: ios video avfoundation

我用来读取AVAssetReaderTrackOutput视频。

设置“kCVPixelBufferPixelFormatTypeKey” - “kCVPixelFormatType_32BGRA”工作!

但我需要一个16位视频。

如果设置设置值“kCVPixelFormatType_16 ....”不起作用。 [asset_reader_output copyNextSampleBuffer] - 总是nil =(

为什么会这样?

如何更改位颜色?

UPD: `代码:

[videoWriterInput requestMediaDataWhenReadyOnQueue:queueVideo usingBlock:^
{
    while([videoWriterInput isReadyForMoreMediaData])
    {
        CMSampleBufferRef sampleBuffer=[video_asset_reader_output copyNextSampleBuffer];
        if(sampleBuffer)
        {
            NSLog(@"write video");
            [videoWriterInput appendSampleBuffer:sampleBuffer];
            CFRelease(sampleBuffer);
        } else
        {
            [videoWriterInput markAsFinished];
            dispatch_release(queueVideo);
            videoFinished=YES;
            break;
        }
    }
}];

`

1 个答案:

答案 0 :(得分:0)

核心视频不支持所有像素格式。 BGRA保证可以工作。您必须执行自己的转换。你在使用什么缓冲区?

更新:要访问像素,请使用以下内容:

CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);

void* bufferAddress = CVPixelBufferGetBaseAddress(pixelBuffer);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);

// Read / modify the pixel data with bufferAddress, height & bytesPerRow
// For BGRA format, it's 4-byte per pixel in that order

CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);