Commit fb09c461 by tonihei Committed by Ian Baker

Set LogSessionId on AudioTrack.

This requires forwarding the PlayerId to the AudioSink.

PiperOrigin-RevId: 410509605
parent 57212088
......@@ -27,6 +27,7 @@ import androidx.media3.common.PlaybackParameters;
import androidx.media3.common.Player;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.ExoPlaybackException;
import androidx.media3.exoplayer.analytics.PlayerId;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
......@@ -286,6 +287,13 @@ public interface AudioSink {
void setListener(Listener listener);
/**
* Sets the {@link PlayerId} of the player using this audio sink.
*
* @param playerId The {@link PlayerId}, or null to clear a previously set id.
*/
default void setPlayerId(@Nullable PlayerId playerId) {}
/**
* Returns whether the sink supports a given {@link Format}.
*
* @param format The format.
......
......@@ -534,6 +534,7 @@ public abstract class DecoderAudioRenderer<
} else {
audioSink.disableTunneling();
}
audioSink.setPlayerId(getPlayerId());
}
@Override
......
......@@ -23,6 +23,7 @@ import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.PlaybackParams;
import android.media.metrics.LogSessionId;
import android.os.ConditionVariable;
import android.os.Handler;
import android.os.SystemClock;
......@@ -40,6 +41,7 @@ import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.Log;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.audio.AudioProcessor.UnhandledAudioFormatException;
import androidx.media3.extractor.AacUtil;
import androidx.media3.extractor.Ac3Util;
......@@ -332,6 +334,7 @@ public final class DefaultAudioSink implements AudioSink {
initializationExceptionPendingExceptionHolder;
private final PendingExceptionHolder<WriteException> writeExceptionPendingExceptionHolder;
@Nullable private PlayerId playerId;
@Nullable private Listener listener;
@Nullable private Configuration pendingConfiguration;
@MonotonicNonNull private Configuration configuration;
......@@ -487,6 +490,11 @@ public final class DefaultAudioSink implements AudioSink {
}
@Override
public void setPlayerId(@Nullable PlayerId playerId) {
this.playerId = playerId;
}
@Override
public boolean supportsFormat(Format format) {
return getFormatSupport(format) != SINK_FORMAT_UNSUPPORTED;
}
......@@ -674,6 +682,9 @@ public final class DefaultAudioSink implements AudioSink {
configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding);
}
}
if (Util.SDK_INT >= 31 && playerId != null) {
Api31.setLogSessionIdOnAudioTrack(audioTrack, playerId);
}
audioSessionId = audioTrack.getAudioSessionId();
audioTrackPositionTracker.setAudioTrack(
audioTrack,
......@@ -2103,6 +2114,7 @@ public final class DefaultAudioSink implements AudioSink {
audioSessionId);
}
@SuppressWarnings("deprecation") // Using deprecated AudioTrack constructor.
private AudioTrack createAudioTrackV9(AudioAttributes audioAttributes, int audioSessionId) {
int streamType = Util.getStreamTypeForAudioUsage(audioAttributes.usage);
if (audioSessionId == C.AUDIO_SESSION_ID_UNSET) {
......@@ -2225,4 +2237,16 @@ public final class DefaultAudioSink implements AudioSink {
pendingException = null;
}
}
@RequiresApi(31)
private static final class Api31 {
private Api31() {}
public static void setLogSessionIdOnAudioTrack(AudioTrack audioTrack, PlayerId playerId) {
LogSessionId logSessionId = playerId.getLogSessionId();
if (!logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) {
audioTrack.setLogSessionId(logSessionId);
}
}
}
}
......@@ -21,6 +21,7 @@ import androidx.media3.common.AuxEffectInfo;
import androidx.media3.common.Format;
import androidx.media3.common.PlaybackParameters;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.analytics.PlayerId;
import java.nio.ByteBuffer;
/** An overridable {@link AudioSink} implementation forwarding all methods to another sink. */
......@@ -39,6 +40,11 @@ public class ForwardingAudioSink implements AudioSink {
}
@Override
public void setPlayerId(@Nullable PlayerId playerId) {
sink.setPlayerId(playerId);
}
@Override
public boolean supportsFormat(Format format) {
return sink.supportsFormat(format);
}
......
......@@ -504,6 +504,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
} else {
audioSink.disableTunneling();
}
audioSink.setPlayerId(getPlayerId());
}
@Override
......
......@@ -35,6 +35,7 @@ import androidx.media3.decoder.DecoderInputBuffer;
import androidx.media3.decoder.SimpleDecoder;
import androidx.media3.decoder.SimpleDecoderOutputBuffer;
import androidx.media3.exoplayer.RendererConfiguration;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.drm.DrmSessionEventListener;
import androidx.media3.exoplayer.drm.DrmSessionManager;
import androidx.media3.exoplayer.upstream.DefaultAllocator;
......@@ -84,6 +85,7 @@ public class DecoderAudioRendererTest {
return FORMAT;
}
};
audioRenderer.init(/* index= */ 0, PlayerId.UNSET);
}
@Config(sdk = 19)
......
......@@ -38,6 +38,7 @@ import androidx.media3.common.MimeTypes;
import androidx.media3.common.PlaybackException;
import androidx.media3.exoplayer.ExoPlaybackException;
import androidx.media3.exoplayer.RendererConfiguration;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.drm.DrmSessionEventListener;
import androidx.media3.exoplayer.drm.DrmSessionManager;
import androidx.media3.exoplayer.mediacodec.MediaCodecInfo;
......@@ -110,6 +111,7 @@ public class MediaCodecAudioRendererTest {
eventHandler,
audioRendererEventListener,
audioSink);
mediaCodecAudioRenderer.init(/* index= */ 0, PlayerId.UNSET);
}
@Test
......@@ -264,6 +266,7 @@ public class MediaCodecAudioRendererTest {
oneByteSample(/* timeUs= */ 0, C.BUFFER_FLAG_KEY_FRAME), END_OF_STREAM_ITEM));
fakeSampleStream.writeData(/* startPositionUs= */ 0);
exceptionThrowingRenderer.init(/* index= */ 0, PlayerId.UNSET);
exceptionThrowingRenderer.enable(
RendererConfiguration.DEFAULT,
new Format[] {AUDIO_AAC, changedFormat},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment