Camera2 修改旋转角度

master
liuguijing 7 months ago
parent d5fcee1731
commit 8e026beec7

@ -53,7 +53,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
private SharedPreferences sp; private SharedPreferences sp;
// private String rtmpUrl = "rtmp://192.168.50.250/live/0"; // private String rtmpUrl = "rtmp://192.168.50.250/live/0";
private String rtmpUrl = "rtmp://61.169.135.146/live/abcd"; private String rtmpUrl = "rtmp://61.169.135.146/live/0";
private String recPath = Environment.getExternalStorageDirectory().getPath() + "/test.mp4"; private String recPath = Environment.getExternalStorageDirectory().getPath() + "/test.mp4";
private SrsPublisher mPublisher; private SrsPublisher mPublisher;
@ -123,11 +123,11 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
private void init() { private void init() {
// restore data. // restore data.
sp = getSharedPreferences("MpLive", MODE_PRIVATE); sp = getSharedPreferences("MpLive", MODE_PRIVATE);
rtmpUrl = sp.getString("rtmpUrl", rtmpUrl); // rtmpUrl = sp.getString("rtmpUrl", rtmpUrl);
// initialize url. // initialize url.
final EditText efu = (EditText) findViewById(R.id.url); final EditText efu = (EditText) findViewById(R.id.url);
efu.setText(rtmpUrl);
btnPublish = (Button) findViewById(R.id.publish); btnPublish = (Button) findViewById(R.id.publish);
btnSwitchCamera = (Button) findViewById(R.id.swCam); btnSwitchCamera = (Button) findViewById(R.id.swCam);
@ -141,9 +141,9 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
if (!TextUtils.isEmpty(url)) { if (!TextUtils.isEmpty(url)) {
rtmpUrl = url; rtmpUrl = url;
} }
efu.setText(rtmpUrl);
mCameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera); mCameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera);
int rotation = intent.getIntExtra("rotation", -1); final int rotation = intent.getIntExtra("rotation", -1);
if (rotation != -1) { if (rotation != -1) {
//设置图像显示方向 //设置图像显示方向
mCameraView.setPreviewOrientation(rotation); mCameraView.setPreviewOrientation(rotation);
@ -164,7 +164,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
mPublisher.setVideoHDMode(); mPublisher.setVideoHDMode();
cameraId = intent.getIntExtra("cameraId", 0); cameraId = intent.getIntExtra("cameraId", 1);
// mPublisher.startCamera(); // mPublisher.startCamera();
mCameraView.setCameraCallbacksHandler(new SrsCameraView.CameraCallbacksHandler() { mCameraView.setCameraCallbacksHandler(new SrsCameraView.CameraCallbacksHandler() {
@ -174,15 +174,17 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
} }
}); });
int autoStart = intent.getIntExtra("autoStart", 0); final int autoStart = intent.getIntExtra("autoStart", 1);
if (autoStart != 0) { if (autoStart != 0) {
mPublisher.switchCameraFace(cameraId); mPublisher.switchCameraFace(cameraId,rotation);
mHandler.postDelayed(new Runnable() { mHandler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
rtmpUrl = "rtmp://61.169.135.146/live/0";
SharedPreferences.Editor editor = sp.edit(); SharedPreferences.Editor editor = sp.edit();
editor.putString("rtmpUrl", rtmpUrl); editor.putString("rtmpUrl", rtmpUrl);
editor.apply(); editor.apply();
efu.setText(rtmpUrl + " cameraid=" + cameraId + " auto=" + autoStart);
mPublisher.startPublish(rtmpUrl); mPublisher.startPublish(rtmpUrl);
if (btnSwitchEncoder.getText().toString().contentEquals("soft encoder")) { if (btnSwitchEncoder.getText().toString().contentEquals("soft encoder")) {
Toast.makeText(getApplicationContext(), "Use hard encoder", Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), "Use hard encoder", Toast.LENGTH_SHORT).show();
@ -195,7 +197,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
} }
}, 500); }, 500);
} else { } else {
mPublisher.switchCameraFace(cameraId); mPublisher.switchCameraFace(cameraId,rotation);
} }
int autoClose = intent.getIntExtra("autoClose", 0); int autoClose = intent.getIntExtra("autoClose", 0);
@ -224,7 +226,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
efu.setText(rtmpUrl); efu.setText(rtmpUrl);
mPublisher.startPublish(rtmpUrl); mPublisher.startPublish(rtmpUrl);
// mPublisher.startCamera(); // mPublisher.startCamera();
mPublisher.switchCameraFace(cameraId); mPublisher.switchCameraFace(cameraId,rotation);
if (btnSwitchEncoder.getText().toString().contentEquals("soft encoder")) { if (btnSwitchEncoder.getText().toString().contentEquals("soft encoder")) {
Toast.makeText(getApplicationContext(), "Use hard encoder", Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), "Use hard encoder", Toast.LENGTH_SHORT).show();
@ -263,7 +265,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL
int size = cameraData.size(); int size = cameraData.size();
if (size > 0) { if (size > 0) {
int i = (++cameraId) % size; int i = (++cameraId) % size;
mPublisher.switchCameraFace(i); mPublisher.switchCameraFace(cameraId,rotation);
} }
} }
}); });

@ -62,7 +62,6 @@ public class GPUImageFilter {
private int[] mGLFboTexId; private int[] mGLFboTexId;
private IntBuffer mGLFboBuffer; private IntBuffer mGLFboBuffer;
private float[] TEX_COORD; private float[] TEX_COORD;
private int curCameraid;
public GPUImageFilter() { public GPUImageFilter() {
this(MagicFilterType.NONE); this(MagicFilterType.NONE);
@ -85,7 +84,6 @@ public class GPUImageFilter {
public void init(Context context) { public void init(Context context) {
mContext = context; mContext = context;
// curCameraid = cameraid;
onInit(); onInit();
onInitialized(); onInitialized();
} }
@ -137,7 +135,6 @@ public class GPUImageFilter {
-1.0f, 1.0f, // Top left. -1.0f, 1.0f, // Top left.
1.0f, 1.0f, // Top right. 1.0f, 1.0f, // Top right.
}; };
setOrtation(curCameraid);
mGLCubeBuffer = ByteBuffer.allocateDirect(VEX_CUBE.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); mGLCubeBuffer = ByteBuffer.allocateDirect(VEX_CUBE.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
mGLCubeBuffer.put(VEX_CUBE).position(0); mGLCubeBuffer.put(VEX_CUBE).position(0);
@ -416,7 +413,7 @@ public class GPUImageFilter {
} }
//设置纹理旋转角度 //设置纹理旋转角度
public void setOrtation(int i) { public void setOrtation(int i, int rotation) {
//纹理坐标 //纹理坐标
TEX_COORD = new float[]{0.0f, 0.0f, // Bottom left. TEX_COORD = new float[]{0.0f, 0.0f, // Bottom left.
1.0f, 0.0f, // Bottom right. 1.0f, 0.0f, // Bottom right.
@ -449,14 +446,58 @@ public class GPUImageFilter {
0.0f, 0.0f, // Top left. 0.0f, 0.0f, // Top left.
0.0f, 1.0f // Top right. 0.0f, 1.0f // Top right.
}; };
if (i == 0) { if (rotation == -1) {
TEX_COORD = TEX_COORD0; if (i == 0) {
} else if (i == 1) { TEX_COORD = TEX_COORD0;
TEX_COORD = TEX_COORD_90; } else if (i == 1) {
} else if (i == 2) { TEX_COORD = TEX_COORD_90;
TEX_COORD = TEX_COORD_180; } else if (i == 2) {
} else if (i == 3) { TEX_COORD = TEX_COORD_180;
TEX_COORD = TEX_COORD_270; } else if (i == 3) {
TEX_COORD = TEX_COORD_270;
}
} else {
if (rotation == 0) {
if (i == 0) {
TEX_COORD = TEX_COORD0;
} else if (i == 1) {
TEX_COORD = TEX_COORD_90;
} else if (i == 2) {
TEX_COORD = TEX_COORD_180;
} else if (i == 3) {
TEX_COORD = TEX_COORD_270;
}
} else if (rotation == 1) {
if (i == 0) {
TEX_COORD = TEX_COORD_90;
} else if (i == 1) {
TEX_COORD = TEX_COORD_180;
} else if (i == 2) {
TEX_COORD = TEX_COORD_270;
} else if (i == 3) {
TEX_COORD = TEX_COORD0;
}
} else if (i == 2) {
if (i == 0) {
TEX_COORD = TEX_COORD_180;
} else if (i == 1) {
TEX_COORD = TEX_COORD_270;
} else if (i == 2) {
TEX_COORD = TEX_COORD0;
} else if (i == 3) {
TEX_COORD = TEX_COORD_90;
}
} else if (i == 3) {
if (i == 0) {
TEX_COORD = TEX_COORD_270;
} else if (i == 1) {
TEX_COORD = TEX_COORD0;
} else if (i == 2) {
TEX_COORD = TEX_COORD_90;
} else if (i == 3) {
TEX_COORD = TEX_COORD_180;
}
}
} }

@ -101,14 +101,13 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render
int cameraid = 0; int cameraid = 0;
GLES20.glDisable(GL10.GL_DITHER); GLES20.glDisable(GL10.GL_DITHER);
GLES20.glClearColor(0, 0, 0, 0); GLES20.glClearColor(0, 0, 0, 0);
String id = curItem.getId(); // String id = curItem.getId();
// try {
try { // cameraid = Integer.parseInt(id);
cameraid = Integer.parseInt(id); // } catch (Exception e) {
} catch (Exception e) { // cameraid = 0;
cameraid = 0; // }
} // magicFilter.setOrtation(cameraid,rotation);
magicFilter.setOrtation(cameraid);
magicFilter.init(getContext().getApplicationContext()); magicFilter.init(getContext().getApplicationContext());
magicFilter.onInputSizeChanged(mPreviewWidth, mPreviewHeight); magicFilter.onInputSizeChanged(mPreviewWidth, mPreviewHeight);
@ -523,8 +522,8 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render
return closestRange; return closestRange;
} }
public void setOrtation(int cameraid) { public void setOrtation(int cameraid,int rotation) {
magicFilter.setOrtation(cameraid); magicFilter.setOrtation(cameraid,rotation);
} }
public void stopTorch() { public void stopTorch() {

@ -309,16 +309,17 @@ public class SrsPublisher {
return mCameraView.setFilter(type); return mCameraView.setFilter(type);
} }
public void switchCameraFace(int id) { public void switchCameraFace(int id, int rotation) {
List<CameraItemData> cameraData = mCameraView.getCameraData(); List<CameraItemData> cameraData = mCameraView.getCameraData();
CameraItemData item = cameraData.get(id); CameraItemData item = cameraData.get(id);
int cameraid = 0; int cameraid = 0;
try { try {
cameraid = Integer.parseInt( item.getId()); cameraid = Integer.parseInt(item.getId());
} catch (Exception e) { } catch (Exception e) {
cameraid = 0; cameraid = 0;
} }
mCameraView.setOrtation(cameraid);
mCameraView.setOrtation(cameraid, rotation);
if (mEncoder != null && mEncoder.isEnabled()) { if (mEncoder != null && mEncoder.isEnabled()) {
mEncoder.pause(); mEncoder.pause();

Loading…
Cancel
Save