Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. public class PictureView extends View {
  2. public static InputStream m_inStream;
  3. private int m_width = 320; //512;//640;
  4. private int m_height = 240; //512;//480;
  5. private int[] m_rgbData;
  6. private byte[] m_yuvData;
  7. private int m_yuv_size;
  8. private int m_rgb_size;
  9. private Context m_context;
  10. private Timer m_timer;
  11. private Handler m_handler;
  12.  
  13.  
  14.  
  15.  
  16. public PictureView(Context context, AttributeSet attrs) {
  17. super(context, attrs);
  18. m_context = context;
  19.  
  20. m_yuv_size = (int)(m_width * m_height * 2.0f);
  21. m_rgb_size = (int)(m_width * m_height);
  22.  
  23. m_yuvData = new byte[m_yuv_size];
  24. m_rgbData = new int[m_rgb_size];
  25.  
  26.  
  27.  
  28. m_handler = new Handler() {
  29. public void handleMessage(Message msg) {
  30. if(readNextFrame()) {
  31. convertToRGB();
  32. invalidate();
  33.  
  34. }
  35. }
  36. };
  37.  
  38. m_timer = new Timer();
  39. m_timer.schedule(new TimerTask() {
  40. @Override
  41. public void run() {
  42. m_handler.obtainMessage(1).sendToTarget();
  43.  
  44. }
  45. }, 0, 32);
  46.  
  47.  
  48. }
  49.  
  50. @Override
  51. protected void onDraw(Canvas canvas) {
  52. super.onDraw(canvas);
  53. Bitmap bmp = Bitmap.createBitmap(m_width, m_height, Bitmap.Config.ARGB_8888);
  54. bmp.setPixels(m_rgbData, 0, m_width, 0, 0, m_width, m_height);
  55. canvas.drawBitmap(bmp, 0, 0, null);
  56. }
  57.  
  58. private boolean readNextFrame() {
  59. try {
  60. int available = m_inStream.available();
  61. if(available <= 0) return false;
  62. if(m_yuv_size > available)
  63. m_yuv_size = available;
  64. m_inStream.read(m_yuvData, 0, m_yuv_size);
  65. } catch(Exception e) {
  66. e.printStackTrace();
  67. }
  68. return true;
  69. }
  70.  
  71. private void convertToRGB() {
  72.  
  73. // YUY2 to RGB.
  74. int rgbIndex =0 ;
  75. for (int j = 0, yp = 0; j < m_height; j++) {
  76. int u = 0, v = 0;
  77.  
  78.  
  79. for (int i = 0; i < (m_width>>1); i++, yp+=4,rgbIndex++) {
  80. int y = (0xff & ((int) m_yuvData[yp]))- 16;
  81. if (y < 0)
  82. y = 0;
  83. if ((i & 1) == 0) {
  84. u = (0xff & m_yuvData[yp + 1]) - 128;
  85. v = (0xff & m_yuvData[yp + 3]) - 128;
  86.  
  87. }
  88.  
  89.  
  90.  
  91. if (y < 0)
  92. y = 0;
  93.  
  94.  
  95.  
  96. int y1164 = 1164 * y;
  97. int r = (y1164 + 1696 * v);
  98. int g = (y1164 - 833 * v - 391 * u);
  99. int b = (y1164 + 2066 * u);
  100.  
  101.  
  102. if (r < 0)
  103. r = 0;
  104. else if (r > 262143)
  105. r = 262143;
  106. if (g < 0)
  107. g = 0;
  108. else if (g > 262143)
  109. g = 262143;
  110. if (b < 0)
  111. b = 0;
  112. else if (b > 262143)
  113. b = 262143;
  114.  
  115. m_rgbData[rgbIndex++] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
  116.  
  117. y = (0xff & ((int) m_yuvData[yp+2]))- 16;
  118. if (y < 0)
  119. y = 0;
  120.  
  121. y1164 = 1164 * y;
  122. r = (y1164 + 1696 * v);
  123. g = (y1164 - 833 * v - 391 * u);
  124. b = (y1164 + 2066 * u);
  125.  
  126. //offers clamping control
  127. if (r < 0)
  128. r = 0;
  129. else if (r > 262143)
  130. r = 262143;
  131. if (g < 0)
  132. g = 0;
  133. else if (g > 262143)
  134. g = 262143;
  135. if (b < 0)
  136. b = 0;
  137. else if (b > 262143)
  138. b = 262143;
  139.  
  140. m_rgbData[rgbIndex] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
  141.  
  142.  
  143. }
  144. }
  145.  
  146.  
  147. }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement