-
Notifications
You must be signed in to change notification settings - Fork 196
/
InstantVideoCamera.java
123 lines (102 loc) · 3.17 KB
/
InstantVideoCamera.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
*
* *
* * * Copyright (C) 2017 ChillingVan
* * *
* * * Licensed under the Apache License, Version 2.0 (the "License");
* * * you may not use this file except in compliance with the License.
* * * You may obtain a copy of the License at
* * *
* * * http://www.apache.org/licenses/LICENSE-2.0
* * *
* * * Unless required by applicable law or agreed to in writing, software
* * * distributed under the License is distributed on an "AS IS" BASIS,
* * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * * See the License for the specific language governing permissions and
* * * limitations under the License.
* *
*
*/
package com.chillingvan.lib.camera;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import java.io.IOException;
/**
* Created by Chilling on 2016/12/10.
*/
public class InstantVideoCamera implements CameraInterface {
private Camera camera;
private boolean isOpened;
private int currentCamera;
private int previewWidth;
private int previewHeight;
@Override
public void setPreview(SurfaceTexture surfaceTexture) {
try {
camera.setPreviewTexture(surfaceTexture);
} catch (IOException e) {
e.printStackTrace();
}
}
public InstantVideoCamera(int currentCamera, int previewWidth, int previewHeight) {
this.currentCamera = currentCamera;
this.previewWidth = previewWidth;
this.previewHeight = previewHeight;
}
@Override
public void openCamera() {
Camera.CameraInfo info = new Camera.CameraInfo();
// Try to find a front-facing camera (e.g. for videoconferencing).
int numCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numCameras; i++) {
Camera.getCameraInfo(i, info);
if (info.facing == currentCamera) {
camera = Camera.open(i);
break;
}
}
if (camera == null) {
camera = Camera.open();
}
Camera.Parameters parms = camera.getParameters();
CameraUtils.choosePreviewSize(parms, previewWidth, previewHeight);
isOpened = true;
}
@Override
public void switchCamera() {
switchCamera(previewWidth, previewHeight);
}
@Override
public void switchCamera(int previewWidth, int previewHeight) {
this.previewWidth = previewWidth;
this.previewHeight = previewHeight;
release();
currentCamera = currentCamera == Camera.CameraInfo.CAMERA_FACING_BACK ? Camera.CameraInfo.CAMERA_FACING_FRONT : Camera.CameraInfo.CAMERA_FACING_BACK;
openCamera();
}
@Override
public boolean isOpened() {
return isOpened;
}
@Override
public void startPreview() {
camera.startPreview();
}
@Override
public void stopPreview() {
camera.stopPreview();
}
@Override
public Camera getCamera() {
return camera;
}
@Override
public void release() {
if (isOpened) {
camera.stopPreview();
camera.release();
camera = null;
isOpened = false;
}
}
}