Desidero codificare utilizzando MediaCodec impostando il formato colore su COLOR_FormatYUV420Flexible
. mio tampone di ingresso è buffer di input yuv420p.When Mi piace questo:MediaCodec getInputImage restituisce null su alcuni dispositivi
int inputBufferIndex = mEncoder.dequeueInputBuffer(-1);
mCurrentBufferIndex = inputBufferIndex;
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
//if(VERBOSE)
Log.i(TAG,"pos:"+inputBuffer.position()+"\tlimit:"+inputBuffer.limit());
inputBuffer.clear();
return inputBuffer;
}
Ma alcuni dispositivi ottenere colore sbagliato. Così provo questo:
int inputBufferIndex = mEncoder.dequeueInputBuffer(-1);
mCurrentBufferIndex = inputBufferIndex;
if (inputBufferIndex >= 0) {
Image img = mEncoder.getInputImage(inputBufferIndex);
if(img==null)
return null;
//mCurrentInputPlanes = img.getPlanes();
ByteBuffer buffers[]={img.getPlanes()[0].getBuffer(),
img.getPlanes()[1].getBuffer(),
img.getPlanes()[2].getBuffer()};
ho riempire il buffer per i canali YUV lavoro .E su alcuni dispositivi. Ma moto X pro e huawei P7 diventano nulli quando si chiama getInputImage. La documentazione dice che l'immagine non contiene dati grezzi. Ma menziona anche COLOR_FormatYUV420Flexible
è supportato dall'API 21. Quindi come dovrei risolvere questo.
sto ottenendo questo su un terreno dei dispositivi Galaxy Note 3 e Galaxy Tab 4 10.1, ulteriori informazioni da chiunque? – FTLRalph
@FTLRalph Potresti postare un esempio di codice completo? Dalla domanda non è chiaro come i dati YUV siano copiati nell'inputbuffer. Inoltre, potresti pubblicare un esempio del video codificato che mostra il problema? Il colore sbagliato suona come il problema del passo o del rivestimento, ma ho bisogno di più informazioni per eseguire il debug. –
Hai verificato che fosse supportato COLOR_FormatYUV420Flessibile? in base a questo link: https://stackoverflow.com/questions/30857610/will-all-phones-support-yuv-420-semi-planar-color-format-in-h-264-encoder – user1796260