2012-07-10 2 views
19

아무도 이것을 android으로 이식 했습니까? 셰이더보다 더 많은 프레임 워크 . 카메라 데이터를 openGL에 가져 오는 것과 같습니다. 나는 iOS과 함께 작업했으며 매우 빠릅니다. 어떤 도움이라도 대단히 감사합니다. 안드로이드 아이디어에서 대한안드로이드 용 GPUimage 포트

+2

물어보기 전에 나는 곧 Android 버전으로 작업하지 않을 것입니다. 그러나 누군가가 몇 달 전에 AS3에 기본 정보를 제공했습니다 : https://github.com/inspirit/GPUImage. 프래그먼트 쉐이더는 거의 영향을받지 않지만, 나머지는 안드로이드 카메라와 OpenGL ES 아키텍처를 지원하는 완전한 재 작성이 필요합니다. 또한 iOS 장치와 PowerVR 하드웨어에 대해 특정 가정을 할 수있는 해당 플랫폼 용 장치 하드웨어를 훨씬 더 다양하게 다룰 필요가 있습니다. –

+1

저는 현재 github에서 찾을 수있는 GPUImage의 빠른 C++ 포트 (https://github.com/Dexterp37/GPUImage)를 실험하고 있습니다. 현재 파일에서로드하여 그레이 스케일 필터를 사용할 수 있으며 Android (NDK를 통한) 지원은 아직 완료되지 않았지만 가능한 한 빨리 작업을 시작할 계획입니다. – Dexter

+1

시작하기 전에 [Renderscript] (http://developer.android.com/guide/topics/renderscript/compute.html)로 약간 읽어보십시오. API에는 이미지 처리를위한 내장 기능이 있습니다. – eternalmatt

답변

8

GPUImage : 아이폰 OS GPUImage 프레임 워크

목표는 가능한 한 GPUImage에 유사한 일을하는 것입니다. 꼭지점 및 조각 쉐이더는 완전히 동일합니다. 이렇게하면 GPUImage iOS에서 Android로 필터를 쉽게 이식 할 수 있습니다.

링크는 다음과 같습니다 :

This lib is implemented using Android OpenGL ES 2.0

+0

안드로이드 라이브러리는 이미지 (비디오 없음)에서만 작동하는 것으로 보입니까? –

+0

예, 이미지 만 – vanloi999

+0

이미지 및 비디오를 모두 처리 할 수있는 다른 라이브러리가 있습니까? –

0

당신이 비디오 미리보기 Gpuimage을 사용하고 또한 사진을 찍을 단지 NDK와 gpuimage 라이브러리의 JNI 파일을 컴파일하고 YuvtoRgb이 GPUImageNativeLibrary로 변환하는 방법을 넣을 수 있습니다. android 용 GPUImageLibrary의 자바 클래스입니다.

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); 
      */ 
     } 
    } 
} 

이 함께 GPUImageNativeLibrary.java 클래스의 공용 정적 기본 YUVtoRBGA의 방법을 대체, 당신은 했어요.

+0

비디오에 필터를 적용하고 저장하려면이 기능이 작동합니까? –

+0

예, GPUImageNativeLibrary.java 클래스에서 다음과 같이 변경했으나 marshmallow에 비해 지연됩니다. 다른 것을 더 할 수 있으면 알려주세요. –