いいえ、OMX.qcom.video.encoder.avcはそうしていますが、すべてのデバイス/アンドロイド版ではありません。 Android 4.3搭載のNexus 4では、エンコーダは問題なく動作しますが、S3(実行中4.1)ではなく
OMX.qcom.video.encoder.avcを使用してS3を実行している場合の解決策別のエンコーダ)は、Chromaペインの直前に1024バイトを追加します。
// 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
ところで、アンドロイドプラットフォームGoogleグループでは、QualCommエンコーダについての議論があります:https://groups.google.com/d/msg/android-platform/awaNwgb6EbY/a-YiIOwaL0QJコメント者の一人は、彩度面を整列させるべきだと述べています2048バイトの境界では、それは私のために部分的にしか動作しません。いくつかの決議案はまだまだバグです(例えば、176x144)。 –