void PredictionModel::new_measurement(double x, double y, double z)
  {
    if( (x != x) | (y != y) | (z != z) )
    {
      ROS_WARN_STREAM("We received NaN, ignoring the new measurement: " << x << " " << y << " " << z );
      return;
    }

    measurement_(1) = x;
    measurement_(2) = y;
    measurement_(3) = z;

    //we have received a new measurement
    meas_used_ = false;
  }
JNIEXPORT jint JNICALL Java_com_h6ah4i_android_media_opensl_audiofx_OpenSLVisualizer_getMeasurementPeakRmsImplNative(
    JNIEnv *env, jclass clazz, jlong handle, jintArray measurement) noexcept
{
    if (!handle) {
        return OSLMP_RESULT_INVALID_HANDLE;
    }

    jint_array measurement_(env, measurement);

    if (!measurement_) {
        return OSLMP_RESULT_ERROR;
    }

    Holder *holder = Holder::fromJniHandle(handle);
    oslmp::OpenSLMediaPlayerVisualizer::MeasurementPeakRms values;

    int result = holder->visualizer->getMeasurementPeakRms(&values);

    measurement_[0] = values.mPeak;
    measurement_[1] = values.mRms;

    return result;
}