Fix VolumeShaper unducking for OpenSLES playback
Native PlayerBase::applyVolumeShaper was never called (silent failure)
due to an undeclared nullable InterpolatorConfig parcelable
which was sent as null.
Test: see bug for repro details
Bug: 185372526
Change-Id: Id18664978605602f287e15de0c920ffc83a9aada
diff --git a/include/media/VolumeShaper.h b/include/media/VolumeShaper.h
index f8ead2f..5271e10 100644
--- a/include/media/VolumeShaper.h
+++ b/include/media/VolumeShaper.h
@@ -302,7 +302,8 @@
if (mType != TYPE_ID) {
parcelable->optionFlags = getOptionFlagsAsAidl();
parcelable->durationMs = getDurationMs();
- Interpolator<S, T>::writeToConfig(&parcelable->interpolatorConfig);
+ parcelable->interpolatorConfig.emplace(); // create value in std::optional
+ Interpolator<S, T>::writeToConfig(&*parcelable->interpolatorConfig);
}
}
@@ -319,8 +320,10 @@
? NO_ERROR
: setOptionFlagsFromAidl(parcelable.optionFlags)
?: setDurationMs(parcelable.durationMs)
- ?: Interpolator<S, T>::readFromConfig(parcelable.interpolatorConfig)
- ?: checkCurve();
+ ?: !parcelable.interpolatorConfig // check std::optional for value
+ ? BAD_VALUE // must be nonnull.
+ : Interpolator<S, T>::readFromConfig(*parcelable.interpolatorConfig)
+ ?: checkCurve();
}
// Returns a string for debug printing.