Đây là một biến thể về một câu hỏi thường được hỏi nhưng tôi không thấy tình huống chính xác này, vì vậy tôi sẽ ném nó ra khỏi đó.Làm thế nào để thay đổi hướng của bộ đệm gọi lại xem trước của máy ảnh?
Tôi đã thiết lập gọi lại onPreviewFrame. Điều này nhận được một byte [] với dữ liệu NV21 trong đó. Chúng tôi mã hóa nó và gửi nó ra dưới dạng luồng video. Ở phía bên kia, chúng tôi thấy video bị lệch, 90 hoặc 270 độ, tùy thuộc vào điện thoại.
Câu hỏi là, cách xoay dữ liệu, không chỉ hình ảnh xem trước? Camera.Parameters.setRotation chỉ ảnh hưởng đến việc chụp ảnh chứ không ảnh hưởng đến video. Camera.setDisplayOrientation đặc biệt cho biết nó chỉ ảnh hưởng đến bản xem trước hiển thị, không ảnh hưởng đến khung byte:
Điều này không ảnh hưởng đến thứ tự mảng byte được truyền trong onPreviewFrame (byte [], Camera), ảnh JPEG hoặc video đã ghi.
Vậy có cách nào, ở bất kỳ cấp API nào, để thay đổi hướng của mảng byte không? Không có điều đó, bạn thậm chí có thể xoay NV21 (YVU) định dạng mà điều này đi vào, hoặc tôi cần phải RGB nó đầu tiên?
Có lẽ tôi là thiếu một cái gì đó, nhưng không phải là nó là một nhiệm vụ phía trước tương đối thẳng của chạy dữ liệu thông qua một ma trận để xoay nó theo bất cứ cách nào bạn muốn? Có lẽ bạn biết chiều rộng và chiều cao của bản xem trước của bạn, vì vậy, bạn sẽ có thể chỉ cần sao chép các byte vào một mảng byte mới có chúng được sắp xếp theo hướng mong muốn, không? Tôi đã không làm điều này, vì vậy, có lẽ tôi là woefully tắt cơ sở. –
Không, điều đó sẽ làm điều đó, nhưng để làm điều này cho mỗi khung hình, ngay cả nói 5ps, có vẻ như rất nhiều chế biến. Nhưng tôi nghĩ đó có thể là cách duy nhất. – Hieronymus