public class CameraDemoActivity extends AppCompatActivity {
private DeviceProxyContext proxyContext;
private CameraProxyManager cameraProxyManager;
private static final int WIDTH = 1280;
private static final int HEIGHT = 720;
private static final int FORMAT = VideoFrameFormat.I420;
private VideoFrameConfig videoFrameConfig = new VideoFrameConfig(WIDTH, HEIGHT, FORMAT, 0, 0);
private byte[] demoBuffer;
private CameraProxyManager.CameraCallback cameraCallback = new CameraProxyManager.CameraCallback() {
public void onStart(int id) {
handler.post(renderThread);
public void onResume(int id) {
public void onPause(int id) {
public void onStop(int id) {
handler.removeCallbacks(renderThread);
public void onRequest(int id) {
private Handler handler;
private Runnable renderThread = new Runnable() {
if(cameraProxyManager != null) {
Arrays.fill(demoBuffer, (byte) 0x00);
cameraProxyManager.putVideoFrame(demoBuffer, demoBuffer.length, videoFrameConfig);
handler.postDelayed(this, 33);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera_demo);
handler = new Handler(Looper.myLooper());
proxyContext = DeviceProxyContext.getInstance(this);
} catch (InterruptedException e) {
throw new RuntimeException(e);
if(proxyContext != null){
cameraProxyManager = proxyContext.getCameraProxyManager();
if(cameraProxyManager != null){
cameraProxyManager.unregisterCallback(cameraCallback);
boolean ret = cameraProxyManager.registerCallback(cameraCallback);
demoBuffer = new byte[videoFrameConfig.width * videoFrameConfig.height * 3 / 2];