Loading media/libmedia/JAudioTrack.cpp +51 −1 Original line number Diff line number Diff line Loading @@ -112,6 +112,11 @@ size_t JAudioTrack::channelCount() { return env->CallIntMethod(mAudioTrackObj, jGetChannelCount); } uint32_t JAudioTrack::latency() { // TODO: Currently hard-coded as returning zero. return 0; } status_t JAudioTrack::getPosition(uint32_t *position) { if (position == NULL) { return BAD_VALUE; Loading @@ -125,7 +130,7 @@ status_t JAudioTrack::getPosition(uint32_t *position) { return NO_ERROR; } bool JAudioTrack::getTimeStamp(AudioTimestamp& timestamp) { bool JAudioTrack::getTimestamp(AudioTimestamp& timestamp) { JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass jAudioTimeStampCls = env->FindClass("android/media/AudioTimestamp"); Loading Loading @@ -392,6 +397,51 @@ audio_format_t JAudioTrack::format() { return audioFormatToNative(javaFormat); } status_t JAudioTrack::dump(int fd, const Vector<String16>& args __unused) const { String8 result; result.append(" JAudioTrack::dump\n"); // TODO: Remove logs that includes unavailable information from below. // result.appendFormat(" status(%d), state(%d), session Id(%d), flags(%#x)\n", // mStatus, mState, mSessionId, mFlags); // result.appendFormat(" stream type(%d), left - right volume(%f, %f)\n", // (mStreamType == AUDIO_STREAM_DEFAULT) ? // audio_attributes_to_stream_type(&mAttributes) : mStreamType, // mVolume[AUDIO_INTERLEAVE_LEFT], mVolume[AUDIO_INTERLEAVE_RIGHT]); // result.appendFormat(" format(%#x), channel mask(%#x), channel count(%u)\n", // format(), mChannelMask, channelCount()); // result.appendFormat(" sample rate(%u), original sample rate(%u), speed(%f)\n", // getSampleRate(), mOriginalSampleRate, mPlaybackRate.mSpeed); // result.appendFormat(" frame count(%zu), req. frame count(%zu)\n", // frameCount(), mReqFrameCount); // result.appendFormat(" notif. frame count(%u), req. notif. frame count(%u)," // " req. notif. per buff(%u)\n", // mNotificationFramesAct, mNotificationFramesReq, mNotificationsPerBufferReq); // result.appendFormat(" latency (%d), selected device Id(%d), routed device Id(%d)\n", // latency(), mSelectedDeviceId, getRoutedDeviceId()); // result.appendFormat(" output(%d) AF latency (%u) AF frame count(%zu) AF SampleRate(%u)\n", // mOutput, mAfLatency, mAfFrameCount, mAfSampleRate); ::write(fd, result.string(), result.size()); return NO_ERROR; } audio_port_handle_t JAudioTrack::getRoutedDeviceId() { JNIEnv *env = AndroidRuntime::getJNIEnv(); jmethodID jGetRoutedDevice = env->GetMethodID(mAudioTrackCls, "getRoutedDevice", "()Landroid/media/AudioDeviceInfo;"); jobject jAudioDeviceInfoObj = env->CallObjectMethod(mAudioTrackObj, jGetRoutedDevice); if (env->IsSameObject(jAudioDeviceInfoObj, NULL)) { return AUDIO_PORT_HANDLE_NONE; } jclass jAudioDeviceInfoCls = env->FindClass("Landroid/media/AudioDeviceInfo"); jmethodID jGetId = env->GetMethodID(jAudioDeviceInfoCls, "getId", "()I"); jint routedDeviceId = env->CallIntMethod(jAudioDeviceInfoObj, jGetId); return routedDeviceId; } jobject JAudioTrack::createVolumeShaperConfigurationObj( const sp<media::VolumeShaper::Configuration>& config) { Loading media/libmedia/include/media/JAudioTrack.h +18 −1 Original line number Diff line number Diff line Loading @@ -104,6 +104,12 @@ public: size_t frameCount(); size_t channelCount(); /* Returns this track's estimated latency in milliseconds. * This includes the latency due to AudioTrack buffer size, AudioMixer (if any) * and audio hardware driver. */ uint32_t latency(); /* Return the total number of frames played since playback start. * The counter will wrap (overflow) periodically, e.g. every ~27 hours at 44.1 kHz. * It is reset to zero by flush(), reload(), and stop(). Loading @@ -130,7 +136,7 @@ public: * Returns true if timestamp is valid. * The timestamp parameter is undefined on return, if false is returned. */ bool getTimeStamp(AudioTimestamp& timestamp); bool getTimestamp(AudioTimestamp& timestamp); /* Set source playback rate for timestretch * 1.0 is normal speed: < 1.0 is slower, > 1.0 is faster Loading Loading @@ -253,6 +259,17 @@ public: audio_format_t format(); /* * Dumps the state of an audio track. * Not a general-purpose API; intended only for use by media player service to dump its tracks. */ status_t dump(int fd, const Vector<String16>& args) const; /* Returns the ID of the audio device actually used by the output to which this AudioTrack is * attached. When the AudioTrack is inactive, it will return AUDIO_PORT_HANDLE_NONE. */ audio_port_handle_t getRoutedDeviceId(); private: jclass mAudioTrackCls; jobject mAudioTrackObj; Loading Loading
media/libmedia/JAudioTrack.cpp +51 −1 Original line number Diff line number Diff line Loading @@ -112,6 +112,11 @@ size_t JAudioTrack::channelCount() { return env->CallIntMethod(mAudioTrackObj, jGetChannelCount); } uint32_t JAudioTrack::latency() { // TODO: Currently hard-coded as returning zero. return 0; } status_t JAudioTrack::getPosition(uint32_t *position) { if (position == NULL) { return BAD_VALUE; Loading @@ -125,7 +130,7 @@ status_t JAudioTrack::getPosition(uint32_t *position) { return NO_ERROR; } bool JAudioTrack::getTimeStamp(AudioTimestamp& timestamp) { bool JAudioTrack::getTimestamp(AudioTimestamp& timestamp) { JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass jAudioTimeStampCls = env->FindClass("android/media/AudioTimestamp"); Loading Loading @@ -392,6 +397,51 @@ audio_format_t JAudioTrack::format() { return audioFormatToNative(javaFormat); } status_t JAudioTrack::dump(int fd, const Vector<String16>& args __unused) const { String8 result; result.append(" JAudioTrack::dump\n"); // TODO: Remove logs that includes unavailable information from below. // result.appendFormat(" status(%d), state(%d), session Id(%d), flags(%#x)\n", // mStatus, mState, mSessionId, mFlags); // result.appendFormat(" stream type(%d), left - right volume(%f, %f)\n", // (mStreamType == AUDIO_STREAM_DEFAULT) ? // audio_attributes_to_stream_type(&mAttributes) : mStreamType, // mVolume[AUDIO_INTERLEAVE_LEFT], mVolume[AUDIO_INTERLEAVE_RIGHT]); // result.appendFormat(" format(%#x), channel mask(%#x), channel count(%u)\n", // format(), mChannelMask, channelCount()); // result.appendFormat(" sample rate(%u), original sample rate(%u), speed(%f)\n", // getSampleRate(), mOriginalSampleRate, mPlaybackRate.mSpeed); // result.appendFormat(" frame count(%zu), req. frame count(%zu)\n", // frameCount(), mReqFrameCount); // result.appendFormat(" notif. frame count(%u), req. notif. frame count(%u)," // " req. notif. per buff(%u)\n", // mNotificationFramesAct, mNotificationFramesReq, mNotificationsPerBufferReq); // result.appendFormat(" latency (%d), selected device Id(%d), routed device Id(%d)\n", // latency(), mSelectedDeviceId, getRoutedDeviceId()); // result.appendFormat(" output(%d) AF latency (%u) AF frame count(%zu) AF SampleRate(%u)\n", // mOutput, mAfLatency, mAfFrameCount, mAfSampleRate); ::write(fd, result.string(), result.size()); return NO_ERROR; } audio_port_handle_t JAudioTrack::getRoutedDeviceId() { JNIEnv *env = AndroidRuntime::getJNIEnv(); jmethodID jGetRoutedDevice = env->GetMethodID(mAudioTrackCls, "getRoutedDevice", "()Landroid/media/AudioDeviceInfo;"); jobject jAudioDeviceInfoObj = env->CallObjectMethod(mAudioTrackObj, jGetRoutedDevice); if (env->IsSameObject(jAudioDeviceInfoObj, NULL)) { return AUDIO_PORT_HANDLE_NONE; } jclass jAudioDeviceInfoCls = env->FindClass("Landroid/media/AudioDeviceInfo"); jmethodID jGetId = env->GetMethodID(jAudioDeviceInfoCls, "getId", "()I"); jint routedDeviceId = env->CallIntMethod(jAudioDeviceInfoObj, jGetId); return routedDeviceId; } jobject JAudioTrack::createVolumeShaperConfigurationObj( const sp<media::VolumeShaper::Configuration>& config) { Loading
media/libmedia/include/media/JAudioTrack.h +18 −1 Original line number Diff line number Diff line Loading @@ -104,6 +104,12 @@ public: size_t frameCount(); size_t channelCount(); /* Returns this track's estimated latency in milliseconds. * This includes the latency due to AudioTrack buffer size, AudioMixer (if any) * and audio hardware driver. */ uint32_t latency(); /* Return the total number of frames played since playback start. * The counter will wrap (overflow) periodically, e.g. every ~27 hours at 44.1 kHz. * It is reset to zero by flush(), reload(), and stop(). Loading @@ -130,7 +136,7 @@ public: * Returns true if timestamp is valid. * The timestamp parameter is undefined on return, if false is returned. */ bool getTimeStamp(AudioTimestamp& timestamp); bool getTimestamp(AudioTimestamp& timestamp); /* Set source playback rate for timestretch * 1.0 is normal speed: < 1.0 is slower, > 1.0 is faster Loading Loading @@ -253,6 +259,17 @@ public: audio_format_t format(); /* * Dumps the state of an audio track. * Not a general-purpose API; intended only for use by media player service to dump its tracks. */ status_t dump(int fd, const Vector<String16>& args) const; /* Returns the ID of the audio device actually used by the output to which this AudioTrack is * attached. When the AudioTrack is inactive, it will return AUDIO_PORT_HANDLE_NONE. */ audio_port_handle_t getRoutedDeviceId(); private: jclass mAudioTrackCls; jobject mAudioTrackObj; Loading