Loading apex/media/framework/api/current.txt +2 −0 Original line number 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 @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 android.media.metrics.LogSessionId getLogSessionId(); method @NonNull public String getParserName(); method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat); method public void release(); 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 public boolean supportsParameter(@NonNull String); 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 Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringDef; import android.media.MediaCodec.CryptoInfo; import android.media.metrics.LogSessionId; import android.os.Build; import android.text.TextUtils; import android.util.Log; Loading Loading @@ -74,6 +75,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; Loading Loading @@ -1066,6 +1068,7 @@ public final class MediaParser { private boolean mReleased; // MediaMetrics fields. @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE; private final boolean mCreatedByName; private final SparseArray<Format> mTrackFormats; private String mLastObservedExceptionName; Loading Loading @@ -1328,6 +1331,7 @@ public final class MediaParser { MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH)); nativeSubmitMetrics( // TODO: mLogSessionId, mParserName, mCreatedByName, String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool), Loading @@ -1341,6 +1345,15 @@ public final class MediaParser { videoHeight); } public void setLogSessionId(@NonNull LogSessionId sessionId) { this.mLogSessionId = Objects.requireNonNull(sessionId); } @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } // Private methods. private MediaParser( Loading Loading @@ -2184,6 +2197,7 @@ public final class MediaParser { // Native methods. private native void nativeSubmitMetrics( // TODO: String logSessionId, String parserName, boolean createdByName, String parserPool, Loading core/api/current.txt +17 −9 Original line number Diff line number Diff line Loading @@ -20578,6 +20578,7 @@ package android.media { method public int getChannelConfiguration(); method public int getChannelCount(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); method public int getNotificationMarkerPosition(); Loading @@ -20600,6 +20601,7 @@ package android.media { method public void release(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.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 setPositionNotificationPeriod(int); method public boolean setPreferredDevice(android.media.AudioDeviceInfo); Loading Loading @@ -20715,6 +20717,7 @@ package android.media { method public int getChannelCount(); method public int getDualMonoMode(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public static float getMaxVolume(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); Loading Loading @@ -20752,6 +20755,7 @@ package android.media { method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); method public int setBufferSizeInFrames(@IntRange(from=0) 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 setNotificationMarkerPosition(int); method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); Loading Loading @@ -21961,7 +21965,7 @@ package android.media { method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds(); method public int getOfflineLicenseState(@NonNull byte[]); 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 String getPropertyString(@NonNull String); method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); Loading Loading @@ -22166,6 +22170,11 @@ package android.media { 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 { method @NonNull public byte[] getData(); method @NonNull public String getDefaultUrl(); Loading @@ -22190,7 +22199,7 @@ package android.media { ctor public MediaDrmResetException(String); } public final class MediaExtractor implements android.media.metrics.PlaybackComponent { public final class MediaExtractor { ctor public MediaExtractor(); method public boolean advance(); method protected void finalize(); Loading @@ -22198,8 +22207,8 @@ package android.media { method public long getCachedDuration(); method public android.media.MediaExtractor.CasInfo getCasInfo(int); method public android.media.DrmInitData getDrmInitData(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method @NonNull public String getPlaybackId(); method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo(); method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo); method public int getSampleFlags(); Loading @@ -22220,8 +22229,8 @@ 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 java.io.FileDescriptor) 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 setPlaybackId(@NonNull String); method public void unselectTrack(int); field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 field public static final int SAMPLE_FLAG_PARTIAL_FRAME = 4; // 0x4 Loading Loading @@ -22823,6 +22832,7 @@ package android.media { method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException; method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration(); method public static final int getAudioSourceMax(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public int getMaxAmplitude() throws java.lang.IllegalStateException; method public android.os.PersistableBundle getMetrics(); method public android.media.AudioDeviceInfo getPreferredDevice(); Loading @@ -22845,6 +22855,7 @@ package android.media { method public void setCaptureRate(double); method public void setInputSurface(@NonNull android.view.Surface); 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 setMaxFileSize(long) throws java.lang.IllegalArgumentException; method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException; Loading Loading @@ -24476,6 +24487,8 @@ package android.media.metrics { } 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 { Loading Loading @@ -24509,11 +24522,6 @@ package android.media.metrics { 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 { method public int describeContents(); method public int getErrorCode(); core/api/test-current.txt +1 −1 Original line number Diff line number Diff line Loading @@ -1483,7 +1483,7 @@ package android.media.audiopolicy { package android.media.metrics { 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 Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Context; import android.media.MediaRecorder.Source; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioPolicy; import android.media.metrics.LogSessionId; import android.media.permission.Identity; import android.media.projection.MediaProjection; import android.os.Binder; Loading Loading @@ -282,9 +283,9 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, /** * 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 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 * to the metrics service. Proper generated Ids must be obtained * from the Java metrics service and should be considered opaque. * Use null to remove the logSessionId association. * @param logSessionId a {@link LogSessionId} instance which is used to * identify this object to the metrics service. Proper generated * Ids must be obtained from the Java metrics service and should * be considered opaque. Use * {@link LogSessionId#LOG_SESSION_ID_NONE} to remove the * logSessionId association. * @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) { throw new IllegalStateException("AudioRecord not initialized"); } native_setLogSessionId(logSessionId); String stringId = logSessionId.getStringId(); native_setLogSessionId(stringId); mLogSessionId = logSessionId; } /** * Returns the {@link LogSessionId}. */ @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } //--------------------------------------------------------- // Interface definitions //-------------------- Loading Loading
apex/media/framework/api/current.txt +2 −0 Original line number 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 @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 android.media.metrics.LogSessionId getLogSessionId(); method @NonNull public String getParserName(); method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat); method public void release(); 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 public boolean supportsParameter(@NonNull String); 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 Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringDef; import android.media.MediaCodec.CryptoInfo; import android.media.metrics.LogSessionId; import android.os.Build; import android.text.TextUtils; import android.util.Log; Loading Loading @@ -74,6 +75,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; Loading Loading @@ -1066,6 +1068,7 @@ public final class MediaParser { private boolean mReleased; // MediaMetrics fields. @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE; private final boolean mCreatedByName; private final SparseArray<Format> mTrackFormats; private String mLastObservedExceptionName; Loading Loading @@ -1328,6 +1331,7 @@ public final class MediaParser { MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH)); nativeSubmitMetrics( // TODO: mLogSessionId, mParserName, mCreatedByName, String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool), Loading @@ -1341,6 +1345,15 @@ public final class MediaParser { videoHeight); } public void setLogSessionId(@NonNull LogSessionId sessionId) { this.mLogSessionId = Objects.requireNonNull(sessionId); } @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } // Private methods. private MediaParser( Loading Loading @@ -2184,6 +2197,7 @@ public final class MediaParser { // Native methods. private native void nativeSubmitMetrics( // TODO: String logSessionId, String parserName, boolean createdByName, String parserPool, Loading
core/api/current.txt +17 −9 Original line number Diff line number Diff line Loading @@ -20578,6 +20578,7 @@ package android.media { method public int getChannelConfiguration(); method public int getChannelCount(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); method public int getNotificationMarkerPosition(); Loading @@ -20600,6 +20601,7 @@ package android.media { method public void release(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.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 setPositionNotificationPeriod(int); method public boolean setPreferredDevice(android.media.AudioDeviceInfo); Loading Loading @@ -20715,6 +20717,7 @@ package android.media { method public int getChannelCount(); method public int getDualMonoMode(); method @NonNull public android.media.AudioFormat getFormat(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public static float getMaxVolume(); method public android.os.PersistableBundle getMetrics(); method public static int getMinBufferSize(int, int, int); Loading Loading @@ -20752,6 +20755,7 @@ package android.media { method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); method public int setBufferSizeInFrames(@IntRange(from=0) 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 setNotificationMarkerPosition(int); method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); Loading Loading @@ -21961,7 +21965,7 @@ package android.media { method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds(); method public int getOfflineLicenseState(@NonNull byte[]); 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 String getPropertyString(@NonNull String); method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); Loading Loading @@ -22166,6 +22170,11 @@ package android.media { 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 { method @NonNull public byte[] getData(); method @NonNull public String getDefaultUrl(); Loading @@ -22190,7 +22199,7 @@ package android.media { ctor public MediaDrmResetException(String); } public final class MediaExtractor implements android.media.metrics.PlaybackComponent { public final class MediaExtractor { ctor public MediaExtractor(); method public boolean advance(); method protected void finalize(); Loading @@ -22198,8 +22207,8 @@ package android.media { method public long getCachedDuration(); method public android.media.MediaExtractor.CasInfo getCasInfo(int); method public android.media.DrmInitData getDrmInitData(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public android.os.PersistableBundle getMetrics(); method @NonNull public String getPlaybackId(); method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo(); method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo); method public int getSampleFlags(); Loading @@ -22220,8 +22229,8 @@ 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 java.io.FileDescriptor) 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 setPlaybackId(@NonNull String); method public void unselectTrack(int); field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 field public static final int SAMPLE_FLAG_PARTIAL_FRAME = 4; // 0x4 Loading Loading @@ -22823,6 +22832,7 @@ package android.media { method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException; method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration(); method public static final int getAudioSourceMax(); method @NonNull public android.media.metrics.LogSessionId getLogSessionId(); method public int getMaxAmplitude() throws java.lang.IllegalStateException; method public android.os.PersistableBundle getMetrics(); method public android.media.AudioDeviceInfo getPreferredDevice(); Loading @@ -22845,6 +22855,7 @@ package android.media { method public void setCaptureRate(double); method public void setInputSurface(@NonNull android.view.Surface); 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 setMaxFileSize(long) throws java.lang.IllegalArgumentException; method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException; Loading Loading @@ -24476,6 +24487,8 @@ package android.media.metrics { } 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 { Loading Loading @@ -24509,11 +24522,6 @@ package android.media.metrics { 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 { method public int describeContents(); method public int getErrorCode();
core/api/test-current.txt +1 −1 Original line number Diff line number Diff line Loading @@ -1483,7 +1483,7 @@ package android.media.audiopolicy { package android.media.metrics { 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 Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Context; import android.media.MediaRecorder.Source; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioPolicy; import android.media.metrics.LogSessionId; import android.media.permission.Identity; import android.media.projection.MediaProjection; import android.os.Binder; Loading Loading @@ -282,9 +283,9 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, /** * 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 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 * to the metrics service. Proper generated Ids must be obtained * from the Java metrics service and should be considered opaque. * Use null to remove the logSessionId association. * @param logSessionId a {@link LogSessionId} instance which is used to * identify this object to the metrics service. Proper generated * Ids must be obtained from the Java metrics service and should * be considered opaque. Use * {@link LogSessionId#LOG_SESSION_ID_NONE} to remove the * logSessionId association. * @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) { throw new IllegalStateException("AudioRecord not initialized"); } native_setLogSessionId(logSessionId); String stringId = logSessionId.getStringId(); native_setLogSessionId(stringId); mLogSessionId = logSessionId; } /** * Returns the {@link LogSessionId}. */ @NonNull public LogSessionId getLogSessionId() { return mLogSessionId; } //--------------------------------------------------------- // Interface definitions //-------------------- Loading