package com.mbridge.msdk.playercommon.exoplayer2.audio; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.PackageManager; import android.media.MediaCodec; import android.media.MediaCrypto; import android.media.MediaFormat; import android.os.Handler; import android.view.Surface; import androidx.annotation.Nullable; import com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer; import com.mbridge.msdk.playercommon.exoplayer2.ExoPlaybackException; import com.mbridge.msdk.playercommon.exoplayer2.Format; import com.mbridge.msdk.playercommon.exoplayer2.PlaybackParameters; import com.mbridge.msdk.playercommon.exoplayer2.audio.AudioRendererEventListener; import com.mbridge.msdk.playercommon.exoplayer2.audio.AudioSink; import com.mbridge.msdk.playercommon.exoplayer2.decoder.DecoderInputBuffer; import com.mbridge.msdk.playercommon.exoplayer2.drm.DrmInitData; import com.mbridge.msdk.playercommon.exoplayer2.drm.DrmSessionManager; import com.mbridge.msdk.playercommon.exoplayer2.drm.FrameworkMediaCrypto; import com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecInfo; import com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer; import com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecSelector; import com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecUtil; import com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaFormatUtil; import com.mbridge.msdk.playercommon.exoplayer2.util.MediaClock; import com.mbridge.msdk.playercommon.exoplayer2.util.MimeTypes; import com.mbridge.msdk.playercommon.exoplayer2.util.Util; import com.unity3d.ads.core.domain.HandleInvocationsFromAdViewer; import java.nio.ByteBuffer; @TargetApi(16) /* loaded from: classes4.dex */ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements MediaClock { private boolean allowFirstBufferPositionDiscontinuity; private boolean allowPositionDiscontinuity; private final AudioSink audioSink; private int channelCount; private int codecMaxInputSize; private boolean codecNeedsDiscardChannelsWorkaround; private final Context context; private long currentPositionUs; private int encoderDelay; private int encoderPadding; private final AudioRendererEventListener.EventDispatcher eventDispatcher; private boolean passthroughEnabled; private MediaFormat passthroughMediaFormat; private int pcmEncoding; @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public int canKeepCodec(MediaCodec mediaCodec, MediaCodecInfo mediaCodecInfo, Format format, Format format2) { return 0; } @Override // com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer, com.mbridge.msdk.playercommon.exoplayer2.Renderer public MediaClock getMediaClock() { return this; } public void onAudioSessionId(int i) { } public void onAudioTrackPositionDiscontinuity() { } public void onAudioTrackUnderrun(int i, long j, long j2) { } public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector) { this(context, mediaCodecSelector, (DrmSessionManager) null, false); } public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector, @Nullable DrmSessionManager drmSessionManager, boolean z) { this(context, mediaCodecSelector, drmSessionManager, z, null, null); } public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector, @Nullable Handler handler, @Nullable AudioRendererEventListener audioRendererEventListener) { this(context, mediaCodecSelector, null, false, handler, audioRendererEventListener); } public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector, @Nullable DrmSessionManager drmSessionManager, boolean z, @Nullable Handler handler, @Nullable AudioRendererEventListener audioRendererEventListener) { this(context, mediaCodecSelector, drmSessionManager, z, handler, audioRendererEventListener, null, new AudioProcessor[0]); } public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector, @Nullable DrmSessionManager drmSessionManager, boolean z, @Nullable Handler handler, @Nullable AudioRendererEventListener audioRendererEventListener, @Nullable AudioCapabilities audioCapabilities, AudioProcessor... audioProcessorArr) { this(context, mediaCodecSelector, drmSessionManager, z, handler, audioRendererEventListener, new DefaultAudioSink(audioCapabilities, audioProcessorArr)); } public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector, @Nullable DrmSessionManager drmSessionManager, boolean z, @Nullable Handler handler, @Nullable AudioRendererEventListener audioRendererEventListener, AudioSink audioSink) { super(1, mediaCodecSelector, drmSessionManager, z); this.context = context.getApplicationContext(); this.audioSink = audioSink; this.eventDispatcher = new AudioRendererEventListener.EventDispatcher(handler, audioRendererEventListener); audioSink.setListener(new AudioSinkListener()); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public int supportsFormat(MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, Format format) throws MediaCodecUtil.DecoderQueryException { boolean z; int i; int i2; String str = format.sampleMimeType; if (!MimeTypes.isAudio(str)) { return 0; } int i3 = Util.SDK_INT >= 21 ? 32 : 0; boolean supportsFormatDrm = BaseRenderer.supportsFormatDrm(drmSessionManager, format.drmInitData); if (supportsFormatDrm && allowPassthrough(str) && mediaCodecSelector.getPassthroughDecoderInfo() != null) { return i3 | 12; } if ((MimeTypes.AUDIO_RAW.equals(str) && !this.audioSink.isEncodingSupported(format.pcmEncoding)) || !this.audioSink.isEncodingSupported(2)) { return 1; } DrmInitData drmInitData = format.drmInitData; if (drmInitData != null) { z = false; for (int i4 = 0; i4 < drmInitData.schemeDataCount; i4++) { z |= drmInitData.get(i4).requiresSecureDecryption; } } else { z = false; } MediaCodecInfo decoderInfo = mediaCodecSelector.getDecoderInfo(str, z); if (decoderInfo == null) { return (!z || mediaCodecSelector.getDecoderInfo(str, false) == null) ? 1 : 2; } if (supportsFormatDrm) { return ((Util.SDK_INT < 21 || (((i = format.sampleRate) == -1 || decoderInfo.isAudioSampleRateSupportedV21(i)) && ((i2 = format.channelCount) == -1 || decoderInfo.isAudioChannelCountSupportedV21(i2)))) ? 4 : 3) | i3 | 8; } return 2; } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public MediaCodecInfo getDecoderInfo(MediaCodecSelector mediaCodecSelector, Format format, boolean z) throws MediaCodecUtil.DecoderQueryException { MediaCodecInfo passthroughDecoderInfo; return (!allowPassthrough(format.sampleMimeType) || (passthroughDecoderInfo = mediaCodecSelector.getPassthroughDecoderInfo()) == null) ? super.getDecoderInfo(mediaCodecSelector, format, z) : passthroughDecoderInfo; } public boolean allowPassthrough(String str) { int encoding = MimeTypes.getEncoding(str); return encoding != 0 && this.audioSink.isEncodingSupported(encoding); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public void configureCodec(MediaCodecInfo mediaCodecInfo, MediaCodec mediaCodec, Format format, MediaCrypto mediaCrypto) { this.codecMaxInputSize = getCodecMaxInputSize(mediaCodecInfo, format, getStreamFormats()); this.codecNeedsDiscardChannelsWorkaround = codecNeedsDiscardChannelsWorkaround(mediaCodecInfo.name); this.passthroughEnabled = mediaCodecInfo.passthrough; String str = mediaCodecInfo.mimeType; if (str == null) { str = MimeTypes.AUDIO_RAW; } MediaFormat mediaFormat = getMediaFormat(format, str, this.codecMaxInputSize); mediaCodec.configure(mediaFormat, (Surface) null, mediaCrypto, 0); if (!this.passthroughEnabled) { this.passthroughMediaFormat = null; } else { this.passthroughMediaFormat = mediaFormat; mediaFormat.setString("mime", format.sampleMimeType); } } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public void onCodecInitialized(String str, long j, long j2) { this.eventDispatcher.decoderInitialized(str, j, j2); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public void onInputFormatChanged(Format format) throws ExoPlaybackException { super.onInputFormatChanged(format); this.eventDispatcher.inputFormatChanged(format); this.pcmEncoding = MimeTypes.AUDIO_RAW.equals(format.sampleMimeType) ? format.pcmEncoding : 2; this.channelCount = format.channelCount; this.encoderDelay = format.encoderDelay; this.encoderPadding = format.encoderPadding; } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public void onOutputFormatChanged(MediaCodec mediaCodec, MediaFormat mediaFormat) throws ExoPlaybackException { int i; int[] iArr; int i2; MediaFormat mediaFormat2 = this.passthroughMediaFormat; if (mediaFormat2 != null) { i = MimeTypes.getEncoding(mediaFormat2.getString("mime")); mediaFormat = this.passthroughMediaFormat; } else { i = this.pcmEncoding; } int i3 = i; int integer = mediaFormat.getInteger("channel-count"); int integer2 = mediaFormat.getInteger("sample-rate"); if (this.codecNeedsDiscardChannelsWorkaround && integer == 6 && (i2 = this.channelCount) < 6) { iArr = new int[i2]; for (int i4 = 0; i4 < this.channelCount; i4++) { iArr[i4] = i4; } } else { iArr = null; } try { this.audioSink.configure(i3, integer, integer2, 0, iArr, this.encoderDelay, this.encoderPadding); } catch (AudioSink.ConfigurationException e) { throw ExoPlaybackException.createForRenderer(e, getIndex()); } } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer public void onEnabled(boolean z) throws ExoPlaybackException { super.onEnabled(z); this.eventDispatcher.enabled(this.decoderCounters); int i = getConfiguration().tunnelingAudioSessionId; if (i != 0) { this.audioSink.enableTunnelingV21(i); } else { this.audioSink.disableTunneling(); } } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer public void onPositionReset(long j, boolean z) throws ExoPlaybackException { super.onPositionReset(j, z); this.audioSink.reset(); this.currentPositionUs = j; this.allowFirstBufferPositionDiscontinuity = true; this.allowPositionDiscontinuity = true; } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer public void onStarted() { super.onStarted(); this.audioSink.play(); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer public void onStopped() { updateCurrentPosition(); this.audioSink.pause(); super.onStopped(); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer public void onDisabled() { try { this.audioSink.release(); try { super.onDisabled(); } finally { } } catch (Throwable th) { try { super.onDisabled(); throw th; } finally { } } } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.Renderer public boolean isEnded() { return super.isEnded() && this.audioSink.isEnded(); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer, com.mbridge.msdk.playercommon.exoplayer2.Renderer public boolean isReady() { return this.audioSink.hasPendingData() || super.isReady(); } @Override // com.mbridge.msdk.playercommon.exoplayer2.util.MediaClock public long getPositionUs() { if (getState() == 2) { updateCurrentPosition(); } return this.currentPositionUs; } @Override // com.mbridge.msdk.playercommon.exoplayer2.util.MediaClock public PlaybackParameters setPlaybackParameters(PlaybackParameters playbackParameters) { return this.audioSink.setPlaybackParameters(playbackParameters); } @Override // com.mbridge.msdk.playercommon.exoplayer2.util.MediaClock public PlaybackParameters getPlaybackParameters() { return this.audioSink.getPlaybackParameters(); } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public void onQueueInputBuffer(DecoderInputBuffer decoderInputBuffer) { if (!this.allowFirstBufferPositionDiscontinuity || decoderInputBuffer.isDecodeOnly()) { return; } if (Math.abs(decoderInputBuffer.timeUs - this.currentPositionUs) > 500000) { this.currentPositionUs = decoderInputBuffer.timeUs; } this.allowFirstBufferPositionDiscontinuity = false; } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public boolean processOutputBuffer(long j, long j2, MediaCodec mediaCodec, ByteBuffer byteBuffer, int i, int i2, long j3, boolean z) throws ExoPlaybackException { if (this.passthroughEnabled && (i2 & 2) != 0) { mediaCodec.releaseOutputBuffer(i, false); return true; } if (z) { mediaCodec.releaseOutputBuffer(i, false); this.decoderCounters.skippedOutputBufferCount++; this.audioSink.handleDiscontinuity(); return true; } try { if (!this.audioSink.handleBuffer(byteBuffer, j3)) { return false; } mediaCodec.releaseOutputBuffer(i, false); this.decoderCounters.renderedOutputBufferCount++; return true; } catch (AudioSink.InitializationException | AudioSink.WriteException e) { throw ExoPlaybackException.createForRenderer(e, getIndex()); } } @Override // com.mbridge.msdk.playercommon.exoplayer2.mediacodec.MediaCodecRenderer public void renderToEndOfStream() throws ExoPlaybackException { try { this.audioSink.playToEndOfStream(); } catch (AudioSink.WriteException e) { throw ExoPlaybackException.createForRenderer(e, getIndex()); } } @Override // com.mbridge.msdk.playercommon.exoplayer2.BaseRenderer, com.mbridge.msdk.playercommon.exoplayer2.PlayerMessage.Target public void handleMessage(int i, Object obj) throws ExoPlaybackException { if (i == 2) { this.audioSink.setVolume(((Float) obj).floatValue()); } else if (i == 3) { this.audioSink.setAudioAttributes((AudioAttributes) obj); } else { super.handleMessage(i, obj); } } public int getCodecMaxInputSize(MediaCodecInfo mediaCodecInfo, Format format, Format[] formatArr) { return getCodecMaxInputSize(mediaCodecInfo, format); } private int getCodecMaxInputSize(MediaCodecInfo mediaCodecInfo, Format format) { PackageManager packageManager; int i = Util.SDK_INT; if (i >= 24 || !"OMX.google.raw.decoder".equals(mediaCodecInfo.name) || (i == 23 && (packageManager = this.context.getPackageManager()) != null && packageManager.hasSystemFeature("android.software.leanback"))) { return format.maxInputSize; } return -1; } @SuppressLint({"InlinedApi"}) public MediaFormat getMediaFormat(Format format, String str, int i) { MediaFormat mediaFormat = new MediaFormat(); mediaFormat.setString("mime", str); mediaFormat.setInteger("channel-count", format.channelCount); mediaFormat.setInteger("sample-rate", format.sampleRate); MediaFormatUtil.setCsdBuffers(mediaFormat, format.initializationData); MediaFormatUtil.maybeSetInteger(mediaFormat, "max-input-size", i); if (Util.SDK_INT >= 23) { mediaFormat.setInteger(HandleInvocationsFromAdViewer.KEY_DOWNLOAD_PRIORITY, 0); } return mediaFormat; } private void updateCurrentPosition() { long currentPositionUs = this.audioSink.getCurrentPositionUs(isEnded()); if (currentPositionUs != Long.MIN_VALUE) { if (!this.allowPositionDiscontinuity) { currentPositionUs = Math.max(this.currentPositionUs, currentPositionUs); } this.currentPositionUs = currentPositionUs; this.allowPositionDiscontinuity = false; } } private static boolean areAdaptationCompatible(Format format, Format format2) { return format.sampleMimeType.equals(format2.sampleMimeType) && format.channelCount == format2.channelCount && format.sampleRate == format2.sampleRate && format.encoderDelay == 0 && format.encoderPadding == 0 && format2.encoderDelay == 0 && format2.encoderPadding == 0 && format.initializationDataEquals(format2); } private static boolean codecNeedsDiscardChannelsWorkaround(String str) { if (Util.SDK_INT < 24 && "OMX.SEC.aac.dec".equals(str) && "samsung".equals(Util.MANUFACTURER)) { String str2 = Util.DEVICE; if (str2.startsWith("zeroflte") || str2.startsWith("herolte") || str2.startsWith("heroqlte")) { return true; } } return false; } public final class AudioSinkListener implements AudioSink.Listener { private AudioSinkListener() { } @Override // com.mbridge.msdk.playercommon.exoplayer2.audio.AudioSink.Listener public final void onAudioSessionId(int i) { MediaCodecAudioRenderer.this.eventDispatcher.audioSessionId(i); MediaCodecAudioRenderer.this.onAudioSessionId(i); } @Override // com.mbridge.msdk.playercommon.exoplayer2.audio.AudioSink.Listener public final void onPositionDiscontinuity() { MediaCodecAudioRenderer.this.onAudioTrackPositionDiscontinuity(); MediaCodecAudioRenderer.this.allowPositionDiscontinuity = true; } @Override // com.mbridge.msdk.playercommon.exoplayer2.audio.AudioSink.Listener public final void onUnderrun(int i, long j, long j2) { MediaCodecAudioRenderer.this.eventDispatcher.audioTrackUnderrun(i, j, j2); MediaCodecAudioRenderer.this.onAudioTrackUnderrun(i, j, j2); } } }