2012-03-28 27 views
20

Tôi muốn xử lý hình ảnh trên GPU trên Android.Sử dụng SurfaceTexture kết hợp với RenderScript

Trong thiết lập hiện tại, tôi sử dụng SurfaceTexture để chụp khung hình từ luồng hình ảnh camera dưới dạng kết cấu OpenGL ES. Đây là một cách hiệu quả để có được dòng máy ảnh accesible trong shaders của tôi. (http://developer.android.com/reference/android/graphics/SurfaceTexture.html)

Bây giờ tôi muốn bắt đầu sử dụng API RenderScript mới thay vì sử dụng trực tiếp OenGL ES. (http://developer.android.com/guide/topics/renderscript/index.html)

Nhưng để tạo SurfaceTexture, tôi cần chuyển ID kết cấu openGl cho hàm tạo. Thật không may là ID kết cấu không có sẵn (RenderScript sử dụng lớp Phân bổ để tải họa tiết, không hiển thị ID kết cấu). Vì vậy, tôi không thể tạo SurfaceTexture khi sử dụng RenderScript.

Tôi đã đọc tất cả tài liệu về chữ viết (vẫn còn khá thưa thớt) và xem các mẫu, nhưng chúng không có thông tin về chủ đề.

Vì vậy, câu hỏi của tôi là: Có thể sử dụng SurfaceTexture kết hợp với RenderScript hoặc có cách nào khác hiệu quả để sử dụng luồng máy ảnh trực tiếp trong tập lệnh đồ họa RenderScript không?

Trả lời

1

Nếu tôi hiểu chính xác, bạn đã sử dụng SurfaceTexture. Sau đó, bạn có thể đăng ký cuộc gọi lại với setOnFrameAvailableListener.

tôi thấy hai giải pháp:

  1. Thực hiện bạn sở hữu RSTextureView, mà kế thừa từ SurfaceTexture.OnFrameAvailableListener. Đăng ký chế độ xem của bạn dưới dạng gọi lại SurfaceTexture. Mỗi lần xem bề mặt của bạn được cập nhật bằng luồng máy ảnh, RSTextureView của bạn sẽ được thông báo và bạn có thể xử lý nó theo cách bạn muốn.

  2. Một giải pháp khác là triển khai RenderScriptGL của riêng bạn (vẫn được kế thừa từ SurfaceTexture.OnFrameAvailableListener) và gọi setSurfaceTexture khi gọi lại được gọi.

Bạn sẽ có thể kết hợp với một RenderScriptSurfaceTexture với ít nhất một trong hai giải pháp này.

+0

Tôi đánh giá cao câu trả lời, nhưng kể từ khi đăng câu hỏi này, tôi quyết định sử dụng GLSL cho ứng dụng của mình. Điều này là bởi vì tôi đã không tìm thấy một cách dễ dàng để làm cho nó hoạt động, và gần đây hơn vì phần đồ họa renderscript sẽ được khấu hao trong 4,1 (Jelly Bean). Vì vậy tôi đã không kiểm tra aswer này bản thân mình. Vì vậy, đối với những người theo khác của chủ đề này: Tôi chấp nhận câu trả lời này vì nó seams hợp lý, nhưng tôi đã không thực hiện. – Arjan

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