Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: Visher on Apr 26th, 2012  |  syntax: Java  |  size: 5.61 KB  |  views: 26  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. }