Ich möchte mit MediaCodec codieren, indem Sie das Farbformat auf COLOR_FormatYUV420Flexible
setzen. Mein Eingangspuffer des ist yuv420p.When I Eingangspuffer wie folgt aus:MediaCodec getInputImage gibt auf einigen Geräten null zurück
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;
}
Aber einige Geräte erhalten falsche Farbe. Also versuche ich dies:
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()};
ich den Puffer zu YUV Kanäle .Es Arbeit auf einigen Geräten zu füllen. Aber moto X pro und huawei P7 werden beim Aufruf von getInputImage null. Die Dokumentation besagt, dass das Bild keine Rohdaten enthält. Aber es erwähnt auch COLOR_FormatYUV420Flexible
wird seit API 21.So wie soll ich das beheben.
verarbeiten kann ich dies auf eine Menge bin immer von Galaxy Note3 und Galaxy Tab 4 10.1 Geräte, weitere Informationen von jedermann? – FTLRalph
@FTLRalph Können Sie das vollständige Codebeispiel posten? Aus der Frage ist nicht ersichtlich, wie die YUV-Daten in den Eingabepuffer kopiert werden. Könnten Sie auch ein Beispiel des codierten Videos posten, das das Problem zeigt? Falsche Farben klingen für mich wie Stride- oder Padding-Probleme, benötigen aber mehr Informationen zum Debuggen. –
Haben Sie überprüft, wurde COLOR_FormatYUV420Flexible unterstützt? nach diesem Link: https://stackoverflow.com/questions/30857610/will-all-phones-support-yuv-420-semi-planar-color-format-in-h-264-encoder – user1796260