mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-21 02:08:40 +00:00
Fix video transcoding crash caused by premature codec API calls.
Move getParameterDescriptor and setParameters calls to after configure/start, since they require the codec to be in the Executing state. Always set KEY_COLOR_TRANSFER_REQUEST in the format before configure as the primary tone-mapping mechanism.
This commit is contained in:
@@ -484,17 +484,22 @@ final class VideoTrackConverter {
|
||||
// Try to use the Dolby Vision decoder, but if it doesn't support the transfer parameter, the decoded video buffer
|
||||
// is HLG and in-app tone mapping has to be used instead
|
||||
if (Build.VERSION.SDK_INT >= 31) {
|
||||
MediaCodec.ParameterDescriptor descriptor = decoder.getParameterDescriptor(VENDOR_DOLBY_CODEC_TRANSFER_PARAMKEY);
|
||||
if (descriptor != null) {
|
||||
Bundle transferBundle = new Bundle();
|
||||
transferBundle.putString(VENDOR_DOLBY_CODEC_TRANSFER_PARAMKEY, "transfer.sdr.normal");
|
||||
decoder.setParameters(transferBundle);
|
||||
} else {
|
||||
decoderPair.getSecond().setInteger(MediaFormat.KEY_COLOR_TRANSFER_REQUEST, MediaFormat.COLOR_TRANSFER_SDR_VIDEO);
|
||||
}
|
||||
decoderPair.getSecond().setInteger(MediaFormat.KEY_COLOR_TRANSFER_REQUEST, MediaFormat.COLOR_TRANSFER_SDR_VIDEO);
|
||||
}
|
||||
decoder.configure(decoderPair.getSecond(), surface, null, 0);
|
||||
decoder.start();
|
||||
if (Build.VERSION.SDK_INT >= 31) {
|
||||
try {
|
||||
MediaCodec.ParameterDescriptor descriptor = decoder.getParameterDescriptor(VENDOR_DOLBY_CODEC_TRANSFER_PARAMKEY);
|
||||
if (descriptor != null) {
|
||||
Bundle transferBundle = new Bundle();
|
||||
transferBundle.putString(VENDOR_DOLBY_CODEC_TRANSFER_PARAMKEY, "transfer.sdr.normal");
|
||||
decoder.setParameters(transferBundle);
|
||||
}
|
||||
} catch (IllegalStateException e) {
|
||||
Log.w(TAG, "Failed to set Dolby Vision transfer parameter", e);
|
||||
}
|
||||
}
|
||||
return decoder;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user