2011-12-19 25 views
0

は、我々は、バッファを受け取るために、私はフォーマット設定されているAndroidのYUV画像フォーマット

は、カメラパラメータとしてYV12で、我々はバッファをキャプチャし、送信先に送信するCameraクラスを使用している、ビデオを転送する必要があります500X300バッファ用

、我々は230400バイト、

私が知りたいの受信バッファ、この予想されるバッファサイズですか?
私はサイズがあろうと信じ

y平面=幅*高さ= 500X300 = 150000

Uプレーン=幅/ 2×高さ/ 2 = = 37500

Vプレーン=幅/ 2 *高さ/ 2 = = 37500

       ======== 
           225000          
           ======== 

誰もが、私は、各コンポーネントのストライド値を取得する必要がある場合、どのように私は ことを得ることができ、私を説明することができます10それを得る方法はありますか?

答えて

3

私はあなたがintはRGB []このことから得ることができる方法をお見せすることができます

public int[] decodeYUV420SP(byte[] yuv420sp, int width, int height) { 

     final int frameSize = width * height; 

     int rgb[] = new int[width * height]; 
     for (int j = 0, yp = 0; j < height; j++) { 
      int uvp = frameSize + (j >> 1) * width, u = 0, v = 0; 
      for (int i = 0; i < width; i++, yp++) { 
       int y = (0xff & ((int) yuv420sp[yp])) - 16; 
       if (y < 0) 
        y = 0; 
       if ((i & 1) == 0) { 
        v = (0xff & yuv420sp[uvp++]) - 128; 
        u = (0xff & yuv420sp[uvp++]) - 128; 
       } 

       int y1192 = 1192 * y; 
       int r = (y1192 + 1634 * v); 
       int g = (y1192 - 833 * v - 400 * u); 
       int b = (y1192 + 2066 * u); 

       if (r < 0) 
        r = 0; 
       else if (r > 262143) 
        r = 262143; 
       if (g < 0) 
        g = 0; 
       else if (g > 262143) 
        g = 262143; 
       if (b < 0) 
        b = 0; 
       else if (b > 262143) 
        b = 262143; 

       rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) 
         | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff); 

      } 
     } 
     return rgb; 
    } 
+0

おかげで、私たちはそれをRGBに変換する必要はありません、我々はに圧縮し、実際に合格したいと思いますデコーダは、データをYUVフォーマットにのみ取り込み、事実だけを、我々はそれからストライド値を計算する方法を知らない。 – Amitg2k12

0

私はこれは簡単だと思います。 chekout YUVImageクラスfromアンドロイド。カメラプレビューから来るbyte []データからYUVイメージを構築することができます。 あなたはこのように書くことができます。

//width and height you get it from camera properties, image width and height of camera preview 
YuvImage image=new YuvImage(data, ImageFormat.NV21, int width, int height, null); 
byte[] newData = image.getYuvData(); 
//or if you want int format = image.getYuvFormat(); 
0

それはかなり古い質問ですが、私は数日間、同じ問題で苦労してきました。だから私は他人を助けるためのコメントを書くことに決めました。 Android開発者サイト(here)に記載されているYV12は、YV12ではなくIMC1のようです。このページでは、yストライドとuvストライドの両方を16バイトで整列させる必要があります。

またこのpageのことを言う:そこには、画素データの各行の最後のパディングすることができるようにYV12、受信される画像バッファに

は必ずしも緊密 は、充填されていない、 としてYV12に記載されている。

上記のコメントに基づいて、私はPythonのコマンドラインを使用して計算:

>>> w = 500 
>>> h = 300 
>>> y_stride = (500 + 15)/16 * 16.0 
>>> y_stride 
512.0 
>>> y_size = y_stride * h 
>>> y_size 
153600.0 
>>> uv_stride = (500/2 + 15)/16 * 16.0 
>>> uv_stride 
256.0 
>>> u_size = uv_stride * h/2 
>>> v_size = uv_stride * h/2 
>>> size = y_size + u_size + v_size 
>>> size 
230400.0 
関連する問題