Skip to content

Commit c2db119

Browse files
committed
AudioBufferProvider comments and cleanup
Add comments about which methods implement the AudioBufferProvider interface. Simplified the definition of kInvalidPts. <stdint.h> is very hard to work with, there seems to be no way to use it reliably to get INT64_MAX without having a separate source file, which is ugly because it means kInvalidPts is not a compile-time constant. So I just deleted AudioBufferProvider.cpp and used a hard-coded constant instead. Added a default constructor for Buffer so that the fields aren't random (especially .raw which is used to determine if the buffer is valid). Make the pts for getNextBuffer default to kInvalidPTS so code that doesn't need a pts doesn't have to specify a value. Rename the parameter to AudioMixer::setBufferProvider to make it clearer. Change-Id: I87e7290884d4ed975b019f62d1ab6ae2bc5065a5
1 parent be3835c commit c2db119

File tree

6 files changed

+31
-53
lines changed

6 files changed

+31
-53
lines changed

services/audioflinger/Android.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ LOCAL_SRC_FILES:= \
77
AudioMixer.cpp.arm \
88
AudioResampler.cpp.arm \
99
AudioPolicyService.cpp \
10-
AudioBufferProvider.cpp \
1110
ServiceUtilities.cpp
1211
# AudioResamplerSinc.cpp.arm
1312
# AudioResamplerCubic.cpp.arm

services/audioflinger/AudioBufferProvider.cpp

Lines changed: 0 additions & 28 deletions
This file was deleted.

services/audioflinger/AudioBufferProvider.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
#ifndef ANDROID_AUDIO_BUFFER_PROVIDER_H
1818
#define ANDROID_AUDIO_BUFFER_PROVIDER_H
1919

20-
#include <stdint.h>
21-
#include <sys/types.h>
2220
#include <utils/Errors.h>
2321

2422
namespace android {
@@ -29,6 +27,7 @@ class AudioBufferProvider
2927
public:
3028

3129
struct Buffer {
30+
Buffer() : raw(NULL), frameCount(0) { }
3231
union {
3332
void* raw;
3433
short* i16;
@@ -40,12 +39,12 @@ class AudioBufferProvider
4039
virtual ~AudioBufferProvider() {}
4140

4241
// value representing an invalid presentation timestamp
43-
static const int64_t kInvalidPTS;
42+
static const int64_t kInvalidPTS = 0x7FFFFFFFFFFFFFFFLL; // <stdint.h> is too painful
4443

4544
// pts is the local time when the next sample yielded by getNextBuffer
4645
// will be rendered.
4746
// Pass kInvalidPTS if the PTS is unknown or not applicable.
48-
virtual status_t getNextBuffer(Buffer* buffer, int64_t pts) = 0;
47+
virtual status_t getNextBuffer(Buffer* buffer, int64_t pts = kInvalidPTS) = 0;
4948

5049
virtual void releaseBuffer(Buffer* buffer) = 0;
5150
};

services/audioflinger/AudioFlinger.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2891,8 +2891,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop()
28912891
// output audio to hardware
28922892
while (frameCount) {
28932893
buffer.frameCount = frameCount;
2894-
activeTrack->getNextBuffer(&buffer,
2895-
AudioBufferProvider::kInvalidPTS);
2894+
activeTrack->getNextBuffer(&buffer);
28962895
if (CC_UNLIKELY(buffer.raw == NULL)) {
28972896
memset(curBuf, 0, frameCount * mFrameSize);
28982897
break;
@@ -3398,11 +3397,14 @@ AudioFlinger::ThreadBase::TrackBase::~TrackBase()
33983397
}
33993398
}
34003399

3400+
// AudioBufferProvider interface
3401+
// getNextBuffer() = 0;
3402+
// This implementation of releaseBuffer() is used by Track and RecordTrack, but not TimedTrack
34013403
void AudioFlinger::ThreadBase::TrackBase::releaseBuffer(AudioBufferProvider::Buffer* buffer)
34023404
{
34033405
buffer->raw = NULL;
34043406
mFrameCount = buffer->frameCount;
3405-
step();
3407+
(void) step(); // ignore return value of step()
34063408
buffer->frameCount = 0;
34073409
}
34083410

@@ -3548,6 +3550,7 @@ void AudioFlinger::PlaybackThread::Track::dump(char* buffer, size_t size)
35483550
(int)mAuxBuffer);
35493551
}
35503552

3553+
// AudioBufferProvider interface
35513554
status_t AudioFlinger::PlaybackThread::Track::getNextBuffer(
35523555
AudioBufferProvider::Buffer* buffer, int64_t pts)
35533556
{
@@ -4096,6 +4099,7 @@ void AudioFlinger::PlaybackThread::TimedTrack::timedYieldSilence(
40964099
mTimedAudioOutputOnTime = false;
40974100
}
40984101

4102+
// AudioBufferProvider interface
40994103
void AudioFlinger::PlaybackThread::TimedTrack::releaseBuffer(
41004104
AudioBufferProvider::Buffer* buffer) {
41014105

@@ -4181,6 +4185,7 @@ AudioFlinger::RecordThread::RecordTrack::~RecordTrack()
41814185
}
41824186
}
41834187

4188+
// AudioBufferProvider interface
41844189
status_t AudioFlinger::RecordThread::RecordTrack::getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts)
41854190
{
41864191
audio_track_cblk_t* cblk = this->cblk();
@@ -4868,8 +4873,7 @@ bool AudioFlinger::RecordThread::threadLoop()
48684873
}
48694874

48704875
buffer.frameCount = mFrameCount;
4871-
if (CC_LIKELY(mActiveTrack->getNextBuffer(
4872-
&buffer, AudioBufferProvider::kInvalidPTS) == NO_ERROR)) {
4876+
if (CC_LIKELY(mActiveTrack->getNextBuffer(&buffer) == NO_ERROR)) {
48734877
size_t framesOut = buffer.frameCount;
48744878
if (mResampler == NULL) {
48754879
// no resampling
@@ -5147,6 +5151,7 @@ status_t AudioFlinger::RecordThread::dump(int fd, const Vector<String16>& args)
51475151
return NO_ERROR;
51485152
}
51495153

5154+
// AudioBufferProvider interface
51505155
status_t AudioFlinger::RecordThread::getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts)
51515156
{
51525157
size_t framesReq = buffer->frameCount;
@@ -5185,6 +5190,7 @@ status_t AudioFlinger::RecordThread::getNextBuffer(AudioBufferProvider::Buffer*
51855190
return NO_ERROR;
51865191
}
51875192

5193+
// AudioBufferProvider interface
51885194
void AudioFlinger::RecordThread::releaseBuffer(AudioBufferProvider::Buffer* buffer)
51895195
{
51905196
mRsmpInIndex += buffer->frameCount;

services/audioflinger/AudioFlinger.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,8 @@ class AudioFlinger :
346346
TrackBase(const TrackBase&);
347347
TrackBase& operator = (const TrackBase&);
348348

349-
virtual status_t getNextBuffer(
350-
AudioBufferProvider::Buffer* buffer,
351-
int64_t pts) = 0;
349+
// AudioBufferProvider interface
350+
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts) = 0;
352351
virtual void releaseBuffer(AudioBufferProvider::Buffer* buffer);
353352

354353
audio_format_t format() const {
@@ -634,9 +633,10 @@ class AudioFlinger :
634633
Track(const Track&);
635634
Track& operator = (const Track&);
636635

637-
virtual status_t getNextBuffer(
638-
AudioBufferProvider::Buffer* buffer,
639-
int64_t pts);
636+
// AudioBufferProvider interface
637+
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts = kInvalidPTS);
638+
// releaseBuffer() not overridden
639+
640640
virtual uint32_t framesReady() const;
641641

642642
bool isMuted() const { return mMute; }
@@ -703,9 +703,10 @@ class AudioFlinger :
703703

704704
virtual uint32_t framesReady() const;
705705

706-
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer,
707-
int64_t pts);
706+
// AudioBufferProvider interface
707+
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts);
708708
virtual void releaseBuffer(AudioBufferProvider::Buffer* buffer);
709+
709710
void timedYieldSamples(AudioBufferProvider::Buffer* buffer);
710711
void timedYieldSilence(uint32_t numFrames,
711712
AudioBufferProvider::Buffer* buffer);
@@ -1067,9 +1068,9 @@ class AudioFlinger :
10671068
RecordTrack(const RecordTrack&);
10681069
RecordTrack& operator = (const RecordTrack&);
10691070

1070-
virtual status_t getNextBuffer(
1071-
AudioBufferProvider::Buffer* buffer,
1072-
int64_t pts);
1071+
// AudioBufferProvider interface
1072+
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts = kInvalidPTS);
1073+
// releaseBuffer() not overridden
10731074

10741075
bool mOverflow;
10751076
};
@@ -1106,9 +1107,10 @@ class AudioFlinger :
11061107
AudioStreamIn* clearInput();
11071108
virtual audio_stream_t* stream();
11081109

1109-
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer,
1110-
int64_t pts);
1110+
// AudioBufferProvider interface
1111+
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts);
11111112
virtual void releaseBuffer(AudioBufferProvider::Buffer* buffer);
1113+
11121114
virtual bool checkForNewParameters_l();
11131115
virtual String8 getParameters(const String8& keys);
11141116
virtual void audioConfigChanged_l(int event, int param = 0);

services/audioflinger/AudioMixer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,11 @@ size_t AudioMixer::getUnreleasedFrames(int name) const
332332
return 0;
333333
}
334334

335-
void AudioMixer::setBufferProvider(int name, AudioBufferProvider* buffer)
335+
void AudioMixer::setBufferProvider(int name, AudioBufferProvider* bufferProvider)
336336
{
337337
name -= TRACK0;
338338
assert(uint32_t(name) < MAX_NUM_TRACKS);
339-
mState.tracks[name].bufferProvider = buffer;
339+
mState.tracks[name].bufferProvider = bufferProvider;
340340
}
341341

342342

0 commit comments

Comments
 (0)