camera2 imagen capturada - conversión de YUV_420_888 a NV21

Via la API camera2 estamos recibiendo un objeto de imagen del formato YUV_420_888. Estamos utilizando la siguiente función para la conversión a 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;
}

Mientras esta función funciona bien concameraCaptureSessions.setRepeatingRequest, obtenemos un error de segmentación en el procesamiento posterior (en el lado JNI) al llamar acameraCaptureSessions.capture. Ambos solicitan el formato YUV_420_888 a través de ImageReader.

¿Cómo es que el resultado es diferente para ambas llamadas de función mientras que el tipo solicitado es el mismo?

Actualizar Como se menciona en los comentarios, obtengo este comportamiento debido a los diferentes tamaños de imagen (dimensión mucho mayor para la solicitud de captura). Pero nuestras operaciones de procesamiento adicionales en el lado JNI son las mismas para ambas solicitudes y no dependen de las dimensiones de la imagen (solo de la relación de aspecto, que en ambos casos es la misma).

Respuestas a la pregunta(1)

Su respuesta a la pregunta