Loading apex/media/framework/api/current.txt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -69,10 +69,12 @@ package android.media { method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException; method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException; method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...); method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...); method @NonNull public static android.media.MediaParser createByName(@NonNull String, @NonNull android.media.MediaParser.OutputConsumer); method @NonNull public static android.media.MediaParser createByName(@NonNull String, @NonNull android.media.MediaParser.OutputConsumer); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method @NonNull public String getParserName(); method @NonNull public String getParserName(); method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat); method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat); method public void release(); method public void release(); method public void seek(@NonNull android.media.MediaParser.SeekPoint); method public void seek(@NonNull android.media.MediaParser.SeekPoint); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method @NonNull public android.media.MediaParser setParameter(@NonNull String, @NonNull Object); method @NonNull public android.media.MediaParser setParameter(@NonNull String, @NonNull Object); method public boolean supportsParameter(@NonNull String); method public boolean supportsParameter(@NonNull String); field public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING = "android.media.mediaparser.adts.enableCbrSeeking"; field public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING = "android.media.mediaparser.adts.enableCbrSeeking"; Loading apex/media/framework/java/android/media/MediaParser.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.StringDef; import android.annotation.StringDef; import android.media.MediaCodec.CryptoInfo; import android.media.MediaCodec.CryptoInfo; import android.media.metrics.LogSessionId; import android.os.Build; import android.os.Build; import android.text.TextUtils; import android.text.TextUtils; import android.util.Log; import android.util.Log; Loading Loading @@ -74,6 +75,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; import java.util.function.Function; Loading Loading @@ -1066,6 +1068,7 @@ public final class MediaParser { private boolean mReleased; private boolean mReleased; // MediaMetrics fields. // MediaMetrics fields. @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE; private final boolean mCreatedByName; private final boolean mCreatedByName; private final SparseArray<Format> mTrackFormats; private final SparseArray<Format> mTrackFormats; private String mLastObservedExceptionName; private String mLastObservedExceptionName; Loading Loading @@ -1328,6 +1331,7 @@ public final class MediaParser { MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH)); MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH)); nativeSubmitMetrics( nativeSubmitMetrics( // TODO: mLogSessionId, mParserName, mParserName, mCreatedByName, mCreatedByName, String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool), String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool), Loading @@ -1341,6 +1345,15 @@ public final class MediaParser { videoHeight); videoHeight); } } public void setLogSessionId(@NonNull LogSessionId sessionId) { this.mLogSessionId = Objects.requireNonNull(sessionId); } @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } // Private methods. // Private methods. private MediaParser( private MediaParser( Loading Loading @@ -2184,6 +2197,7 @@ public final class MediaParser { // Native methods. // Native methods. private native void nativeSubmitMetrics( private native void nativeSubmitMetrics( // TODO: String logSessionId, String parserName, String parserName, boolean createdByName, boolean createdByName, String parserPool, String parserPool, Loading core/api/current.txt +17 −9 Original line number Original line Diff line number Diff line Loading @@ -20579,6 +20579,7 @@ package android.media { method public int getChannelConfiguration(); method public int getChannelConfiguration(); method public int getChannelCount(); method public int getChannelCount(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); method public static int getMinBufferSize(int, int, int); method public int getNotificationMarkerPosition(); method public int getNotificationMarkerPosition(); Loading @@ -20601,6 +20602,7 @@ package android.media { method public void release(); method public void release(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener); method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public int setNotificationMarkerPosition(int); method public int setNotificationMarkerPosition(int); method public int setPositionNotificationPeriod(int); method public int setPositionNotificationPeriod(int); method public boolean setPreferredDevice(android.media.AudioDeviceInfo); method public boolean setPreferredDevice(android.media.AudioDeviceInfo); Loading Loading @@ -20716,6 +20718,7 @@ package android.media { method public int getChannelCount(); method public int getChannelCount(); method public int getDualMonoMode(); method public int getDualMonoMode(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public static float getMaxVolume(); method public static float getMaxVolume(); method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); method public static int getMinBufferSize(int, int, int); Loading Loading @@ -20753,6 +20756,7 @@ package android.media { method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); method public int setBufferSizeInFrames(@IntRange(from=0) int); method public int setBufferSizeInFrames(@IntRange(from=0) int); method public boolean setDualMonoMode(int); method public boolean setDualMonoMode(int); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int); method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int); method public int setNotificationMarkerPosition(int); method public int setNotificationMarkerPosition(int); method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); Loading Loading @@ -21307,7 +21311,7 @@ package android.media { method @NonNull public String getDiagnosticInfo(); method @NonNull public String getDiagnosticInfo(); } } public final class MediaCodec implements android.media.metrics.PlaybackComponent { public final class MediaCodec { method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int); method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int); method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler); method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler); method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException; method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException; Loading @@ -21333,7 +21337,6 @@ package android.media { method @NonNull public android.media.MediaFormat getOutputFormat(int); method @NonNull public android.media.MediaFormat getOutputFormat(int); method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int); method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int); method @Nullable public android.media.Image getOutputImage(int); method @Nullable public android.media.Image getOutputImage(int); method public String getPlaybackId(); method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int); method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int); method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer); method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer); method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException; method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException; Loading @@ -21350,7 +21353,6 @@ package android.media { method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler); method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler); method public void setOutputSurface(@NonNull android.view.Surface); method public void setOutputSurface(@NonNull android.view.Surface); method public void setParameters(@Nullable android.os.Bundle); method public void setParameters(@Nullable android.os.Bundle); method public void setPlaybackId(@NonNull String); method public void setVideoScalingMode(int); method public void setVideoScalingMode(int); method public void signalEndOfInputStream(); method public void signalEndOfInputStream(); method public void start(); method public void start(); Loading Loading @@ -21964,7 +21966,7 @@ package android.media { method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds(); method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds(); method public int getOfflineLicenseState(@NonNull byte[]); method public int getOfflineLicenseState(@NonNull byte[]); method public int getOpenSessionCount(); method public int getOpenSessionCount(); method @Nullable public android.media.metrics.PlaybackComponent getPlaybackComponent(@NonNull byte[]); method @Nullable public android.media.MediaDrm.PlaybackComponent getPlaybackComponent(@NonNull byte[]); method @NonNull public byte[] getPropertyByteArray(String); method @NonNull public byte[] getPropertyByteArray(String); method @NonNull public String getPropertyString(@NonNull String); method @NonNull public String getPropertyString(@NonNull String); method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); Loading Loading @@ -22169,6 +22171,11 @@ package android.media { method public void onSessionLostState(@NonNull android.media.MediaDrm, @NonNull byte[]); method public void onSessionLostState(@NonNull android.media.MediaDrm, @NonNull byte[]); } } public final class MediaDrm.PlaybackComponent { method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); } public static final class MediaDrm.ProvisionRequest { public static final class MediaDrm.ProvisionRequest { method @NonNull public byte[] getData(); method @NonNull public byte[] getData(); method @NonNull public String getDefaultUrl(); method @NonNull public String getDefaultUrl(); Loading Loading @@ -22201,6 +22208,7 @@ package android.media { method public long getCachedDuration(); method public long getCachedDuration(); method public android.media.MediaExtractor.CasInfo getCasInfo(int); method public android.media.MediaExtractor.CasInfo getCasInfo(int); method public android.media.DrmInitData getDrmInitData(); method public android.media.DrmInitData getDrmInitData(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo(); method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo(); method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo); method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo); Loading @@ -22222,6 +22230,7 @@ package android.media { method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException; method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException; method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException; method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException; method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public void setMediaCas(@NonNull android.media.MediaCas); method public void setMediaCas(@NonNull android.media.MediaCas); method public void unselectTrack(int); method public void unselectTrack(int); field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 Loading Loading @@ -22825,6 +22834,7 @@ package android.media { method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException; method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException; method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration(); method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration(); method public static final int getAudioSourceMax(); method public static final int getAudioSourceMax(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public int getMaxAmplitude() throws java.lang.IllegalStateException; method public int getMaxAmplitude() throws java.lang.IllegalStateException; method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method public android.media.AudioDeviceInfo getPreferredDevice(); method public android.media.AudioDeviceInfo getPreferredDevice(); Loading @@ -22847,6 +22857,7 @@ package android.media { method public void setCaptureRate(double); method public void setCaptureRate(double); method public void setInputSurface(@NonNull android.view.Surface); method public void setInputSurface(@NonNull android.view.Surface); method public void setLocation(float, float); method public void setLocation(float, float); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public void setMaxDuration(int) throws java.lang.IllegalArgumentException; method public void setMaxDuration(int) throws java.lang.IllegalArgumentException; method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException; method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException; method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException; method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException; Loading Loading @@ -24478,6 +24489,8 @@ package android.media.metrics { } } public final class LogSessionId { public final class LogSessionId { method @NonNull public String getStringId(); field @NonNull public static final android.media.metrics.LogSessionId LOG_SESSION_ID_NONE; } } public class MediaMetricsManager { public class MediaMetricsManager { Loading Loading @@ -24511,11 +24524,6 @@ package android.media.metrics { method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); } } public interface PlaybackComponent { method @NonNull public String getPlaybackId(); method public void setPlaybackId(@NonNull String); } public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable { public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable { method public int describeContents(); method public int describeContents(); method public int getErrorCode(); method public int getErrorCode(); core/api/test-current.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1478,7 +1478,7 @@ package android.media.audiopolicy { package android.media.metrics { package android.media.metrics { public final class LogSessionId { public final class LogSessionId { method @NonNull public String getStringId(); ctor public LogSessionId(@NonNull String); } } } } Loading media/java/android/media/AudioRecord.java +22 −11 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Context; import android.media.MediaRecorder.Source; import android.media.MediaRecorder.Source; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioPolicy; import android.media.audiopolicy.AudioPolicy; import android.media.metrics.LogSessionId; import android.media.permission.Identity; import android.media.permission.Identity; import android.media.projection.MediaProjection; import android.media.projection.MediaProjection; import android.os.Binder; import android.os.Binder; Loading Loading @@ -282,9 +283,9 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, /** /** * The log session id used for metrics. * The log session id used for metrics. * A null or empty string here means it is not set. * {@link LogSessionId#LOG_SESSION_ID_NONE} here means it is not set. */ */ private String mLogSessionId; @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE; //--------------------------------------------------------- //--------------------------------------------------------- // Constructor, Finalize // Constructor, Finalize Loading Loading @@ -1963,24 +1964,34 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, } } /** /** * Sets a string handle to this AudioRecord for metrics collection. * Sets a {@link LogSessionId} instance to this AudioRecord for metrics collection. * * * @param logSessionId a string which is used to identify this object * @param logSessionId a {@link LogSessionId} instance which is used to * to the metrics service. Proper generated Ids must be obtained * identify this object to the metrics service. Proper generated * from the Java metrics service and should be considered opaque. * Ids must be obtained from the Java metrics service and should * Use null to remove the logSessionId association. * be considered opaque. Use * {@link LogSessionId#LOG_SESSION_ID_NONE} to remove the * logSessionId association. * @throws IllegalStateException if AudioRecord not initialized. * @throws IllegalStateException if AudioRecord not initialized. * * @hide */ */ public void setLogSessionId(@Nullable String logSessionId) { public void setLogSessionId(@NonNull LogSessionId logSessionId) { Objects.requireNonNull(logSessionId); if (mState == STATE_UNINITIALIZED) { if (mState == STATE_UNINITIALIZED) { throw new IllegalStateException("AudioRecord not initialized"); throw new IllegalStateException("AudioRecord not initialized"); } } native_setLogSessionId(logSessionId); String stringId = logSessionId.getStringId(); native_setLogSessionId(stringId); mLogSessionId = logSessionId; mLogSessionId = logSessionId; } } /** * Returns the {@link LogSessionId}. */ @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } //--------------------------------------------------------- //--------------------------------------------------------- // Interface definitions // Interface definitions //-------------------- //-------------------- Loading Loading
apex/media/framework/api/current.txt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -69,10 +69,12 @@ package android.media { method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException; method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException; method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...); method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...); method @NonNull public static android.media.MediaParser createByName(@NonNull String, @NonNull android.media.MediaParser.OutputConsumer); method @NonNull public static android.media.MediaParser createByName(@NonNull String, @NonNull android.media.MediaParser.OutputConsumer); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method @NonNull public String getParserName(); method @NonNull public String getParserName(); method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat); method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat); method public void release(); method public void release(); method public void seek(@NonNull android.media.MediaParser.SeekPoint); method public void seek(@NonNull android.media.MediaParser.SeekPoint); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method @NonNull public android.media.MediaParser setParameter(@NonNull String, @NonNull Object); method @NonNull public android.media.MediaParser setParameter(@NonNull String, @NonNull Object); method public boolean supportsParameter(@NonNull String); method public boolean supportsParameter(@NonNull String); field public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING = "android.media.mediaparser.adts.enableCbrSeeking"; field public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING = "android.media.mediaparser.adts.enableCbrSeeking"; Loading
apex/media/framework/java/android/media/MediaParser.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.StringDef; import android.annotation.StringDef; import android.media.MediaCodec.CryptoInfo; import android.media.MediaCodec.CryptoInfo; import android.media.metrics.LogSessionId; import android.os.Build; import android.os.Build; import android.text.TextUtils; import android.text.TextUtils; import android.util.Log; import android.util.Log; Loading Loading @@ -74,6 +75,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; import java.util.function.Function; Loading Loading @@ -1066,6 +1068,7 @@ public final class MediaParser { private boolean mReleased; private boolean mReleased; // MediaMetrics fields. // MediaMetrics fields. @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE; private final boolean mCreatedByName; private final boolean mCreatedByName; private final SparseArray<Format> mTrackFormats; private final SparseArray<Format> mTrackFormats; private String mLastObservedExceptionName; private String mLastObservedExceptionName; Loading Loading @@ -1328,6 +1331,7 @@ public final class MediaParser { MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH)); MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH)); nativeSubmitMetrics( nativeSubmitMetrics( // TODO: mLogSessionId, mParserName, mParserName, mCreatedByName, mCreatedByName, String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool), String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool), Loading @@ -1341,6 +1345,15 @@ public final class MediaParser { videoHeight); videoHeight); } } public void setLogSessionId(@NonNull LogSessionId sessionId) { this.mLogSessionId = Objects.requireNonNull(sessionId); } @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } // Private methods. // Private methods. private MediaParser( private MediaParser( Loading Loading @@ -2184,6 +2197,7 @@ public final class MediaParser { // Native methods. // Native methods. private native void nativeSubmitMetrics( private native void nativeSubmitMetrics( // TODO: String logSessionId, String parserName, String parserName, boolean createdByName, boolean createdByName, String parserPool, String parserPool, Loading
core/api/current.txt +17 −9 Original line number Original line Diff line number Diff line Loading @@ -20579,6 +20579,7 @@ package android.media { method public int getChannelConfiguration(); method public int getChannelConfiguration(); method public int getChannelCount(); method public int getChannelCount(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); method public static int getMinBufferSize(int, int, int); method public int getNotificationMarkerPosition(); method public int getNotificationMarkerPosition(); Loading @@ -20601,6 +20602,7 @@ package android.media { method public void release(); method public void release(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener); method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public int setNotificationMarkerPosition(int); method public int setNotificationMarkerPosition(int); method public int setPositionNotificationPeriod(int); method public int setPositionNotificationPeriod(int); method public boolean setPreferredDevice(android.media.AudioDeviceInfo); method public boolean setPreferredDevice(android.media.AudioDeviceInfo); Loading Loading @@ -20716,6 +20718,7 @@ package android.media { method public int getChannelCount(); method public int getChannelCount(); method public int getDualMonoMode(); method public int getDualMonoMode(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public static float getMaxVolume(); method public static float getMaxVolume(); method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); method public static int getMinBufferSize(int, int, int); Loading Loading @@ -20753,6 +20756,7 @@ package android.media { method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); method public int setBufferSizeInFrames(@IntRange(from=0) int); method public int setBufferSizeInFrames(@IntRange(from=0) int); method public boolean setDualMonoMode(int); method public boolean setDualMonoMode(int); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int); method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int); method public int setNotificationMarkerPosition(int); method public int setNotificationMarkerPosition(int); method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); Loading Loading @@ -21307,7 +21311,7 @@ package android.media { method @NonNull public String getDiagnosticInfo(); method @NonNull public String getDiagnosticInfo(); } } public final class MediaCodec implements android.media.metrics.PlaybackComponent { public final class MediaCodec { method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int); method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int); method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler); method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler); method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException; method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException; Loading @@ -21333,7 +21337,6 @@ package android.media { method @NonNull public android.media.MediaFormat getOutputFormat(int); method @NonNull public android.media.MediaFormat getOutputFormat(int); method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int); method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int); method @Nullable public android.media.Image getOutputImage(int); method @Nullable public android.media.Image getOutputImage(int); method public String getPlaybackId(); method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int); method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int); method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer); method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer); method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException; method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException; Loading @@ -21350,7 +21353,6 @@ package android.media { method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler); method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler); method public void setOutputSurface(@NonNull android.view.Surface); method public void setOutputSurface(@NonNull android.view.Surface); method public void setParameters(@Nullable android.os.Bundle); method public void setParameters(@Nullable android.os.Bundle); method public void setPlaybackId(@NonNull String); method public void setVideoScalingMode(int); method public void setVideoScalingMode(int); method public void signalEndOfInputStream(); method public void signalEndOfInputStream(); method public void start(); method public void start(); Loading Loading @@ -21964,7 +21966,7 @@ package android.media { method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds(); method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds(); method public int getOfflineLicenseState(@NonNull byte[]); method public int getOfflineLicenseState(@NonNull byte[]); method public int getOpenSessionCount(); method public int getOpenSessionCount(); method @Nullable public android.media.metrics.PlaybackComponent getPlaybackComponent(@NonNull byte[]); method @Nullable public android.media.MediaDrm.PlaybackComponent getPlaybackComponent(@NonNull byte[]); method @NonNull public byte[] getPropertyByteArray(String); method @NonNull public byte[] getPropertyByteArray(String); method @NonNull public String getPropertyString(@NonNull String); method @NonNull public String getPropertyString(@NonNull String); method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); Loading Loading @@ -22169,6 +22171,11 @@ package android.media { method public void onSessionLostState(@NonNull android.media.MediaDrm, @NonNull byte[]); method public void onSessionLostState(@NonNull android.media.MediaDrm, @NonNull byte[]); } } public final class MediaDrm.PlaybackComponent { method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); } public static final class MediaDrm.ProvisionRequest { public static final class MediaDrm.ProvisionRequest { method @NonNull public byte[] getData(); method @NonNull public byte[] getData(); method @NonNull public String getDefaultUrl(); method @NonNull public String getDefaultUrl(); Loading Loading @@ -22201,6 +22208,7 @@ package android.media { method public long getCachedDuration(); method public long getCachedDuration(); method public android.media.MediaExtractor.CasInfo getCasInfo(int); method public android.media.MediaExtractor.CasInfo getCasInfo(int); method public android.media.DrmInitData getDrmInitData(); method public android.media.DrmInitData getDrmInitData(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo(); method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo(); method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo); method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo); Loading @@ -22222,6 +22230,7 @@ package android.media { method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException; method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException; method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException; method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException; method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public void setMediaCas(@NonNull android.media.MediaCas); method public void setMediaCas(@NonNull android.media.MediaCas); method public void unselectTrack(int); method public void unselectTrack(int); field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 Loading Loading @@ -22825,6 +22834,7 @@ package android.media { method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException; method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException; method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration(); method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration(); method public static final int getAudioSourceMax(); method public static final int getAudioSourceMax(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public int getMaxAmplitude() throws java.lang.IllegalStateException; method public int getMaxAmplitude() throws java.lang.IllegalStateException; method public android.os.PersistableBundle getMetrics(); method public android.os.PersistableBundle getMetrics(); method public android.media.AudioDeviceInfo getPreferredDevice(); method public android.media.AudioDeviceInfo getPreferredDevice(); Loading @@ -22847,6 +22857,7 @@ package android.media { method public void setCaptureRate(double); method public void setCaptureRate(double); method public void setInputSurface(@NonNull android.view.Surface); method public void setInputSurface(@NonNull android.view.Surface); method public void setLocation(float, float); method public void setLocation(float, float); method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId); method public void setMaxDuration(int) throws java.lang.IllegalArgumentException; method public void setMaxDuration(int) throws java.lang.IllegalArgumentException; method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException; method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException; method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException; method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException; Loading Loading @@ -24478,6 +24489,8 @@ package android.media.metrics { } } public final class LogSessionId { public final class LogSessionId { method @NonNull public String getStringId(); field @NonNull public static final android.media.metrics.LogSessionId LOG_SESSION_ID_NONE; } } public class MediaMetricsManager { public class MediaMetricsManager { Loading Loading @@ -24511,11 +24524,6 @@ package android.media.metrics { method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); } } public interface PlaybackComponent { method @NonNull public String getPlaybackId(); method public void setPlaybackId(@NonNull String); } public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable { public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable { method public int describeContents(); method public int describeContents(); method public int getErrorCode(); method public int getErrorCode();
core/api/test-current.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1478,7 +1478,7 @@ package android.media.audiopolicy { package android.media.metrics { package android.media.metrics { public final class LogSessionId { public final class LogSessionId { method @NonNull public String getStringId(); ctor public LogSessionId(@NonNull String); } } } } Loading
media/java/android/media/AudioRecord.java +22 −11 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Context; import android.media.MediaRecorder.Source; import android.media.MediaRecorder.Source; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioPolicy; import android.media.audiopolicy.AudioPolicy; import android.media.metrics.LogSessionId; import android.media.permission.Identity; import android.media.permission.Identity; import android.media.projection.MediaProjection; import android.media.projection.MediaProjection; import android.os.Binder; import android.os.Binder; Loading Loading @@ -282,9 +283,9 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, /** /** * The log session id used for metrics. * The log session id used for metrics. * A null or empty string here means it is not set. * {@link LogSessionId#LOG_SESSION_ID_NONE} here means it is not set. */ */ private String mLogSessionId; @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE; //--------------------------------------------------------- //--------------------------------------------------------- // Constructor, Finalize // Constructor, Finalize Loading Loading @@ -1963,24 +1964,34 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, } } /** /** * Sets a string handle to this AudioRecord for metrics collection. * Sets a {@link LogSessionId} instance to this AudioRecord for metrics collection. * * * @param logSessionId a string which is used to identify this object * @param logSessionId a {@link LogSessionId} instance which is used to * to the metrics service. Proper generated Ids must be obtained * identify this object to the metrics service. Proper generated * from the Java metrics service and should be considered opaque. * Ids must be obtained from the Java metrics service and should * Use null to remove the logSessionId association. * be considered opaque. Use * {@link LogSessionId#LOG_SESSION_ID_NONE} to remove the * logSessionId association. * @throws IllegalStateException if AudioRecord not initialized. * @throws IllegalStateException if AudioRecord not initialized. * * @hide */ */ public void setLogSessionId(@Nullable String logSessionId) { public void setLogSessionId(@NonNull LogSessionId logSessionId) { Objects.requireNonNull(logSessionId); if (mState == STATE_UNINITIALIZED) { if (mState == STATE_UNINITIALIZED) { throw new IllegalStateException("AudioRecord not initialized"); throw new IllegalStateException("AudioRecord not initialized"); } } native_setLogSessionId(logSessionId); String stringId = logSessionId.getStringId(); native_setLogSessionId(stringId); mLogSessionId = logSessionId; mLogSessionId = logSessionId; } } /** * Returns the {@link LogSessionId}. */ @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } //--------------------------------------------------------- //--------------------------------------------------------- // Interface definitions // Interface definitions //-------------------- //-------------------- Loading