У меня есть этот код:
package com.example.socket;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
import android.graphics.YuvImage;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PreviewCallback;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class CameraService extends Thread {
private Camera mCamera;
//private Parameters parameters;
private int MAX_BUFFER = 90;
private byte[] lastFrame;
private volatile LinkedList<byte[]> mQueue = new LinkedList<byte[]>();
private volatile ArrayList<ServerThread> sub = new ArrayList<ServerThread>();
public byte[] buffer;//for previewcallback
public void run() {
iniciar();
onRun();
}
public void iniciar() {
System.out.println("Creacion de la camara");
mCamera = Camera.open();
SurfaceTexture surfaceTexture = new SurfaceTexture(0);
try {
lastFrame = previewBuffer();
mCamera.setPreviewTexture(surfaceTexture);
//parameters = mCamera.getParameters();
//parameters.set("jpeg-quality", 70);
//parameters.setPictureFormat(ImageFormat.JPEG);
//parameters.setPreviewFpsRange(12000, 15000);
//mCamera.setParameters(parameters);
for (int i = 0; i < 3; i++) {
mCamera.addCallbackBuffer(previewBuffer());
}
} catch (Exception e) {
System.out.println("Error en la creacion de la camara");
}
}
private Camera.PreviewCallback mePreviewCallbackWithBuffer = new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
System.out.println("Function onPreviewFrame iniciado");
mCamera.addCallbackBuffer(data);
}
};
public void onRun() {
mCamera.setPreviewCallbackWithBuffer(mePreviewCallbackWithBuffer);
mCamera.startPreview();
}
public void onPause() {
if (mCamera != null) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
}
}
public void add_sub(ServerThread agregar) {
synchronized (sub) {
System.out.println("Se agrego");
sub.add(agregar);
System.out.println(sub.size());
}
}
private byte[] previewBuffer() {
int bufferSize;
byte buffer[];
int bitsPerPixel;
Camera.Parameters mParams = mCamera.getParameters();
Camera.Size mSize = mParams.getPreviewSize();
int mImageFormat = mParams.getPreviewFormat();
bitsPerPixel = ImageFormat.getBitsPerPixel(mImageFormat);
bufferSize = (int) (mSize.height * mSize.width * ((bitsPerPixel / (float) 8)));
buffer = new byte[bufferSize];
return buffer;
}
}
Но когда я пытаюсь изменить эту функцию: enter code here
private Camera.PreviewCallback mePreviewCallbackWithBuffer = new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
System.out.println("Function onPreviewFrame iniciado");
mCamera.addCallbackBuffer(data);
}
};
Обратный вызов PreviewCallback With Buffer останавливается, когда я пытаюсь скопироватьмассив в другой массив или отправить или скопировать, если я использую массив изображений, код остановки. Я понятия не имею, почему остановлен !!!
Код в основном пытается получить кадры камеры и затем отправить их через tcp sokects клиенту Python. Часть сокетов не потому, что я думаю, что это не имеет отношения.