2014-06-06 6 views
0

내 안드로이드 어플리케이션에서 NV21 포맷의 카메라 출력을 바이트 배열로 얻습니다. 네이티브 측면에서,이 배열을 libyuv의 NV21ToI420 함수를 사용하여 I420 형식으로 변환해야합니다. 여기에 그 정의가 있습니다 :libyuv의 빌딩 파라미터 NV21ToI420

LIBYUV_API 
int NV21ToI420(const uint8* src_y, int src_stride_y, 
      const uint8* src_vu, int src_stride_vu, 
      uint8* dst_y, int dst_stride_y, 
      uint8* dst_u, int dst_stride_u, 
      uint8* dst_v, int dst_stride_v, 
      int width, int height); 

나는 모두 NV21 데이터, 너비와 높이에 대한 포인터입니다. src_stride_y, src_stride_vu 등의 값을 계산하는 방법이 궁금합니다. 누군가이 함수를 적절하게 사용하는 방법에 대한 샘플 코드를 공유 할 수 있으면 감사하게 생각합니다. NV21ToI420에 대한 그물 검색은 어떤 결과도 가져 오지 않았습니다. 문안 인사.

+0

이미지의 행마다 패딩이 없으므로 모든 보폭 매개 변수에 동일한 값을 사용하고 이미지의 너비로 설정하려고했습니다. 그러나 루틴은 단지 충돌합니다. 나는 결국 내 자신의 회심 루틴을 작성했다. – Peter

답변

0

src_stride_y 보통 프레임의 폭 및 src_stride_uv절반 프레임 폭 (임의 YUV42x 포맷에 대한 수평 차원에서의 다운 샘플링이 있기 때문에). 경우에 따라 너비가 펑키 한 숫자이며 예를 들어 너비가 135 인 경우와 같이 메모리 배열에 큰 비효율을 초래할 수 있습니다.이 경우 프로세서/컴파일러/라이브러리/OS는 이 크기가 더 계산 상 친숙 할 때까지 각 행에 0/1/가비지가있는 패드 - 4/64 바이트 또는 그 이상의 배수. 이 추론은 dst_stride_y (~ 너비) 및 dst_stride_u/dst_stride_v (~ 너비/2)에 적용됩니다. IIRC, 안드로이드에서 카메라가 제공하는 캡처 크기를 선택하면 너비와 너비/2와는 다른 스트라이드가 없어야하므로 잘 갈 수 있어야합니다.