Подтвердить что ты не робот

MediaCodec getInputImage возвращает null для некоторых устройств

Я хочу кодировать с помощью MediaCodec, установив формат цвета COLOR_FormatYUV420Flexible. Мой буфер ввода - yuv420p. Когда я вводим буфер следующим образом:

    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;
    }

Но некоторые устройства получают неправильный цвет. Поэтому я пробую это:

    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()};

Я заполняю буфер на каналы YUV. Он работает на некоторых устройствах. Но moto X pro и huawei P7 получают null при вызове getInputImage. В документации говорится, что изображение не содержит необработанных данных. Но он также упоминает, что COLOR_FormatYUV420Flexible поддерживается с API 21. Так как я должен это исправить.

4b9b3361