ilyas i.
- Forum-Beiträge: 61
06.02.2012, 19:22:28 via Website
06.02.2012 19:22:28 via Website
Hallo erstmals,
ich bekomme in der Methode die Daten des Previews von der Kamera.
Anschliessend dekodiere ich es in der Methode . Ich habe es mit demMotorola Milestone und dem Samsung Galaxy ausprobiert. Beim Samsung geht das Dekodieren recht schnell, wobei das Milestone bis zu ~500ms braucht. Gibt es eine andere Möglichkeit zu dekodieren oder könnte man die Methode decodeYUV420SP optimieren?
Vielen Dank schonmal,
Viele Grüße
Ilyas G.
ich bekomme in der Methode
public void onPreviewFrame(byte[] data, Camera camera)
Anschliessend dekodiere ich es in der Methode
decodeYUV420SP
1public int[] decodeYUV420SP(byte[] yuv420sp, int width, int height) {
2 final int frameSize = width * height;
3 int rgb[] = new int[width * height];
4 for (int j = 0, yp = 0; j < height; j++) {
5 int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
6 for (int i = 0; i < width; i++, yp++) {
7 int y = (0xff & ((int) yuv420sp[yp])) - 16;
8 if (y < 0)
9 y = 0;
10 if ((i & 1) == 0) {
11 v = (0xff & yuv420sp[uvp++]) - 128;
12 u = (0xff & yuv420sp[uvp++]) - 128;
13 }
14 int y1192 = 1192 * y;
15 int r = (y1192 + 1634 * v);
16 int g = (y1192 - 833 * v - 400 * u);
17 int b = (y1192 + 2066 * u);
18 if (r < 0)r = 0;else if (r > 262143)r = 262143;
19 if (g < 0)g = 0;else if (g > 262143)g = 262143;
20 if (b < 0)b = 0;else if (b > 262143)b = 262143;
21 rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
22 }
23 }
24 return rgb;
25 }
2 final int frameSize = width * height;
3 int rgb[] = new int[width * height];
4 for (int j = 0, yp = 0; j < height; j++) {
5 int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
6 for (int i = 0; i < width; i++, yp++) {
7 int y = (0xff & ((int) yuv420sp[yp])) - 16;
8 if (y < 0)
9 y = 0;
10 if ((i & 1) == 0) {
11 v = (0xff & yuv420sp[uvp++]) - 128;
12 u = (0xff & yuv420sp[uvp++]) - 128;
13 }
14 int y1192 = 1192 * y;
15 int r = (y1192 + 1634 * v);
16 int g = (y1192 - 833 * v - 400 * u);
17 int b = (y1192 + 2066 * u);
18 if (r < 0)r = 0;else if (r > 262143)r = 262143;
19 if (g < 0)g = 0;else if (g > 262143)g = 262143;
20 if (b < 0)b = 0;else if (b > 262143)b = 262143;
21 rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
22 }
23 }
24 return rgb;
25 }
Vielen Dank schonmal,
Viele Grüße
Ilyas G.
— geändert am 06.02.2012, 19:27:53
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.