2012-07-10 28 views
19

Có ai đã chuyển số này đến android chưa? Thêm khuôn khổ hơn trình đổ bóng. Nội dung như đưa dữ liệu máy ảnh vào openGL. Tôi đã làm việc với nó trên iOS và nó rất nhanh. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.Cổng GPUimage cho android

+2

Trước khi bạn hỏi, tôi không sớm làm việc trên phiên bản Android. Tuy nhiên, một người nào đó đã chuyển những điều cơ bản của nó sang AS3 một vài tháng trước: https://github.com/inspirit/GPUImage. Các shaders fragment có thể đi qua hầu như không bị ảnh hưởng, nhưng phần còn lại sẽ yêu cầu viết lại hoàn toàn cho máy ảnh của Android và hỗ trợ kiến ​​trúc OpenGL ES. Ngoài ra, nó sẽ cần phải đối phó với nhiều loại phần cứng thiết bị rộng hơn cho nền tảng đó, nơi tôi có thể đưa ra các giả định nhất định về các thiết bị iOS và phần cứng PowerVR của chúng. –

+1

Tôi hiện đang thử nghiệm với cổng C++ GPU nhanh chóng có thể tìm thấy trên github tại đây: https://github.com/Dexterp37/GPUImage. Hiện tại, nó chỉ cho phép sử dụng bộ lọc Grayscale bằng cách tải từ một tập tin và hỗ trợ Android (qua NDK) chưa có, nhưng tôi dự định bắt đầu làm việc đó càng sớm càng tốt. – Dexter

+1

Bạn có thể muốn đọc một chút về [Renderscript] (http://developer.android.com/guide/topics/renderscript/compute.html) trước khi bắt đầu. Có bản chất để xử lý hình ảnh trong API. – eternalmatt

Trả lời

8

GPUImage dành cho Android Idea từ: Khung iOS GPUImage

Mục tiêu là phải có một cái gì đó như tương tự như GPUImage càng tốt. Đỉnh và đổ bóng phân đoạn là chính xác như nhau. Bằng cách đó, việc chuyển các bộ lọc từ GPUImage iOS sang Android trở nên dễ dàng hơn.

Liên kết là dưới đây:

This lib is implemented using Android OpenGL ES 2.0

+0

Dường như thư viện android chỉ hoạt động trên hình ảnh (không có video)? –

+0

có, chỉ hình ảnh – vanloi999

+0

Có thư viện nào khác có thể thực hiện cả hình ảnh và video không? –

0

bạn có thể sử dụng Gpuimage cho xem trước video và chụp hình cũng có, chỉ cần biên dịch các tập tin JNI trong thư viện gpuimage với ndk và đưa phương pháp này cho YuvtoRgb chuyển đổi trong GPUImageNativeLibrary. lớp java trong GPUImageLibrary cho android.

public static void YUVtoRBGA(byte[] yuv, int width, int height, int[] rgb) { 



final int frameSize = width * height; 
    int r, g, b, y1192, y, i, uvp, u, v; 
    for (int j = 0, yp = 0; j < height; j++) { 
     uvp = frameSize + (j >> 1) * width; 
     u = 0; 
     v = 0; 
     for (i = 0; i < width; i++, yp++) { 
      y = (0xff & ((int) yuv[yp])) - 16; 
      if (y < 0) 
       y = 0; 
      if ((i & 1) == 0) { 
       v = (0xff & yuv[uvp++]) - 128; 
       u = (0xff & yuv[uvp++]) - 128; 
      } 

      y1192 = 1192 * y; 
      r = (y1192 + 1634 * v); 
      g = (y1192 - 833 * v - 400 * u); 
      b = (y1192 + 2066 * u); 

      // Java's functions are faster then 'IFs' 
      r = Math.max(0, Math.min(r, 262143)); 
      g = Math.max(0, Math.min(g, 262143)); 
      b = Math.max(0, Math.min(b, 262143)); 

      rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) 
        | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff); 
      // rgba, divide 2^10 (>> 10) 
      /* 
      * rgb[yp] = 0xff000000 |((r << 14) & 0xff000000) | ((g << 6) & 
      * 0xff0000) | ((b >> 2) | 0xff00); 
      */ 
     } 
    } 
} 

thay thế phương thức trong GPUImageNativeLibrary.java public public Public Native YUVtoRBGA bằng cách này và bạn đã làm.

+0

Điều này có hiệu quả khi áp dụng bộ lọc cho Video và lưu chúng không? –

+0

vâng tôi đã làm điều đó, chỉ cần thay đổi sau đây trong lớp GPUImageNativeLibrary.java, nhưng nó sẽ tụt hậu cho marshmallow. nếu bạn có thể tiếp tục điều gì đó khác, vui lòng cho tôi biết. –