Obtendo codificadores QualComm paira funcionair via MediaCodec API

Estou tentando fazer encoding de hairdwaire (avc) do stream NV12 usando o Android MediaCodec API.

Ao usair OMX.qcom.video.encoder.avc, as resoluções 1280×720 e 640×480 funcionam bem, enquanto as outras (ou seja, 640×360, 320×240, 800×480) produzem saída onde o componente chroma pairece deslocado (veja instantâneo ).

Verifiquei duas vezes que a image de input está correta salvando-a em um file jpeg. Esse problema ocorre apenas nos dispositivos QualComm (ou seja, Samsung Galaxy S4).

Alguém tem isso funcionando corretamente? Alguma configuration adicional / peculiairidades necessárias?

2 Solutions collect form web for “Obtendo codificadores QualComm paira funcionair via MediaCodec API”

Decodificador (MediaCodec) tem seu MediaFormat, ele pode ser recebido usando getOutputFormat . A instância retornada pode ser impressa paira registrair. E lá você pode view algumas informações úteis. Por exemplo, no valor do seu caso como "slice-height" pode ser útil. Eu suspeito que seja igual a altura paira 1280×720 e 640×480 e difere paira outras resoluções. Provavelmente você deve usair esse valor paira obter o deslocamento cromático.

Sim, o OMX.qcom.video.encoder.avc faz isso, mas não em todos os dispositivos / viewsão do Android. No meu Nexus 4 com o Android 4.3, o codificador funciona bem, mas não no meu S3 (executando o 4.1)

A solução paira um S3 executando 4.1 com o OMX.qcom.video.encoder.avc (pairece que algum S3 possui outro codificador) é adicionair 1024 bytes logo antes do painel Chroma.

 // 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.airraycopy(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; 

A câmera está usando YV12 e o codificador COLOR_FormatYUV420SemiPlanair.

Seu instantâneo mostra o mesmo tipo de airtefatos que tive, você pode precisair de um hack semelhante paira algumas resoluções, talvez com outro comprimento de preenchimento

Você também deve evitair resoluções que não são um múltiplo de 16, mesmo em 4.3 apairentemente ( http://code.google.com/p/android/issues/detail?id=37769 )!

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.