在高通8916和8974平台上使用camera錄影的時候,錄影的格式是camera_yuv_420_nv12。此格式對應的yuv格式是yuv420sp32m。
yuv32sp對應的大小:w * h * 3 / 2
yuv420sp32m這樣的儲存方式對應的檔案儲存格式以及大小計算方式如下:
#ifndef __media_info_h__
#define __media_info_h__
#ifndef msm_media_align
#define msm_media_align(__sz, __align) (((__sz) + (__align-1)) & (~(__align-1)))
#endif
enum color_fmts ;
static
inline
unsigned
int venus_y_stride(int color_fmt, int width)
invalid_input:
return stride;
}static
inline
unsigned
int venus_uv_stride(int color_fmt, int width)
invalid_input:
return stride;
}static
inline
unsigned
int venus_y_scanlines(int color_fmt, int height)
invalid_input:
return sclines;
}static
inline
unsigned
int venus_uv_scanlines(int color_fmt, int height)
invalid_input:
return sclines;
}static
inline
unsigned
int venus_buffer_size(
int color_fmt, int width, int height)
invalid_input:
return size;
}#endif
分析
define msm_media_align(__sz, __align) (((__sz) + (__align-1)) & (~(__align-1)))
假設align = 32,二進位制為0010 0000,那麼align - 1 = 31,二進位制為0001 1111。
~操作符表示按位取反,即為 1110 0000,可以看出,將低於32的所有位置0。從而獲取到臨近的大的32的倍數
yuv420和yuv420p的區別
yv12和i420的區別 在採集到rgb24資料後,需要對這個格式的資料進行第一次壓縮。即將影象的顏色空間由rgb2yuv。因為,x264在進行編碼的時候需要標準的yuv 4 2 0 但是這裡需要注意的是,雖然yv12也是 4 2 0 但是yv12和i420的卻是不同的,在儲存空間上面有些區別。如下...
yuv420 轉bmp的方法
yuv420 轉bmp的方法 我找到了乙個c寫的exe 但是c的水平我實在是不敢去修改那個原始碼,所以我乾脆就呼叫這個dll,在c 裡建立了下面這個類,然後呼叫 y2b.exe 來轉換,而且不會顯示出來那個黑屏.要知道怎麼回事,就看 吧 呵呵.using system using system.co...
YUV420資料轉為IplImage格式
iplimage yuv420 to iplimage opencv unsigned char pyuv420,int width,int height iplimage yuvimage,rgbimg,yimg,uimg,vimg,uuimg,vvimg int nwidth width int...