Fix memory leaks
Bug: 111407253
Test: manual, libmemunreachable
Change-Id: I69ad7b48498346925dd02c10b206035c0ae49305
diff --git a/media/extractors/midi/MidiExtractor.cpp b/media/extractors/midi/MidiExtractor.cpp
index 43f394c..1ddcfbb 100644
--- a/media/extractors/midi/MidiExtractor.cpp
+++ b/media/extractors/midi/MidiExtractor.cpp
@@ -279,6 +279,7 @@
ALOGV("MidiExtractor dtor");
AMediaFormat_delete(mFileMetadata);
AMediaFormat_delete(mTrackMetadata);
+ delete mEngine;
}
size_t MidiExtractor::countTracks()
diff --git a/media/extractors/mpeg2/MPEG2PSExtractor.cpp b/media/extractors/mpeg2/MPEG2PSExtractor.cpp
index b60fc4e..d058637 100644
--- a/media/extractors/mpeg2/MPEG2PSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2PSExtractor.cpp
@@ -734,6 +734,7 @@
if (inMeta.findData(kKeySEI, &bufType, &bufData, &bufSize)) {
AMediaFormat_setBuffer(outMeta, AMEDIAFORMAT_KEY_SEI, bufData, bufSize);
}
+ mbuf->release();
return AMEDIA_OK;
}
diff --git a/media/extractors/mpeg2/MPEG2TSExtractor.cpp b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
index fc066ee..11c3787 100644
--- a/media/extractors/mpeg2/MPEG2TSExtractor.cpp
+++ b/media/extractors/mpeg2/MPEG2TSExtractor.cpp
@@ -224,7 +224,7 @@
if (inMeta.findData(kKeySEI, &bufType, &bufData, &bufSize)) {
AMediaFormat_setBuffer(outMeta, AMEDIAFORMAT_KEY_SEI, bufData, bufSize);
}
-
+ mbuf->release();
return AMEDIA_OK;
}
diff --git a/media/libmedia/MidiIoWrapper.cpp b/media/libmedia/MidiIoWrapper.cpp
index 1150d61..d8ef9cf 100644
--- a/media/libmedia/MidiIoWrapper.cpp
+++ b/media/libmedia/MidiIoWrapper.cpp
@@ -50,24 +50,15 @@
mDataSource = nullptr;
}
-MidiIoWrapper::MidiIoWrapper(DataSourceBase *source) {
- ALOGV("MidiIoWrapper(DataSource)");
- mFd = -1;
- mDataSource = source;
- off64_t l;
- if (mDataSource->getSize(&l) == OK) {
- mLength = l;
- } else {
- mLength = 0;
- }
-}
-
class DataSourceUnwrapper : public DataSourceBase {
public:
explicit DataSourceUnwrapper(CDataSource *csource) {
mSource = csource;
}
+
+ virtual ~DataSourceUnwrapper() {}
+
virtual status_t initCheck() const { return OK; }
// Returns the number of bytes read, or -1 on failure. It's not an error if
@@ -98,6 +89,7 @@
MidiIoWrapper::MidiIoWrapper(CDataSource *csource) {
ALOGV("MidiIoWrapper(CDataSource)");
mFd = -1;
+ mBase = 0;
mDataSource = new DataSourceUnwrapper(csource);
off64_t l;
if (mDataSource->getSize(&l) == OK) {
@@ -112,6 +104,7 @@
if (mFd >= 0) {
close(mFd);
}
+ delete mDataSource;
}
int MidiIoWrapper::readAt(void *buffer, int offset, int size) {
diff --git a/media/libmedia/include/media/MidiIoWrapper.h b/media/libmedia/include/media/MidiIoWrapper.h
index 6309dda..b19d49e 100644
--- a/media/libmedia/include/media/MidiIoWrapper.h
+++ b/media/libmedia/include/media/MidiIoWrapper.h
@@ -24,12 +24,12 @@
namespace android {
struct CDataSource;
+class DataSourceUnwrapper;
class MidiIoWrapper {
public:
explicit MidiIoWrapper(const char *path);
explicit MidiIoWrapper(int fd, off64_t offset, int64_t size);
- explicit MidiIoWrapper(DataSourceBase *source);
explicit MidiIoWrapper(CDataSource *csource);
~MidiIoWrapper();
@@ -43,7 +43,7 @@
int mFd;
off64_t mBase;
int64_t mLength;
- DataSourceBase *mDataSource;
+ DataSourceUnwrapper *mDataSource;
EAS_FILE mEasFile;
};
diff --git a/media/libmediaextractor/MediaBufferGroup.cpp b/media/libmediaextractor/MediaBufferGroup.cpp
index e88ed5a..84ff9a6 100644
--- a/media/libmediaextractor/MediaBufferGroup.cpp
+++ b/media/libmediaextractor/MediaBufferGroup.cpp
@@ -125,6 +125,7 @@
buffer->release();
}
delete mInternal;
+ delete mWrapper;
}
void MediaBufferGroup::add_buffer(MediaBufferBase *buffer) {
diff --git a/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h b/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h
index 3682368..e357d3e 100644
--- a/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h
+++ b/media/libmediaextractor/include/media/stagefright/MediaBufferBase.h
@@ -75,7 +75,10 @@
virtual int localRefcount() const = 0;
virtual int remoteRefcount() const = 0;
- virtual ~MediaBufferBase() {};
+ virtual ~MediaBufferBase() {
+ delete mWrapper;
+ delete mFormat;
+ };
CMediaBufferV3 *wrap() {
if (mWrapper) {
diff --git a/media/libstagefright/MediaTrack.cpp b/media/libstagefright/MediaTrack.cpp
index 1e49f6a..b15f3bb 100644
--- a/media/libstagefright/MediaTrack.cpp
+++ b/media/libstagefright/MediaTrack.cpp
@@ -166,6 +166,7 @@
MediaTrackCUnwrapperV3::~MediaTrackCUnwrapperV3() {
wrapper->free(wrapper->data);
free(wrapper);
+ delete bufferGroup;
}
status_t MediaTrackCUnwrapperV3::start() {