1
+ package cn .nekocode .camerafilter ;
2
+
3
+ import android .app .Activity ;
4
+ import android .content .res .Resources ;
5
+ import android .graphics .SurfaceTexture ;
6
+ import android .hardware .Camera ;
7
+ import android .opengl .GLES11Ext ;
8
+ import android .opengl .GLES20 ;
9
+ import android .opengl .GLUtils ;
10
+ import android .util .Log ;
11
+ import android .util .Pair ;
12
+ import android .view .TextureView ;
13
+
14
+ import java .io .ByteArrayOutputStream ;
15
+ import java .io .IOException ;
16
+ import java .io .InputStream ;
17
+ import java .nio .ByteBuffer ;
18
+ import java .nio .ByteOrder ;
19
+ import java .nio .FloatBuffer ;
20
+
21
+ import javax .microedition .khronos .egl .EGL10 ;
22
+ import javax .microedition .khronos .egl .EGLConfig ;
23
+ import javax .microedition .khronos .egl .EGLContext ;
24
+ import javax .microedition .khronos .egl .EGLDisplay ;
25
+ import javax .microedition .khronos .egl .EGLSurface ;
26
+ import javax .microedition .khronos .opengles .GL10 ;
27
+ import javax .microedition .khronos .opengles .GL11 ;
28
+
29
+ /**
30
+ * Created by nekocode on 16/8/5.
31
+ */
32
+ public class CameraSurfaceTexutreListener extends Thread implements TextureView .SurfaceTextureListener {
33
+ private Camera camera ;
34
+ private Activity activity ;
35
+ private RenderThread renderThread ;
36
+
37
+ public CameraSurfaceTexutreListener (Activity activity ) {
38
+ this .activity = activity ;
39
+ }
40
+
41
+ @ Override
42
+ public void onSurfaceTextureUpdated (SurfaceTexture surface ) {
43
+ }
44
+
45
+ @ Override
46
+ public void onSurfaceTextureSizeChanged (SurfaceTexture surface , int width , int height ) {
47
+ }
48
+
49
+ @ Override
50
+ public boolean onSurfaceTextureDestroyed (SurfaceTexture surface ) {
51
+ camera .stopPreview ();
52
+ camera .release ();
53
+ renderThread .release ();
54
+
55
+ return true ;
56
+ }
57
+
58
+ @ Override
59
+ public void onSurfaceTextureAvailable (SurfaceTexture surface , int width , int height ) {
60
+ // Open camera
61
+ Pair <Camera .CameraInfo , Integer > backCamera = getBackCamera ();
62
+ final int backCameraId = backCamera .second ;
63
+ camera = Camera .open (backCameraId );
64
+
65
+ // Start rendering
66
+ renderThread = new RenderThread (activity , surface , camera );
67
+ renderThread .start ();
68
+ }
69
+
70
+ private Pair <Camera .CameraInfo , Integer > getBackCamera () {
71
+ Camera .CameraInfo cameraInfo = new Camera .CameraInfo ();
72
+ final int numberOfCameras = Camera .getNumberOfCameras ();
73
+
74
+ for (int i = 0 ; i < numberOfCameras ; ++i ) {
75
+ Camera .getCameraInfo (i , cameraInfo );
76
+ if (cameraInfo .facing == Camera .CameraInfo .CAMERA_FACING_BACK ) {
77
+ return new Pair <>(cameraInfo , i );
78
+ }
79
+ }
80
+ return null ;
81
+ }
82
+ }
0 commit comments