Loading include/media/AudioTrack.h +5 −3 Original line number Diff line number Diff line Loading @@ -139,13 +139,15 @@ public: * latency of the track. The actual size selected by the AudioTrack could be * larger if the requested size is not compatible with current audio HAL * latency. * flags: Reserved for future use. * flags: See comments on audio_policy_output_flags_t in <system/audio_policy.h>. * cbf: Callback function. If not null, this function is called periodically * to request new PCM data. * user: Context for use by the callback receiver. * notificationFrames: The callback function is called each time notificationFrames PCM * frames have been consumed from track input buffer. * sessionId: Specific session ID, or zero to use default. * threadCanCallJava: Whether callbacks are made from an attached thread and thus can call JNI. * If not present in parameter list, then fixed at false. */ AudioTrack( audio_stream_type_t streamType, Loading media/libmedia/AudioTrack.cpp +20 −3 Original line number Diff line number Diff line Loading @@ -226,7 +226,8 @@ status_t AudioTrack::set( // force direct flag if format is not linear PCM if (!audio_is_linear_pcm(format)) { flags = (audio_policy_output_flags_t) (flags | AUDIO_POLICY_OUTPUT_FLAG_DIRECT); flags = (audio_policy_output_flags_t) ((flags | AUDIO_POLICY_OUTPUT_FLAG_DIRECT) & ~AUDIO_POLICY_OUTPUT_FLAG_FAST); } if (!audio_is_output_channel(channelMask)) { Loading @@ -252,6 +253,7 @@ status_t AudioTrack::set( mNotificationFramesReq = notificationFrames; mSessionId = sessionId; mAuxEffectId = 0; mCbf = cbf; // create the IAudioTrack status_t status = createTrack_l(streamType, Loading Loading @@ -280,7 +282,6 @@ status_t AudioTrack::set( mSharedBuffer = sharedBuffer; mMuted = false; mActive = false; mCbf = cbf; mUserData = user; mLoopCount = 0; mMarkerPosition = 0; Loading Loading @@ -762,6 +763,18 @@ status_t AudioTrack::createTrack_l( return NO_INIT; } // Client decides whether the track is TIMED (see below), but can only express a preference // for FAST. Server will perform additional tests. if ((flags & AUDIO_POLICY_OUTPUT_FLAG_FAST) && !( // either of these use cases: // use case 1: shared buffer (sharedBuffer != 0) || // use case 2: callback handler (mCbf != NULL))) { ALOGW("AUDIO_POLICY_OUTPUT_FLAG_FAST denied"); flags = (audio_policy_output_flags_t) (flags & ~AUDIO_POLICY_OUTPUT_FLAG_FAST); } mNotificationFramesAct = mNotificationFramesReq; if (!audio_is_linear_pcm(format)) { if (sharedBuffer != 0) { Loading @@ -786,7 +799,7 @@ status_t AudioTrack::createTrack_l( if (mNotificationFramesAct > (uint32_t)frameCount/2) { mNotificationFramesAct = frameCount/2; } if (frameCount < minFrameCount) { if (frameCount < minFrameCount && !(flags & AUDIO_POLICY_OUTPUT_FLAG_FAST)) { // not ALOGW because it happens all the time when playing key clicks over A2DP ALOGV("Minimum buffer size corrected from %d to %d", frameCount, minFrameCount); Loading @@ -807,6 +820,10 @@ status_t AudioTrack::createTrack_l( if (mIsTimed) { trackFlags |= IAudioFlinger::TRACK_TIMED; } if (flags & AUDIO_POLICY_OUTPUT_FLAG_FAST) { trackFlags |= IAudioFlinger::TRACK_FAST; } sp<IAudioTrack> track = audioFlinger->createTrack(getpid(), streamType, sampleRate, Loading Loading
include/media/AudioTrack.h +5 −3 Original line number Diff line number Diff line Loading @@ -139,13 +139,15 @@ public: * latency of the track. The actual size selected by the AudioTrack could be * larger if the requested size is not compatible with current audio HAL * latency. * flags: Reserved for future use. * flags: See comments on audio_policy_output_flags_t in <system/audio_policy.h>. * cbf: Callback function. If not null, this function is called periodically * to request new PCM data. * user: Context for use by the callback receiver. * notificationFrames: The callback function is called each time notificationFrames PCM * frames have been consumed from track input buffer. * sessionId: Specific session ID, or zero to use default. * threadCanCallJava: Whether callbacks are made from an attached thread and thus can call JNI. * If not present in parameter list, then fixed at false. */ AudioTrack( audio_stream_type_t streamType, Loading
media/libmedia/AudioTrack.cpp +20 −3 Original line number Diff line number Diff line Loading @@ -226,7 +226,8 @@ status_t AudioTrack::set( // force direct flag if format is not linear PCM if (!audio_is_linear_pcm(format)) { flags = (audio_policy_output_flags_t) (flags | AUDIO_POLICY_OUTPUT_FLAG_DIRECT); flags = (audio_policy_output_flags_t) ((flags | AUDIO_POLICY_OUTPUT_FLAG_DIRECT) & ~AUDIO_POLICY_OUTPUT_FLAG_FAST); } if (!audio_is_output_channel(channelMask)) { Loading @@ -252,6 +253,7 @@ status_t AudioTrack::set( mNotificationFramesReq = notificationFrames; mSessionId = sessionId; mAuxEffectId = 0; mCbf = cbf; // create the IAudioTrack status_t status = createTrack_l(streamType, Loading Loading @@ -280,7 +282,6 @@ status_t AudioTrack::set( mSharedBuffer = sharedBuffer; mMuted = false; mActive = false; mCbf = cbf; mUserData = user; mLoopCount = 0; mMarkerPosition = 0; Loading Loading @@ -762,6 +763,18 @@ status_t AudioTrack::createTrack_l( return NO_INIT; } // Client decides whether the track is TIMED (see below), but can only express a preference // for FAST. Server will perform additional tests. if ((flags & AUDIO_POLICY_OUTPUT_FLAG_FAST) && !( // either of these use cases: // use case 1: shared buffer (sharedBuffer != 0) || // use case 2: callback handler (mCbf != NULL))) { ALOGW("AUDIO_POLICY_OUTPUT_FLAG_FAST denied"); flags = (audio_policy_output_flags_t) (flags & ~AUDIO_POLICY_OUTPUT_FLAG_FAST); } mNotificationFramesAct = mNotificationFramesReq; if (!audio_is_linear_pcm(format)) { if (sharedBuffer != 0) { Loading @@ -786,7 +799,7 @@ status_t AudioTrack::createTrack_l( if (mNotificationFramesAct > (uint32_t)frameCount/2) { mNotificationFramesAct = frameCount/2; } if (frameCount < minFrameCount) { if (frameCount < minFrameCount && !(flags & AUDIO_POLICY_OUTPUT_FLAG_FAST)) { // not ALOGW because it happens all the time when playing key clicks over A2DP ALOGV("Minimum buffer size corrected from %d to %d", frameCount, minFrameCount); Loading @@ -807,6 +820,10 @@ status_t AudioTrack::createTrack_l( if (mIsTimed) { trackFlags |= IAudioFlinger::TRACK_TIMED; } if (flags & AUDIO_POLICY_OUTPUT_FLAG_FAST) { trackFlags |= IAudioFlinger::TRACK_FAST; } sp<IAudioTrack> track = audioFlinger->createTrack(getpid(), streamType, sampleRate, Loading