Skip to content

Commit cea2c39

Browse files
James DongAndroid (Google) Code Review
authored andcommitted
Merge "Don't call virtual functions in the destructor for audio and camera source classes"
2 parents ffd1212 + 946ab0f commit cea2c39

File tree

6 files changed

+15
-21
lines changed

6 files changed

+15
-21
lines changed

include/media/stagefright/AudioSource.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ struct AudioSource : public MediaSource, public MediaBufferObserver {
4040
status_t initCheck() const;
4141

4242
virtual status_t start(MetaData *params = NULL);
43-
virtual status_t stop();
43+
virtual status_t stop() { return reset(); }
4444
virtual sp<MetaData> getFormat();
4545

4646
// Returns the maximum amplitude since last call.
@@ -97,6 +97,7 @@ struct AudioSource : public MediaSource, public MediaBufferObserver {
9797

9898
void releaseQueuedFrames_l();
9999
void waitOutstandingEncodingFrames_l();
100+
status_t reset();
100101

101102
AudioSource(const AudioSource &);
102103
AudioSource &operator=(const AudioSource &);

include/media/stagefright/CameraSource.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class CameraSource : public MediaSource, public MediaBufferObserver {
7979
virtual ~CameraSource();
8080

8181
virtual status_t start(MetaData *params = NULL);
82-
virtual status_t stop();
82+
virtual status_t stop() { return reset(); }
8383
virtual status_t read(
8484
MediaBuffer **buffer, const ReadOptions *options = NULL);
8585

@@ -163,7 +163,6 @@ class CameraSource : public MediaSource, public MediaBufferObserver {
163163
bool storeMetaDataInVideoBuffers);
164164

165165
virtual void startCameraRecording();
166-
virtual void stopCameraRecording();
167166
virtual void releaseRecordingFrame(const sp<IMemory>& frame);
168167

169168
// Returns true if need to skip the current frame.
@@ -220,7 +219,9 @@ class CameraSource : public MediaSource, public MediaBufferObserver {
220219
status_t checkFrameRate(const CameraParameters& params,
221220
int32_t frameRate);
222221

222+
void stopCameraRecording();
223223
void releaseCamera();
224+
status_t reset();
224225

225226
CameraSource(const CameraSource &);
226227
CameraSource &operator=(const CameraSource &);

include/media/stagefright/CameraSourceTimeLapse.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,6 @@ class CameraSourceTimeLapse : public CameraSource {
121121
// Wrapper over CameraSource::read() to implement quick stop.
122122
virtual status_t read(MediaBuffer **buffer, const ReadOptions *options = NULL);
123123

124-
// For video camera case, just stops the camera's video recording.
125-
virtual void stopCameraRecording();
126-
127124
// mSkipCurrentFrame is set to true in dataCallbackTimestamp() if the current
128125
// frame needs to be skipped and this function just returns the value of mSkipCurrentFrame.
129126
virtual bool skipCurrentFrame(int64_t timestampUs);

media/libstagefright/AudioSource.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ AudioSource::AudioSource(
7272

7373
AudioSource::~AudioSource() {
7474
if (mStarted) {
75-
stop();
75+
reset();
7676
}
7777

7878
delete mRecord;
@@ -130,7 +130,7 @@ void AudioSource::waitOutstandingEncodingFrames_l() {
130130
}
131131
}
132132

133-
status_t AudioSource::stop() {
133+
status_t AudioSource::reset() {
134134
Mutex::Autolock autoLock(mLock);
135135
if (!mStarted) {
136136
return UNKNOWN_ERROR;

media/libstagefright/CameraSource.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ status_t CameraSource::initWithCameraAccess(
548548

549549
CameraSource::~CameraSource() {
550550
if (mStarted) {
551-
stop();
551+
reset();
552552
} else if (mInitCheck == OK) {
553553
// Camera is initialized but because start() is never called,
554554
// the lock on Camera is never released(). This makes sure
@@ -632,8 +632,8 @@ void CameraSource::releaseCamera() {
632632
mCameraFlags = 0;
633633
}
634634

635-
status_t CameraSource::stop() {
636-
ALOGD("stop: E");
635+
status_t CameraSource::reset() {
636+
ALOGD("reset: E");
637637
Mutex::Autolock autoLock(mLock);
638638
mStarted = false;
639639
mFrameAvailableCondition.signal();
@@ -670,7 +670,7 @@ status_t CameraSource::stop() {
670670
}
671671

672672
CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped);
673-
ALOGD("stop: X");
673+
ALOGD("reset: X");
674674
return OK;
675675
}
676676

media/libstagefright/CameraSourceTimeLapse.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ CameraSourceTimeLapse::CameraSourceTimeLapse(
8787
}
8888

8989
CameraSourceTimeLapse::~CameraSourceTimeLapse() {
90+
if (mLastReadBufferCopy) {
91+
mLastReadBufferCopy->release();
92+
mLastReadBufferCopy = NULL;
93+
}
9094
}
9195

9296
void CameraSourceTimeLapse::startQuickReadReturns() {
@@ -204,15 +208,6 @@ status_t CameraSourceTimeLapse::read(
204208
}
205209
}
206210

207-
void CameraSourceTimeLapse::stopCameraRecording() {
208-
ALOGV("stopCameraRecording");
209-
CameraSource::stopCameraRecording();
210-
if (mLastReadBufferCopy) {
211-
mLastReadBufferCopy->release();
212-
mLastReadBufferCopy = NULL;
213-
}
214-
}
215-
216211
sp<IMemory> CameraSourceTimeLapse::createIMemoryCopy(
217212
const sp<IMemory> &source_data) {
218213

0 commit comments

Comments
 (0)