0

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;
        }
    }
}];

`

4

1 に答える 1

0

Core Video は、すべてのピクセル形式をサポートしているわけではありません。ただし、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);
于 2013-06-21T06:36:14.340 に答える