그래, OMX.qcom.video.encoder.avc는 모든 장치/안드로이드 버전에서 그러지는 않습니다. Android 4.3이 포함 된 Nexus 4에서 인코더가 정상적으로 작동하지만 내 S3 (4.1 실행)에 없습니다.
OMX.qcom.video.encoder.avc와 함께 실행되는 S3 용 솔루션 (일부 S3에는 다른 인코더)는 크로마 (Chroma) 창 바로 앞에 1,024 바이트를 추가하는 것입니다.
// The encoder may need some padding before the Chroma pane
int padding = 1024;
if ((mWidth==640 && mHeight==480) || mWidth==1280 && mHeight==720) padding = 0;
// Interleave the U and V channel
System.arraycopy(buffer, 0, tmp, 0, mYSize); // Y
for (i = 0; i < mUVSize; i++) {
tmp[mYSize + i*2 + padding] = buffer[mYSize + i + mUVSize]; // Cb (U)
tmp[mYSize + i*2+1 + padding] = buffer[mYSize + i]; // Cr (V)
}
return tmp;
카메라가 YV12 및 인코더 COLOR_FormatYUV420SemiPlanar를 사용 중입니다.
스냅 샷은 내가 가진 유물 같은 종류의, 당신은 또한 심지어 4.3, 16의 배수가 아닌 해상도를 피해야한다
어쩌면 다른 패딩 길이, 일부 해상도 유사한 해킹을해야 할 수 있습니다 보여줍니다 분명히 (http://code.google.com/p/android/issues/detail?id=37769)!
Android 4.3에는 몇 가지 유용한 새로운 기능이 추가되었으며 YUV 데이터를 'MediaCodec'에 제공하는 CTS 테스트가 추가되었습니다. http://bigflake.com/mediacodec/#EncodeDecodeTest의 buffer-to-buffer 및 buffer-to-surface 테스트는 유익한 정보 일 수 있습니다. – fadden
BTW, android-platform Google 그룹의 QualComm 인코더에 대한 토론이 있습니다. https://groups.google.com/d/msg/android-platform/awaNwgb6EbY/a-YiIOwaL0QJ 의견 작성자 중 한 명은 채도 평면을 정렬해야한다고 말합니다. 2048 바이트 경계에 의해,하지만 그 부분적으로 나를 위해 작동합니다. 일부 해상도는 여전히 버그가 많습니다 (예 : 176x144). –