Lines Matching refs:TRACK
286 sp<PlaybackThread::Track> track;
315 track = thread->createTrack_l(client, streamType, sampleRate, format,
319 trackHandle = new TrackHandle(track);
321 // remove local strong reference to Client before deleting the Track so that the Client
324 track.clear();
972 sp<Track> track = mTracks[i];
973 if (track != 0) {
974 track->dump(buffer, SIZE);
983 wp<Track> wTrack = mActiveTracks[i];
985 sp<Track> track = wTrack.promote();
986 if (track != 0) {
987 track->dump(buffer, SIZE);
1043 sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrack_l(
1053 sp<Track> track;
1080 track = new Track(this, client, streamType, sampleRate, format,
1082 if (track->getCblk() == NULL || track->name() < 0) {
1086 mTracks.add(track);
1094 return track;
1180 sp<Track> t = mActiveTracks[i].promote();
1182 Track* const track = t.get();
1190 status_t AudioFlinger::PlaybackThread::addTrack_l(const sp<Track>& track)
1195 track->mRetryCount = kMaxTrackStartupRetries;
1196 if (mActiveTracks.indexOf(track) < 0) {
1197 // the track is newly added, make sure it fills up all its
1200 track->mFillingUpStatus = Track::FS_FILLING;
1201 track->mResetDone = false;
1202 mActiveTracks.add(track);
1213 void AudioFlinger::PlaybackThread::destroyTrack_l(const sp<Track>& track)
1215 track->mState = TrackBase::TERMINATED;
1216 if (mActiveTracks.indexOf(track) < 0) {
1217 mTracks.remove(track);
1218 deleteTrackName_l(track->name());
1306 Vector< sp<Track> > tracksToRemove;
1337 const SortedVector< wp<Track> >& activeTracks = mActiveTracks;
1451 uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove)
1470 sp<Track> t = activeTracks[i].promote();
1472 Track* const track = t.get();
1473 int iTracktype=track->type();
1474 activeTypes |= 1<<track->type();
1481 sp<Track> t = activeTracks[i].promote();
1484 Track* const track = t.get();
1485 audio_track_cblk_t* cblk = track->cblk();
1487 // The first time a track is added we wait
1489 mAudioMixer->setActiveTrack(track->name());
1490 if (cblk->framesReady() && (track->isReady() || track->isStopped()) &&
1491 !track->isPaused() && !track->isTerminated())
1493 //LOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);
1495 // compute volume for this track
1497 if (track->isMuted() || masterMute || track->isPausing() ||
1498 mStreamTypes[track->type()].mute) {
1500 if (track->isPausing()) {
1501 track->setPaused();
1505 float typeVolume = mStreamTypes[track->type()].volume;
1511 LifeVibes::getStreamVolumes(audioOutputType, track->type(), &typeVolume, &streamMute);
1527 mAudioMixer->setBufferProvider(track);
1531 if (track->mFillingUpStatus == Track::FS_FILLED) {
1533 track->mFillingUpStatus = Track::FS_ACTIVE;
1534 if (track->mState == TrackBase::RESUMING) {
1535 track->mState = TrackBase::ACTIVE;
1539 // If the track is stopped before the first frame was mixed,
1553 AudioMixer::TRACK,
1554 AudioMixer::FORMAT, track->format());
1556 AudioMixer::TRACK,
1557 AudioMixer::CHANNEL_COUNT, track->channelCount());
1564 track->mRetryCount = kMaxTrackRetries;
1567 //LOGV("track %d u=%08x, s=%08x [NOT READY] on thread %p", track->name(), cblk->user, cblk->server, this);
1568 if (track->isStopped()) {
1569 track->reset();
1571 if (track->isTerminated() || track->isStopped() || track->isPaused()) {
1572 // We have consumed all the buffers of this track.
1574 tracksToRemove->add(track);
1577 // No buffers for this track. Give it a few chances to
1579 if (--(track->mRetryCount) <= 0) {
1580 LOGV("BUFFER TIMEOUT: remove(%d) from active list on thread %p", track->name(), this);
1581 tracksToRemove->add(track);
1595 const sp<Track>& track = tracksToRemove->itemAt(i);
1596 mActiveTracks.remove(track);
1597 if (track->isTerminated()) {
1598 mTracks.remove(track);
1599 deleteTrackName_l(track->mName);
1608 SortedVector < sp<Track> >& tracks,
1609 SortedVector < wp<Track> >& activeTracks,
1616 sp<Track> t = mTracks[i];
1636 sp<Track> t = tracks[i];
1643 SortedVector < sp<Track> >& tracks,
1644 SortedVector < wp<Track> >& activeTracks)
1650 sp<Track> t = tracks[i];
1662 // force buffer refilling and no ramp volume when the track is mixed for the first time
1663 t->mFillingUpStatus = Track::FS_FILLING;
1677 LOGV("remove track (%d) and delete from mixer", name);
1710 // do not accept frame count changes if tracks are open as the track buffer
1712 // if frame count is changed after track creation
1735 // limit track sample rate to 2 x new output sample rate
1793 sp<Track> trackToRemove;
1794 sp<Track> activeTrack;
1861 sp<Track> t = mActiveTracks[0].promote();
1864 Track* const track = t.get();
1865 audio_track_cblk_t* cblk = track->cblk();
1867 // The first time a track is added we wait
1869 if (cblk->framesReady() && (track->isReady() || track->isStopped()) &&
1870 !track->isPaused() && !track->isTerminated())
1872 //LOGV("track %d u=%08x, s=%08x [OK]", track->name(), cblk->user, cblk->server);
1874 // compute volume for this track
1876 if (track->isMuted() || mMasterMute || track->isPausing() ||
1877 mStreamTypes[track->type()].mute) {
1879 if (track->isPausing()) {
1880 track->setPaused();
1883 float typeVolume = mStreamTypes[track->type()].volume;
1899 if (track->mFillingUpStatus == Track::FS_FILLED) {
1900 track->mFillingUpStatus = Track::FS_ACTIVE;
1901 if (track->mState == TrackBase::RESUMING) {
1902 track->mState = TrackBase::ACTIVE;
1907 track->mRetryCount = kMaxTrackRetriesDirect;
1911 //LOGV("track %d u=%08x, s=%08x [NOT READY]", track->name(), cblk->user, cblk->server);
1912 if (track->isStopped()) {
1913 track->reset();
1915 if (track->isTerminated() || track->isStopped() || track->isPaused()) {
1916 // We have consumed all the buffers of this track.
1918 trackToRemove = track;
1920 // No buffers for this track. Give it a few chances to
1922 if (--(track->mRetryCount) <= 0) {
1923 LOGV("BUFFER TIMEOUT: remove(%d) from active list", track->name());
1924 trackToRemove = track;
1991 // finally let go of removed track, without the lock held
2029 // do not accept frame count changes if tracks are open as the track buffer
2031 // if frame count is changed after track creation
2103 Vector< sp<Track> > tracksToRemove;
2129 const SortedVector< wp<Track> >& activeTracks = mActiveTracks;
2239 LOGV("addOutputTrack() track %p, on thread %p", outputTrack, thread);
2278 LOGW("DuplicatingThread::outputsReady() could not promote thread on output track %p", outputTracks[i].get());
2283 LOGV("DuplicatingThread output track %p on thread %p Not Ready", outputTracks[i].get(), thread.get());
2319 // LOGD("Creating track with %d buffers @ %d bytes", bufferCount, bufferSize);
2434 // Check validity of returned pointer in case the track control block would have been corrupted.
2449 // Track constructor must be called with AudioFlinger::mLock and ThreadBase::mLock held
2450 AudioFlinger::PlaybackThread::Track::Track(
2468 LOGV("Track constructor name %d, calling thread %d", mName, IPCThreadState::self()->getCallingPid());
2470 LOGE("no more track names available");
2481 AudioFlinger::PlaybackThread::Track::~Track()
2483 LOGV("PlaybackThread::Track destructor");
2491 void AudioFlinger::PlaybackThread::Track::destroy()
2493 // NOTE: destroyTrack_l() can remove a strong reference to this Track
2496 // we must acquire a strong reference on this Track before locking mLock
2498 // On the other hand, as long as Track::destroy() is only called by
2500 // this Track with its member mTrack.
2501 sp<Track> keep(this);
2518 void AudioFlinger::PlaybackThread::Track::dump(char* buffer, size_t size)
2537 status_t AudioFlinger::PlaybackThread::Track::getNextBuffer(AudioBufferProvider::Buffer* buffer)
2574 LOGV("getNextBuffer() no more data for track %d on thread %p", mName, mThread.unsafe_get());
2578 bool AudioFlinger::PlaybackThread::Track::isReady() const {
2590 status_t AudioFlinger::PlaybackThread::Track::start()
2598 // here the track could be either new, or restarted
2599 // in both cases "unstop" the track
2625 void AudioFlinger::PlaybackThread::Track::stop()
2634 // If the track is not active (PAUSED and buffers full), flush buffers
2649 void AudioFlinger::PlaybackThread::Track::pause()
2667 void AudioFlinger::PlaybackThread::Track::flush()
2691 void AudioFlinger::PlaybackThread::Track::reset()
2694 // the audioflinger thread detects the track is stopped.
2706 void AudioFlinger::PlaybackThread::Track::mute(bool muted)
2711 void AudioFlinger::PlaybackThread::Track::setVolume(float left, float right)
2838 : Track(thread, NULL, AudioSystem::NUM_STREAM_TYPES, sampleRate, format, channelCount, frameCount, NULL),
2852 LOGW("Error creating output track on thread %p", playbackThread);
2863 status_t status = Track::start();
2875 Track::stop();
2980 // If no more buffers are pending, fill output track buffer to make sure it is started
3089 AudioFlinger::TrackHandle::TrackHandle(const sp<AudioFlinger::PlaybackThread::Track>& track)
3091 mTrack(track)
3096 // just stop the track on deletion, associated resources
3098 // been played. Unless it's not in the active track list, in which
3180 // create new record track. The record track uses one track in mHardwareMixerThread by convention.
3520 result.append("Active Track:\n");
3617 // do not accept frame count changes if tracks are open as the track buffer
3619 // if frame count is changed after track creation
3994 SortedVector < sp<MixerThread::Track> > tracks;
3995 SortedVector < wp<MixerThread::Track> > activeTracks;