Loading media/libaudioclient/AudioTrack.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -817,7 +817,7 @@ status_t AudioTrack::start() (void) updateAndGetPosition_l(); // save start timestamp if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { if (getTimestamp_l(mStartTs) != OK) { mStartTs.mPosition = 0; } Loading @@ -838,7 +838,7 @@ status_t AudioTrack::start() mTimestampStaleTimeReported = false; mPreviousLocation = ExtendedTimestamp::LOCATION_INVALID; if (!isOffloadedOrDirect_l() if (!isAfTrackOffloadedOrDirect_l() && mStartEts.mTimeNs[ExtendedTimestamp::LOCATION_SERVER] > 0) { // Server side has consumed something, but is it finished consuming? // It is possible since flush and stop are asynchronous that the server Loading Loading @@ -1917,6 +1917,7 @@ status_t AudioTrack::createTrack_l() mAfChannelCount = audio_channel_count_from_out_mask(output.afChannelMask); mAfFormat = output.afFormat; mAfLatency = output.afLatencyMs; mAfTrackFlags = output.afTrackFlags; mLatency = mAfLatency + (1000LL * mFrameCount) / mSampleRate; Loading Loading @@ -3182,7 +3183,7 @@ status_t AudioTrack::getTimestamp_l(AudioTimestamp& timestamp) // To avoid a race, read the presented frames first. This ensures that presented <= consumed. status_t status; if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { // use Binder to get timestamp media::AudioTimestampInternal ts; mAudioTrack->getTimestamp(&ts, &status); Loading Loading @@ -3294,7 +3295,7 @@ status_t AudioTrack::getTimestamp_l(AudioTimestamp& timestamp) ALOGV_IF(status != WOULD_BLOCK, "%s(%d): getTimestamp error:%#x", __func__, mPortId, status); return status; } if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { if (isOffloaded_l() && (mState == STATE_PAUSED || mState == STATE_PAUSED_STOPPING)) { // use cached paused position in case another offloaded track is running. timestamp.mPosition = mPausedPosition; Loading Loading @@ -3740,7 +3741,7 @@ bool AudioTrack::hasStarted() // This is conservatively figured - if we encounter an unexpected error // then we will not wait. bool wait = false; if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { AudioTimestamp ts; status_t status = getTimestamp_l(ts); if (status == WOULD_BLOCK) { Loading media/libaudioclient/IAudioFlinger.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,8 @@ IAudioFlinger::CreateTrackOutput::toAidl() const { legacy2aidl_audio_channel_mask_t_AudioChannelLayout(afChannelMask, false /*isInput*/)); aidl.afFormat = VALUE_OR_RETURN( legacy2aidl_audio_format_t_AudioFormatDescription(afFormat)); aidl.afTrackFlags = VALUE_OR_RETURN( legacy2aidl_audio_output_flags_t_int32_t_mask(afTrackFlags)); aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId)); aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId)); aidl.audioTrack = audioTrack; Loading Loading @@ -144,6 +146,8 @@ IAudioFlinger::CreateTrackOutput::fromAidl( false /*isInput*/)); legacy.afFormat = VALUE_OR_RETURN( aidl2legacy_AudioFormatDescription_audio_format_t(aidl.afFormat)); legacy.afTrackFlags = VALUE_OR_RETURN( aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.afTrackFlags)); legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId)); legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId)); legacy.audioTrack = aidl.audioTrack; Loading media/libaudioclient/aidl/android/media/CreateTrackResponse.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ parcelable CreateTrackResponse { AudioChannelLayout afChannelMask; AudioFormatDescription afFormat; int afLatencyMs; int afTrackFlags; /** Interpreted as audio_io_handle_t. */ int outputId; /** Interpreted as audio_port_handle_t. */ Loading media/libaudioclient/include/media/AudioTrack.h +6 −0 Original line number Diff line number Diff line Loading @@ -1238,6 +1238,11 @@ public: bool isDirect_l() const { return (mFlags & AUDIO_OUTPUT_FLAG_DIRECT) != 0; } bool isAfTrackOffloadedOrDirect_l() const { return isOffloadedOrDirect_l() || (mAfTrackFlags & (AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD| AUDIO_OUTPUT_FLAG_DIRECT)) != 0; } // pure pcm data is mixable (which excludes HW_AV_SYNC, with embedded timing) bool isPurePcmData_l() const { return audio_is_linear_pcm(mFormat) Loading Loading @@ -1295,6 +1300,7 @@ public: uint32_t mAfSampleRate; // AudioFlinger sample rate uint32_t mAfChannelCount; // AudioFlinger channel count audio_format_t mAfFormat; // AudioFlinger format audio_output_flags_t mAfTrackFlags; // AudioFlinger track flags // constant after constructor or set() audio_format_t mFormat; // as requested by client, not forced to 16-bit Loading media/libaudioclient/include/media/IAudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ public: uint32_t afLatencyMs; audio_channel_mask_t afChannelMask; audio_format_t afFormat; audio_output_flags_t afTrackFlags; audio_io_handle_t outputId; audio_port_handle_t portId; sp<media::IAudioTrack> audioTrack; Loading Loading
media/libaudioclient/AudioTrack.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -817,7 +817,7 @@ status_t AudioTrack::start() (void) updateAndGetPosition_l(); // save start timestamp if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { if (getTimestamp_l(mStartTs) != OK) { mStartTs.mPosition = 0; } Loading @@ -838,7 +838,7 @@ status_t AudioTrack::start() mTimestampStaleTimeReported = false; mPreviousLocation = ExtendedTimestamp::LOCATION_INVALID; if (!isOffloadedOrDirect_l() if (!isAfTrackOffloadedOrDirect_l() && mStartEts.mTimeNs[ExtendedTimestamp::LOCATION_SERVER] > 0) { // Server side has consumed something, but is it finished consuming? // It is possible since flush and stop are asynchronous that the server Loading Loading @@ -1917,6 +1917,7 @@ status_t AudioTrack::createTrack_l() mAfChannelCount = audio_channel_count_from_out_mask(output.afChannelMask); mAfFormat = output.afFormat; mAfLatency = output.afLatencyMs; mAfTrackFlags = output.afTrackFlags; mLatency = mAfLatency + (1000LL * mFrameCount) / mSampleRate; Loading Loading @@ -3182,7 +3183,7 @@ status_t AudioTrack::getTimestamp_l(AudioTimestamp& timestamp) // To avoid a race, read the presented frames first. This ensures that presented <= consumed. status_t status; if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { // use Binder to get timestamp media::AudioTimestampInternal ts; mAudioTrack->getTimestamp(&ts, &status); Loading Loading @@ -3294,7 +3295,7 @@ status_t AudioTrack::getTimestamp_l(AudioTimestamp& timestamp) ALOGV_IF(status != WOULD_BLOCK, "%s(%d): getTimestamp error:%#x", __func__, mPortId, status); return status; } if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { if (isOffloaded_l() && (mState == STATE_PAUSED || mState == STATE_PAUSED_STOPPING)) { // use cached paused position in case another offloaded track is running. timestamp.mPosition = mPausedPosition; Loading Loading @@ -3740,7 +3741,7 @@ bool AudioTrack::hasStarted() // This is conservatively figured - if we encounter an unexpected error // then we will not wait. bool wait = false; if (isOffloadedOrDirect_l()) { if (isAfTrackOffloadedOrDirect_l()) { AudioTimestamp ts; status_t status = getTimestamp_l(ts); if (status == WOULD_BLOCK) { Loading
media/libaudioclient/IAudioFlinger.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,8 @@ IAudioFlinger::CreateTrackOutput::toAidl() const { legacy2aidl_audio_channel_mask_t_AudioChannelLayout(afChannelMask, false /*isInput*/)); aidl.afFormat = VALUE_OR_RETURN( legacy2aidl_audio_format_t_AudioFormatDescription(afFormat)); aidl.afTrackFlags = VALUE_OR_RETURN( legacy2aidl_audio_output_flags_t_int32_t_mask(afTrackFlags)); aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId)); aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId)); aidl.audioTrack = audioTrack; Loading Loading @@ -144,6 +146,8 @@ IAudioFlinger::CreateTrackOutput::fromAidl( false /*isInput*/)); legacy.afFormat = VALUE_OR_RETURN( aidl2legacy_AudioFormatDescription_audio_format_t(aidl.afFormat)); legacy.afTrackFlags = VALUE_OR_RETURN( aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.afTrackFlags)); legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId)); legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId)); legacy.audioTrack = aidl.audioTrack; Loading
media/libaudioclient/aidl/android/media/CreateTrackResponse.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ parcelable CreateTrackResponse { AudioChannelLayout afChannelMask; AudioFormatDescription afFormat; int afLatencyMs; int afTrackFlags; /** Interpreted as audio_io_handle_t. */ int outputId; /** Interpreted as audio_port_handle_t. */ Loading
media/libaudioclient/include/media/AudioTrack.h +6 −0 Original line number Diff line number Diff line Loading @@ -1238,6 +1238,11 @@ public: bool isDirect_l() const { return (mFlags & AUDIO_OUTPUT_FLAG_DIRECT) != 0; } bool isAfTrackOffloadedOrDirect_l() const { return isOffloadedOrDirect_l() || (mAfTrackFlags & (AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD| AUDIO_OUTPUT_FLAG_DIRECT)) != 0; } // pure pcm data is mixable (which excludes HW_AV_SYNC, with embedded timing) bool isPurePcmData_l() const { return audio_is_linear_pcm(mFormat) Loading Loading @@ -1295,6 +1300,7 @@ public: uint32_t mAfSampleRate; // AudioFlinger sample rate uint32_t mAfChannelCount; // AudioFlinger channel count audio_format_t mAfFormat; // AudioFlinger format audio_output_flags_t mAfTrackFlags; // AudioFlinger track flags // constant after constructor or set() audio_format_t mFormat; // as requested by client, not forced to 16-bit Loading
media/libaudioclient/include/media/IAudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ public: uint32_t afLatencyMs; audio_channel_mask_t afChannelMask; audio_format_t afFormat; audio_output_flags_t afTrackFlags; audio_io_handle_t outputId; audio_port_handle_t portId; sp<media::IAudioTrack> audioTrack; Loading