Advertisement
Visher

Untitled

Apr 26th, 2012
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.61 KB | None | 0 0
  1. package pl.aadamczyk.webcamera;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.BufferedWriter;
  6. import java.io.ByteArrayOutputStream;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileOutputStream;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.io.ObjectInputStream;
  13. import java.io.ObjectOutputStream;
  14. import java.io.OutputStream;
  15. import java.io.OutputStreamWriter;
  16. import java.net.ServerSocket;
  17. import java.net.Socket;
  18. import java.net.UnknownHostException;
  19.  
  20. import android.content.Context;
  21. import android.graphics.Bitmap;
  22. import android.graphics.BitmapFactory;
  23. import android.graphics.ImageFormat;
  24. import android.graphics.Rect;
  25. import android.graphics.YuvImage;
  26. import android.hardware.Camera;
  27. import android.hardware.Camera.PreviewCallback;
  28. import android.hardware.Camera.Size;
  29. import android.os.Environment;
  30. import android.view.SurfaceHolder;
  31. import android.view.SurfaceView;
  32.  
  33. class Preview extends SurfaceView implements SurfaceHolder.Callback
  34. {
  35.     private SurfaceHolder mHolder;
  36.     private Camera mCamera;
  37.     private ServerSocket socket;
  38.     private Socket client;
  39.     private ByteArrayOutputStream mJpegCompressionBuffer = new ByteArrayOutputStream();
  40.     private ObjectOutputStream oos;
  41.     private ObjectInputStream ois;
  42.     private long time;
  43.     private boolean sending;
  44.  
  45.     public Preview(Context context)
  46.     {
  47.         super(context);
  48.         time = System.currentTimeMillis();
  49.         sending = false;
  50.        
  51.         // Creating socket
  52.         try
  53.         {
  54.             //socket = new Socket("192.168.1.100", 4567);
  55.             //oos = new ObjectOutputStream(socket.getOutputStream());
  56.             //ois = new ObjectInputStream(socket.getInputStream());
  57.            
  58.             socket = new ServerSocket(4567);
  59.             System.out.println("Waiting for connection,,"); // showing
  60.             client = socket.accept();
  61.             System.out.println("Connected"); //showing
  62.             ois = new ObjectInputStream(client.getInputStream());
  63.             oos = new ObjectOutputStream(client.getOutputStream());
  64.            
  65.             System.out.println("Streams opened");
  66.         }
  67.         catch (UnknownHostException e)
  68.         {
  69.             e.printStackTrace();
  70.         }
  71.         catch (IOException e)
  72.         {
  73.             e.printStackTrace();
  74.         }
  75.        
  76.         // Install a SurfaceHolder.Callback so we get notified when the
  77.         // underlying surface is created and destroyed.
  78.         mHolder = getHolder();
  79.         mHolder.addCallback(this);
  80.         mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  81.     }
  82.  
  83.     public void surfaceCreated(SurfaceHolder holder)
  84.     {
  85.         // The Surface has been created, acquire the camera and tell it where
  86.         // to draw.
  87.         mCamera = Camera.open();
  88.         try
  89.         {
  90.            mCamera.setPreviewDisplay(holder);
  91.         }
  92.         catch (IOException exception)
  93.         {
  94.             mCamera.release();
  95.             mCamera = null;
  96.             // TODO: add more exception handling logic here
  97.         }
  98.        
  99.         mCamera.setPreviewCallback(new PreCallback());
  100.     }
  101.  
  102.     public void surfaceDestroyed(SurfaceHolder holder)
  103.     {
  104.         // Surface will be destroyed when we return, so stop the preview.
  105.         // Because the CameraDevice object is not a shared resource, it's very
  106.         // important to release it when the activity is paused.
  107.         mCamera.stopPreview();
  108.         mCamera.release();
  109.         mCamera = null;
  110.     }
  111.  
  112.     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
  113.     {
  114.         // Now that the size is known, set up the camera parameters and begin
  115.         // the preview.
  116.         Camera.Parameters parameters = mCamera.getParameters();
  117.         parameters.setPreviewSize(w, h);
  118.         mCamera.setParameters(parameters);
  119.         mCamera.startPreview();
  120.     }
  121.    
  122.     public class PreCallback implements PreviewCallback
  123.     {
  124.         @Override
  125.         public void onPreviewFrame(byte[] data, Camera camera)
  126.         {
  127.             try
  128.             {
  129.                 if (!sending)
  130.                 {
  131.                     sending = true;
  132.                     time = System.currentTimeMillis();
  133.                    
  134.                     byte[] mJpegData = compressYuvToJpeg(data, camera);
  135.  
  136.                     System.out.println("Compress: " + (System.currentTimeMillis()-time) + "ms");
  137.                     time = System.currentTimeMillis();
  138.                     System.out.println("Sending object..");
  139.                     Packet p = new Packet(mJpegData);
  140.                     System.out.println(p);
  141.                     System.out.println(oos);
  142.                     oos.writeObject(p);
  143.                     System.out.println("Transfer: " + (System.currentTimeMillis()-time) + "ms");
  144.                     time = System.currentTimeMillis();
  145.                     Packet packet;
  146.                    
  147.                     while (true)
  148.                     {
  149.                         packet = (Packet)ois.readObject();
  150.                        
  151.                         if (packet.isEOF())
  152.                             break;
  153.                     }
  154.                    
  155.                     System.out.println("Callback: " + (System.currentTimeMillis()-time) + "ms");
  156.  
  157.                     sending = false;
  158.                 }
  159.             }
  160.             catch (Exception e)
  161.             {
  162.                 // TODO Auto-generated catch block
  163.                 e.printStackTrace();
  164.             }
  165.         }
  166.        
  167.         private byte[] compressYuvToJpeg(final byte[] yuvData, Camera camera)
  168.         {
  169.             Camera.Parameters parameters = camera.getParameters();
  170.             Size size = parameters.getPreviewSize();
  171.             mJpegCompressionBuffer.reset();
  172.             YuvImage yuvImage = new YuvImage(yuvData, ImageFormat.NV21, size.width, size.height, null);
  173.             yuvImage.compressToJpeg(new Rect(0, 0, size.width, size.height), 50, mJpegCompressionBuffer);
  174.            
  175.             return mJpegCompressionBuffer.toByteArray();
  176.         }
  177.     }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement