Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pl.aadamczyk.webcamera;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.BufferedWriter;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.ImageFormat;
- import android.graphics.Rect;
- import android.graphics.YuvImage;
- import android.hardware.Camera;
- import android.hardware.Camera.PreviewCallback;
- import android.hardware.Camera.Size;
- import android.os.Environment;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- class Preview extends SurfaceView implements SurfaceHolder.Callback
- {
- private SurfaceHolder mHolder;
- private Camera mCamera;
- private ServerSocket socket;
- private Socket client;
- private ByteArrayOutputStream mJpegCompressionBuffer = new ByteArrayOutputStream();
- private ObjectOutputStream oos;
- private ObjectInputStream ois;
- private long time;
- private boolean sending;
- public Preview(Context context)
- {
- super(context);
- time = System.currentTimeMillis();
- sending = false;
- // Creating socket
- try
- {
- //socket = new Socket("192.168.1.100", 4567);
- //oos = new ObjectOutputStream(socket.getOutputStream());
- //ois = new ObjectInputStream(socket.getInputStream());
- socket = new ServerSocket(4567);
- System.out.println("Waiting for connection,,"); // showing
- client = socket.accept();
- System.out.println("Connected"); //showing
- ois = new ObjectInputStream(client.getInputStream());
- oos = new ObjectOutputStream(client.getOutputStream());
- System.out.println("Streams opened");
- }
- catch (UnknownHostException e)
- {
- e.printStackTrace();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- // Install a SurfaceHolder.Callback so we get notified when the
- // underlying surface is created and destroyed.
- mHolder = getHolder();
- mHolder.addCallback(this);
- mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- }
- public void surfaceCreated(SurfaceHolder holder)
- {
- // The Surface has been created, acquire the camera and tell it where
- // to draw.
- mCamera = Camera.open();
- try
- {
- mCamera.setPreviewDisplay(holder);
- }
- catch (IOException exception)
- {
- mCamera.release();
- mCamera = null;
- // TODO: add more exception handling logic here
- }
- mCamera.setPreviewCallback(new PreCallback());
- }
- public void surfaceDestroyed(SurfaceHolder holder)
- {
- // Surface will be destroyed when we return, so stop the preview.
- // Because the CameraDevice object is not a shared resource, it's very
- // important to release it when the activity is paused.
- mCamera.stopPreview();
- mCamera.release();
- mCamera = null;
- }
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
- {
- // Now that the size is known, set up the camera parameters and begin
- // the preview.
- Camera.Parameters parameters = mCamera.getParameters();
- parameters.setPreviewSize(w, h);
- mCamera.setParameters(parameters);
- mCamera.startPreview();
- }
- public class PreCallback implements PreviewCallback
- {
- @Override
- public void onPreviewFrame(byte[] data, Camera camera)
- {
- try
- {
- if (!sending)
- {
- sending = true;
- time = System.currentTimeMillis();
- byte[] mJpegData = compressYuvToJpeg(data, camera);
- System.out.println("Compress: " + (System.currentTimeMillis()-time) + "ms");
- time = System.currentTimeMillis();
- System.out.println("Sending object..");
- Packet p = new Packet(mJpegData);
- System.out.println(p);
- System.out.println(oos);
- oos.writeObject(p);
- System.out.println("Transfer: " + (System.currentTimeMillis()-time) + "ms");
- time = System.currentTimeMillis();
- Packet packet;
- while (true)
- {
- packet = (Packet)ois.readObject();
- if (packet.isEOF())
- break;
- }
- System.out.println("Callback: " + (System.currentTimeMillis()-time) + "ms");
- sending = false;
- }
- }
- catch (Exception e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private byte[] compressYuvToJpeg(final byte[] yuvData, Camera camera)
- {
- Camera.Parameters parameters = camera.getParameters();
- Size size = parameters.getPreviewSize();
- mJpegCompressionBuffer.reset();
- YuvImage yuvImage = new YuvImage(yuvData, ImageFormat.NV21, size.width, size.height, null);
- yuvImage.compressToJpeg(new Rect(0, 0, size.width, size.height), 50, mJpegCompressionBuffer);
- return mJpegCompressionBuffer.toByteArray();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement