2012-01-27 37 views
13

Có cách nào để nhận dấu thời gian khi Khung xem trước máy ảnh Android đã được chụp không?Dấu thời gian xem trước của máy ảnh Android

  1. không có phương pháp Máy ảnh đang trở lại một dấu thời gian
  2. bạn không thể truy cập vào máy ảnh từ mã nguồn gốc
  3. kích thước bộ đệm không phải là tĩnh (phụ thuộc vào kích thước tối thiểu preview mua từ camera - khi nào và nếu phương pháp này là làm việc) và nếu có nhiều khung hình hơn trong hàng đợi thì có các bộ đệm xem trước chúng bị loại bỏ
  4. tốc độ khung hình đã được đặt (một lần nữa, nếu/khi phương pháp đang hoạt động) chỉ là gợi ý cho hệ thống, máy ảnh có thể bỏ qua giá trị. Tương tự với tốc độ khung hình, máy ảnh quay trở lại.

Tôi đang thực hiện xử lý ảnh nặng trong thời gian thực và các lỗi nhỏ khi được thêm vào cùng nhau là một vấn đề thực sự.

+0

Bạn đang đề cập đến gọi lại onPreviewFrame, phải không? Nên có dữ liệu EXIF ​​trong byte [] được truyền, giả sử nó là JPEG ít nhất. – michaelg

+0

Theo như tôi có thể nói, không có exif trong dữ liệu, chỉ cần hình ảnh thô – LambergaR

+0

Mỗi khi thiếu EXIF: Không chắc chắn nếu điều này sẽ làm việc, nhưng bạn đã cố gắng thiết lập rõ ràng định dạng xem trước cho ImageFormat.jpeg? Định dạng NV21 (mặc định) có thể không có bất cứ nơi nào để lưu trữ dữ liệu EXIF. –

Trả lời

4

Cách duy nhất tôi biết để làm điều này là sử dụng SurfaceTexture thay vì gọi lại xem trước.

SurfaceTexture có phương thức getTimestamp() trả về nano giây kể từ thời gian không xác định (nhưng không đổi).

Thật không may, SurfaceTexture là một kết cấu bên ngoài OpenGL, vì vậy nó không phải là dễ dàng để làm việc với các cuộc gọi lại xem trước. Mặt khác, hiệu suất CPU hiệu quả hơn: Gọi lại xem trước chuyển đổi màu và định dạng lại hình ảnh trong phần mềm, trong khi người ta có thể sử dụng các tính năng OpenGL ES2 để xử lý ảnh đáng kể trên GPU.

+0

Sẽ tuyệt vời, nhưng có một vấn đề ... "Vì: API Cấp 11" là điều bạn không vui khi thấy khi bạn đang cố gắng hỗ trợ các nền tảng cũ hơn :) – LambergaR

+0

Than ôi, tôi không biết về nó có thể ở tất cả trước cấp API 11. :( –

Các vấn đề liên quan