Tôi đang sử dụng glReadPixels
để đọc dữ liệu vào CVPixelBufferRef
. Tôi sử dụng số CVPixelBufferRef
làm đầu vào thành AVAssetWriter
. Rất tiếc, các định dạng pixel dường như không khớp.Định dạng pixel, CVPixelBufferRefs và glReadPixels
Tôi nghĩ glReadPixels
đang trở lại dữ liệu pixel trong RGBA định dạng trong khi AVAssetWriter
muốn dữ liệu pixel trong định dạng ARGB. Cách tốt nhất để chuyển đổi RGBA thành ARGB là gì?
Đây là những gì tôi đã cố gắng cho đến nay:
- thao tác bit dọc theo dòng của ARGB = (rgba >> 8) | (Rgba < < 24)
- sử dụng một
CGImageRef
như một bước trung gian
Các thao tác bit đã không làm việc vì CVPixelBufferRef dường như không hỗ trợ subscript. Bước trung gian CGImageRef
hoạt động ... nhưng tôi không muốn có thêm 50 dòng mã có khả năng là một lần truy cập hiệu suất.
Bạn nhận được CVPixelBufferRef của mình như thế nào?Bạn đang gọi CVPixelBufferCreate? Nếu vậy, bạn đang chuyển qua tham số pixelFormatType như thế nào? Bạn đang chuyển định dạng nào tới glReadPixels? –
Tôi đang chuyển 'kCVPixelFormatType_32ARGB' thành' CVPixelBufferCreate'. Tôi chuyển 'GL_RBGA' thành' glReadPixels'. Tôi đã thử đi qua một định dạng RBGA để 'CVPixelBufferCreate' nhưng nó không hoạt động (hoặc màu xấu hoặc ứng dụng bị rơi). – MrDatabase