Fix camera switch bug

The encoder should be available when camera is opened.

Signed-off-by: Leo Ma <begeekmyfriend@gmail.com>
camera2
Leo Ma 9 years ago
parent f6f071a6b6
commit 42fd31eb5c

@ -106,10 +106,8 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
btnSwitchCamera.setOnClickListener(new View.OnClickListener() { btnSwitchCamera.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (Camera.getNumberOfCameras() > 0) {
mPublisher.switchCameraFace((mPublisher.getCamraId() + 1) % Camera.getNumberOfCameras()); mPublisher.switchCameraFace((mPublisher.getCamraId() + 1) % Camera.getNumberOfCameras());
} }
}
}); });
btnRecord.setOnClickListener(new View.OnClickListener() { btnRecord.setOnClickListener(new View.OnClickListener() {

@ -52,6 +52,7 @@ public class SrsEncoder {
private boolean networkWeakTriggered = false; private boolean networkWeakTriggered = false;
private boolean mCameraFaceFront = true; private boolean mCameraFaceFront = true;
private boolean useSoftEncoder = false; private boolean useSoftEncoder = false;
private boolean canSoftEncoder = false;
private long mPresentTimeUs; private long mPresentTimeUs;
@ -113,9 +114,12 @@ public class SrsEncoder {
setEncoderBitrate(vBitrate); setEncoderBitrate(vBitrate);
setEncoderPreset(x264Preset); setEncoderPreset(x264Preset);
if (useSoftEncoder && !openSoftEncoder()) { if (useSoftEncoder) {
canSoftEncode = openSoftEncoder();
if (!canSoftEncode) {
return false; return false;
} }
}
// aencoder pcm to aac raw stream. // aencoder pcm to aac raw stream.
// requires sdk level 16+, Android 4.1, 4.1.1, the JELLY_BEAN // requires sdk level 16+, Android 4.1, 4.1.1, the JELLY_BEAN
@ -170,6 +174,7 @@ public class SrsEncoder {
public void stop() { public void stop() {
if (useSoftEncoder) { if (useSoftEncoder) {
closeSoftEncoder(); closeSoftEncoder();
canSoftEncode = false;
} }
if (aencoder != null) { if (aencoder != null) {
@ -195,11 +200,11 @@ public class SrsEncoder {
mCameraFaceFront = false; mCameraFaceFront = false;
} }
public void swithToSoftEncoder() { public void switchToSoftEncoder() {
useSoftEncoder = true; useSoftEncoder = true;
} }
public void swithToHardEncoder() { public void switchToHardEncoder() {
useSoftEncoder = false; useSoftEncoder = false;
} }
@ -207,6 +212,18 @@ public class SrsEncoder {
return useSoftEncoder; return useSoftEncoder;
} }
public boolean canHardEncode() {
return vencoder != null;
}
public boolean canSoftEncode() {
return canSoftEncode;
}
public boolean isEnabled() {
return canHardEncode() || canSoftEncode();
}
public void setPreviewResolution(int width, int height) { public void setPreviewResolution(int width, int height) {
vPrevWidth = width; vPrevWidth = width;
vPrevHeight = height; vPrevHeight = height;

@ -144,12 +144,12 @@ public class SrsPublisher {
} }
} }
public void swithToSoftEncoder() { public void switchToSoftEncoder() {
mEncoder.swithToSoftEncoder(); mEncoder.switchToSoftEncoder();
} }
public void swithToHardEncoder() { public void switchToHardEncoder() {
mEncoder.swithToHardEncoder(); mEncoder.switchToHardEncoder();
} }
public boolean isSoftEncoder() { public boolean isSoftEncoder() {
@ -207,8 +207,9 @@ public class SrsPublisher {
} }
public void switchCameraFace(int id) { public void switchCameraFace(int id) {
mCameraView.setCameraId(id); if (mEncoder.isEnabled()) {
mCameraView.stopCamera(); mCameraView.stopCamera();
mCameraView.setCameraId(id);
if (id == 0) { if (id == 0) {
mEncoder.setCameraBackFace(); mEncoder.setCameraBackFace();
} else { } else {
@ -216,6 +217,7 @@ public class SrsPublisher {
} }
mCameraView.startCamera(); mCameraView.startCamera();
} }
}
private void startAudio() { private void startAudio() {
if (mic != null) { if (mic != null) {

Loading…
Cancel
Save