camera2 imagem capturada - conversão de YUV_420_888 para NV21

Pela API camera2, estamos recebendo um objeto Image no formato YUV_420_888. Estamos usando a seguinte função para conversão para NV21:

private static byte[] YUV_420_888toNV21(Image image) {
    byte[] nv21;
    ByteBuffer yBuffer = image.getPlanes()[0].getBuffer();
    ByteBuffer uBuffer = image.getPlanes()[1].getBuffer();
    ByteBuffer vBuffer = image.getPlanes()[2].getBuffer();

    int ySize = yBuffer.remaining();
    int uSize = uBuffer.remaining();
    int vSize = vBuffer.remaining();

    nv21 = new byte[ySize + uSize + vSize];

    //U and V are swapped
    yBuffer.get(nv21, 0, ySize);
    vBuffer.get(nv21, ySize, vSize);
    uBuffer.get(nv21, ySize + vSize, uSize);

    return nv21;
}

Embora esta função funcione bem comcameraCaptureSessions.setRepeatingRequest, obtemos um erro de segmentação em processamento adicional (no lado da JNI) ao chamarcameraCaptureSessions.capture. Ambos solicitam o formato YUV_420_888 via ImageReader.

Por que o resultado é diferente para as duas chamadas de função enquanto o tipo solicitado é o mesmo?

Atualizar Conforme mencionado nos comentários, recebo esse comportamento devido a diferentes tamanhos de imagem (dimensão muito maior para a solicitação de captura). Porém, nossas operações de processamento adicionais no lado da JNI são iguais para ambas as solicitações e não dependem das dimensões da imagem (apenas na proporção, que é em ambos os casos a mesma).

questionAnswers(1)

yourAnswerToTheQuestion