Merge "Fix potential memory leaks"
diff --git a/media/libaudioprocessing/tests/test-resampler.cpp b/media/libaudioprocessing/tests/test-resampler.cpp
index f178bde..2166a83 100644
--- a/media/libaudioprocessing/tests/test-resampler.cpp
+++ b/media/libaudioprocessing/tests/test-resampler.cpp
@@ -18,6 +18,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
+#include <memory>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
@@ -474,7 +475,7 @@
// mono takes left channel only (out of stereo output pair)
// stereo and multichannel preserve all channels.
int32_t* out = (int32_t*) output_vaddr;
- int16_t* convert = (int16_t*) malloc(output_frames * channels * sizeof(int16_t));
+ std::unique_ptr<int16_t[]> convert(new int16_t[output_frames * channels]);
const int volumeShift = 12; // shift requirement for Q4.27 to Q.15
// round to half towards zero and saturate at int16 (non-dithered)
@@ -509,7 +510,7 @@
perror(file_out);
return EXIT_FAILURE;
}
- (void) sf_writef_short(sf, convert, output_frames);
+ (void) sf_writef_short(sf, convert.get(), output_frames);
sf_close(sf);
return EXIT_SUCCESS;
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index 52bef62..3c62dfb 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -4697,7 +4697,7 @@
// rendering.
int32_t dataSpace;
if (mOutputFormat->findInt32("android._dataspace", &dataSpace)) {
- ALOGD("[%s] setting dataspace on output surface to #%x",
+ ALOGD("[%s] setting dataspace on output surface to %#x",
mComponentName.c_str(), dataSpace);
int err = native_window_set_buffers_data_space(
mSurface.get(), (android_dataspace)dataSpace);
diff --git a/media/libstagefright/OggWriter.cpp b/media/libstagefright/OggWriter.cpp
index 0f5e95e..d2a65d0 100644
--- a/media/libstagefright/OggWriter.cpp
+++ b/media/libstagefright/OggWriter.cpp
@@ -242,13 +242,15 @@
mDone = true;
- void* dummy;
- pthread_join(mThread, &dummy);
+ status_t status = mSource->stop();
- status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(dummy));
+ void *pthread_res;
+ pthread_join(mThread, &pthread_res);
+
+ status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(pthread_res));
{
- status_t status = mSource->stop();
- if (err == OK && (status != OK && status != ERROR_END_OF_STREAM)) {
+ if (err == OK &&
+ (status != OK && status != ERROR_END_OF_STREAM)) {
err = status;
}
}
diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
index 4711315..2409315 100644
--- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp
+++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
@@ -441,7 +441,7 @@
((dataSpace & ~HAL_DATASPACE_RANGE_MASK) | HAL_DATASPACE_RANGE_FULL);
}
- ALOGD("setting dataspace on output surface to #%x", dataSpace);
+ ALOGD("setting dataspace on output surface to %#x", dataSpace);
if ((err = native_window_set_buffers_data_space(mNativeWindow.get(), dataSpace))) {
ALOGW("failed to set dataspace on surface (%d)", err);
}
diff --git a/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeDecoder.cpp b/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeDecoder.cpp
index 043bc9e..a0628fa 100644
--- a/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeDecoder.cpp
+++ b/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeDecoder.cpp
@@ -19,6 +19,7 @@
#include <jni.h>
#include <fstream>
+#include <memory>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
@@ -42,7 +43,7 @@
return -1;
}
- Decoder *decoder = new Decoder();
+ std::unique_ptr<Decoder> decoder(new (std::nothrow) Decoder());
Extractor *extractor = decoder->getExtractor();
if (!extractor) {
ALOGE("Extractor creation failed");
@@ -125,6 +126,5 @@
inputFp = nullptr;
}
extractor->deInitExtractor();
- delete decoder;
return 0;
}
diff --git a/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeMuxer.cpp b/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeMuxer.cpp
index a5ef5b8..a297526 100644
--- a/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeMuxer.cpp
+++ b/media/tests/benchmark/MediaBenchmarkTest/src/main/cpp/NativeMuxer.cpp
@@ -19,6 +19,7 @@
#include <jni.h>
#include <fstream>
+#include <memory>
#include <string>
#include <sys/stat.h>
@@ -47,7 +48,7 @@
return MUXER_OUTPUT_FORMAT_INVALID;
}
- Muxer *muxerObj = new Muxer();
+ std::unique_ptr<Muxer> muxerObj(new (std::nothrow) Muxer());
Extractor *extractor = muxerObj->getExtractor();
if (!extractor) {
ALOGE("Extractor creation failed");
@@ -159,7 +160,6 @@
}
env->ReleaseStringUTFChars(jFormat, fmt);
extractor->deInitExtractor();
- delete muxerObj;
return 0;
}
diff --git a/media/tests/benchmark/src/native/encoder/C2Encoder.cpp b/media/tests/benchmark/src/native/encoder/C2Encoder.cpp
index ca79881..5b7a471 100644
--- a/media/tests/benchmark/src/native/encoder/C2Encoder.cpp
+++ b/media/tests/benchmark/src/native/encoder/C2Encoder.cpp
@@ -17,11 +17,13 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "C2Encoder"
+#include <memory>
+
#include "C2Encoder.h"
int32_t C2Encoder::createCodec2Component(string compName, AMediaFormat *format) {
ALOGV("In %s", __func__);
- mListener.reset(new CodecListener(
+ mListener.reset(new (std::nothrow) CodecListener(
[this](std::list<std::unique_ptr<C2Work>> &workItems) { handleWorkDone(workItems); }));
if (!mListener) return -1;
@@ -125,7 +127,7 @@
}
int32_t numFrames = (inputBufferSize + frameSize - 1) / frameSize;
// Temporary buffer to read data from the input file
- char *data = (char *)malloc(frameSize);
+ std::unique_ptr<char[]> data(new (std::nothrow) char[frameSize]);
if (!data) {
ALOGE("Insufficient memory to read from input file");
return -1;
@@ -169,7 +171,7 @@
if (inputBufferSize - offset < frameSize) {
frameSize = inputBufferSize - offset;
}
- eleStream.read(data, frameSize);
+ eleStream.read(data.get(), frameSize);
if (eleStream.gcount() != frameSize) {
ALOGE("read() from file failed. Incorrect bytes read");
return -1;
@@ -191,8 +193,8 @@
return view.error();
}
- memcpy(view.base(), data, frameSize);
- work->input.buffers.emplace_back(new LinearBuffer(block));
+ memcpy(view.base(), data.get(), frameSize);
+ work->input.buffers.emplace_back(new (std::nothrow) LinearBuffer(block));
} else {
std::shared_ptr<C2GraphicBlock> block;
status = mGraphicPool->fetchGraphicBlock(
@@ -211,16 +213,16 @@
uint8_t *pY = view.data()[C2PlanarLayout::PLANE_Y];
uint8_t *pU = view.data()[C2PlanarLayout::PLANE_U];
uint8_t *pV = view.data()[C2PlanarLayout::PLANE_V];
- memcpy(pY, data, mWidth * mHeight);
- memcpy(pU, data + mWidth * mHeight, (mWidth * mHeight >> 2));
- memcpy(pV, data + (mWidth * mHeight * 5 >> 2), mWidth * mHeight >> 2);
- work->input.buffers.emplace_back(new GraphicBuffer(block));
+ memcpy(pY, data.get(), mWidth * mHeight);
+ memcpy(pU, data.get() + mWidth * mHeight, (mWidth * mHeight >> 2));
+ memcpy(pV, data.get() + (mWidth * mHeight * 5 >> 2), mWidth * mHeight >> 2);
+ work->input.buffers.emplace_back(new (std::nothrow) GraphicBuffer(block));
}
mStats->addFrameSize(frameSize);
}
work->worklets.clear();
- work->worklets.emplace_back(new C2Worklet);
+ work->worklets.emplace_back(new (std::nothrow) C2Worklet);
std::list<std::unique_ptr<C2Work>> items;
items.push_back(std::move(work));
@@ -234,7 +236,6 @@
numFrames--;
mNumInputFrame++;
}
- free(data);
return status;
}
diff --git a/media/tests/benchmark/tests/C2DecoderTest.cpp b/media/tests/benchmark/tests/C2DecoderTest.cpp
index 85dcbc1..6e4d9e1 100644
--- a/media/tests/benchmark/tests/C2DecoderTest.cpp
+++ b/media/tests/benchmark/tests/C2DecoderTest.cpp
@@ -20,6 +20,7 @@
#include <fstream>
#include <iostream>
#include <limits>
+#include <memory>
#include "BenchmarkTestEnvironment.h"
#include "C2Decoder.h"
@@ -50,7 +51,7 @@
};
void C2DecoderTest::setupC2DecoderTest() {
- mDecoder = new C2Decoder();
+ mDecoder = new (std::nothrow) C2Decoder();
ASSERT_NE(mDecoder, nullptr) << "C2Decoder creation failed";
int32_t status = mDecoder->setupCodec2();
@@ -66,7 +67,7 @@
FILE *inputFp = fopen(inputFile.c_str(), "rb");
ASSERT_NE(inputFp, nullptr) << "Unable to open " << inputFile << " file for reading";
- Extractor *extractor = new Extractor();
+ std::unique_ptr<Extractor> extractor(new (std::nothrow) Extractor());
ASSERT_NE(extractor, nullptr) << "Extractor creation failed";
// Read file properties
@@ -85,7 +86,7 @@
int32_t status = extractor->setupTrackFormat(curTrack);
ASSERT_EQ(status, 0) << "Track Format invalid";
- uint8_t *inputBuffer = (uint8_t *)malloc(fileSize);
+ std::unique_ptr<uint8_t[]> inputBuffer(new (std::nothrow) uint8_t[fileSize]);
ASSERT_NE(inputBuffer, nullptr) << "Insufficient memory";
vector<AMediaCodecBufferInfo> frameInfo;
@@ -100,7 +101,7 @@
// copy the meta data and buffer to be passed to decoder
ASSERT_LE(inputBufferOffset + info.size, fileSize) << "Memory allocated not sufficient";
- memcpy(inputBuffer + inputBufferOffset, csdBuffer, info.size);
+ memcpy(inputBuffer.get() + inputBufferOffset, csdBuffer, info.size);
frameInfo.push_back(info);
inputBufferOffset += info.size;
idx++;
@@ -113,7 +114,7 @@
// copy the meta data and buffer to be passed to decoder
ASSERT_LE(inputBufferOffset + info.size, fileSize) << "Memory allocated not sufficient";
- memcpy(inputBuffer + inputBufferOffset, extractor->getFrameBuf(), info.size);
+ memcpy(inputBuffer.get() + inputBufferOffset, extractor->getFrameBuf(), info.size);
frameInfo.push_back(info);
inputBufferOffset += info.size;
}
@@ -127,7 +128,7 @@
ASSERT_EQ(status, 0) << "Create component failed for " << codecName;
// Send the inputs to C2 Decoder and wait till all buffers are returned.
- status = mDecoder->decodeFrames(inputBuffer, frameInfo);
+ status = mDecoder->decodeFrames(inputBuffer.get(), frameInfo);
ASSERT_EQ(status, 0) << "Decoder failed for " << codecName;
mDecoder->waitOnInputConsumption();
@@ -141,10 +142,8 @@
mDecoder->resetDecoder();
}
}
- free(inputBuffer);
fclose(inputFp);
extractor->deInitExtractor();
- delete extractor;
delete mDecoder;
mDecoder = nullptr;
}
@@ -174,7 +173,7 @@
make_pair("crowd_1920x1080_25fps_4000kbps_h265.mkv", "hevc")));
int main(int argc, char **argv) {
- gEnv = new BenchmarkTestEnvironment();
+ gEnv = new (std::nothrow) BenchmarkTestEnvironment();
::testing::AddGlobalTestEnvironment(gEnv);
::testing::InitGoogleTest(&argc, argv);
int status = gEnv->initFromOptions(argc, argv);
diff --git a/media/tests/benchmark/tests/C2EncoderTest.cpp b/media/tests/benchmark/tests/C2EncoderTest.cpp
index b18d856..dfbe496 100644
--- a/media/tests/benchmark/tests/C2EncoderTest.cpp
+++ b/media/tests/benchmark/tests/C2EncoderTest.cpp
@@ -20,6 +20,7 @@
#include <fstream>
#include <iostream>
#include <limits>
+#include <memory>
#include "BenchmarkTestEnvironment.h"
#include "C2Encoder.h"
@@ -50,7 +51,7 @@
};
void C2EncoderTest::setupC2EncoderTest() {
- mEncoder = new C2Encoder();
+ mEncoder = new (std::nothrow) C2Encoder();
ASSERT_NE(mEncoder, nullptr) << "C2Encoder creation failed";
int32_t status = mEncoder->setupCodec2();
@@ -66,7 +67,7 @@
FILE *inputFp = fopen(inputFile.c_str(), "rb");
ASSERT_NE(inputFp, nullptr) << "Unable to open input file for reading";
- Decoder *decoder = new Decoder();
+ std::unique_ptr<Decoder> decoder(new (std::nothrow) Decoder());
ASSERT_NE(decoder, nullptr) << "Decoder creation failed";
Extractor *extractor = decoder->getExtractor();
@@ -88,7 +89,7 @@
int32_t status = extractor->setupTrackFormat(curTrack);
ASSERT_EQ(status, 0) << "Track Format invalid";
- uint8_t *inputBuffer = (uint8_t *)malloc(fileSize);
+ std::unique_ptr<uint8_t[]> inputBuffer(new (std::nothrow) uint8_t[fileSize]);
ASSERT_NE(inputBuffer, nullptr) << "Insufficient memory";
vector<AMediaCodecBufferInfo> frameInfo;
@@ -102,7 +103,7 @@
// copy the meta data and buffer to be passed to decoder
ASSERT_LE(inputBufferOffset + info.size, fileSize) << "Memory allocated not sufficient";
- memcpy(inputBuffer + inputBufferOffset, extractor->getFrameBuf(), info.size);
+ memcpy(inputBuffer.get() + inputBufferOffset, extractor->getFrameBuf(), info.size);
frameInfo.push_back(info);
inputBufferOffset += info.size;
}
@@ -114,7 +115,8 @@
<< " for dumping decoder's output";
decoder->setupDecoder();
- status = decoder->decode(inputBuffer, frameInfo, decName, false /*asyncMode */, outFp);
+ status = decoder->decode(inputBuffer.get(), frameInfo, decName,
+ false /*asyncMode */, outFp);
ASSERT_EQ(status, AMEDIA_OK) << "Decode returned error : " << status;
// Encode the given input stream for all C2 codecs supported by device
@@ -149,11 +151,9 @@
// Destroy the decoder for the given input
decoder->deInitCodec();
decoder->resetDecoder();
- free(inputBuffer);
}
fclose(inputFp);
extractor->deInitExtractor();
- delete decoder;
delete mEncoder;
mEncoder = nullptr;
}
@@ -176,7 +176,7 @@
make_pair("crowd_1920x1080_25fps_4000kbps_h265.mkv", "hevc")));
int main(int argc, char **argv) {
- gEnv = new BenchmarkTestEnvironment();
+ gEnv = new (std::nothrow) BenchmarkTestEnvironment();
::testing::AddGlobalTestEnvironment(gEnv);
::testing::InitGoogleTest(&argc, argv);
int status = gEnv->initFromOptions(argc, argv);
diff --git a/media/tests/benchmark/tests/DecoderTest.cpp b/media/tests/benchmark/tests/DecoderTest.cpp
index 3666724..b363df3 100644
--- a/media/tests/benchmark/tests/DecoderTest.cpp
+++ b/media/tests/benchmark/tests/DecoderTest.cpp
@@ -20,6 +20,7 @@
#include <fstream>
#include <iostream>
#include <limits>
+#include <memory>
#include <android/binder_process.h>
@@ -38,7 +39,7 @@
FILE *inputFp = fopen(inputFile.c_str(), "rb");
ASSERT_NE(inputFp, nullptr) << "Unable to open " << inputFile << " file for reading";
- Decoder *decoder = new Decoder();
+ std::unique_ptr<Decoder> decoder(new (std::nothrow) Decoder());
ASSERT_NE(decoder, nullptr) << "Decoder creation failed";
Extractor *extractor = decoder->getExtractor();
@@ -57,7 +58,7 @@
int32_t status = extractor->setupTrackFormat(curTrack);
ASSERT_EQ(status, 0) << "Track Format invalid";
- uint8_t *inputBuffer = (uint8_t *)malloc(kMaxBufferSize);
+ std::unique_ptr<uint8_t[]> inputBuffer(new (std::nothrow) uint8_t[kMaxBufferSize]);
ASSERT_NE(inputBuffer, nullptr) << "Insufficient memory";
vector<AMediaCodecBufferInfo> frameInfo;
@@ -72,7 +73,7 @@
ASSERT_LE(inputBufferOffset + info.size, kMaxBufferSize)
<< "Memory allocated not sufficient";
- memcpy(inputBuffer + inputBufferOffset, extractor->getFrameBuf(), info.size);
+ memcpy(inputBuffer.get() + inputBufferOffset, extractor->getFrameBuf(), info.size);
frameInfo.push_back(info);
inputBufferOffset += info.size;
}
@@ -80,7 +81,7 @@
string codecName = get<1>(params);
bool asyncMode = get<2>(params);
decoder->setupDecoder();
- status = decoder->decode(inputBuffer, frameInfo, codecName, asyncMode);
+ status = decoder->decode(inputBuffer.get(), frameInfo, codecName, asyncMode);
ASSERT_EQ(status, AMEDIA_OK) << "Decoder failed for " << codecName;
decoder->deInitCodec();
@@ -88,12 +89,10 @@
string inputReference = get<0>(params);
decoder->dumpStatistics(inputReference, codecName, (asyncMode ? "async" : "sync"),
gEnv->getStatsFile());
- free(inputBuffer);
decoder->resetDecoder();
}
fclose(inputFp);
extractor->deInitExtractor();
- delete decoder;
}
// TODO: (b/140549596)
@@ -178,7 +177,7 @@
int main(int argc, char **argv) {
ABinderProcess_startThreadPool();
- gEnv = new BenchmarkTestEnvironment();
+ gEnv = new (std::nothrow) BenchmarkTestEnvironment();
::testing::AddGlobalTestEnvironment(gEnv);
::testing::InitGoogleTest(&argc, argv);
int status = gEnv->initFromOptions(argc, argv);
@@ -190,4 +189,4 @@
ALOGV("Decoder Test result = %d\n", status);
}
return status;
-}
\ No newline at end of file
+}
diff --git a/media/tests/benchmark/tests/EncoderTest.cpp b/media/tests/benchmark/tests/EncoderTest.cpp
index 7e1681d..6703b99 100644
--- a/media/tests/benchmark/tests/EncoderTest.cpp
+++ b/media/tests/benchmark/tests/EncoderTest.cpp
@@ -18,6 +18,7 @@
#define LOG_TAG "encoderTest"
#include <fstream>
+#include <memory>
#include "BenchmarkTestEnvironment.h"
#include "Decoder.h"
@@ -39,7 +40,7 @@
FILE *inputFp = fopen(inputFile.c_str(), "rb");
ASSERT_NE(inputFp, nullptr) << "Unable to open " << inputFile << " file for reading";
- Decoder *decoder = new Decoder();
+ std::unique_ptr<Decoder> decoder(new (std::nothrow) Decoder());
ASSERT_NE(decoder, nullptr) << "Decoder creation failed";
Extractor *extractor = decoder->getExtractor();
@@ -54,14 +55,14 @@
int32_t trackCount = extractor->initExtractor(fd, fileSize);
ASSERT_GT(trackCount, 0) << "initExtractor failed";
- Encoder *encoder = new Encoder();
+ std::unique_ptr<Encoder> encoder(new (std::nothrow) Encoder());
ASSERT_NE(encoder, nullptr) << "Decoder creation failed";
for (int curTrack = 0; curTrack < trackCount; curTrack++) {
int32_t status = extractor->setupTrackFormat(curTrack);
ASSERT_EQ(status, 0) << "Track Format invalid";
- uint8_t *inputBuffer = (uint8_t *)malloc(kMaxBufferSize);
+ std::unique_ptr<uint8_t[]> inputBuffer(new (std::nothrow) uint8_t[kMaxBufferSize]);
ASSERT_NE(inputBuffer, nullptr) << "Insufficient memory";
vector<AMediaCodecBufferInfo> frameInfo;
@@ -76,7 +77,7 @@
ASSERT_LE(inputBufferOffset + info.size, kMaxBufferSize)
<< "Memory allocated not sufficient";
- memcpy(inputBuffer + inputBufferOffset, extractor->getFrameBuf(), info.size);
+ memcpy(inputBuffer.get() + inputBufferOffset, extractor->getFrameBuf(), info.size);
frameInfo.push_back(info);
inputBufferOffset += info.size;
}
@@ -88,7 +89,7 @@
<< " for dumping decoder's output";
decoder->setupDecoder();
- status = decoder->decode(inputBuffer, frameInfo, decName, false /*asyncMode */, outFp);
+ status = decoder->decode(inputBuffer.get(), frameInfo, decName, false /*asyncMode */, outFp);
ASSERT_EQ(status, AMEDIA_OK) << "Decode returned error : " << status;
AMediaFormat *decoderFormat = decoder->getFormat();
@@ -154,13 +155,10 @@
}
encoder->resetEncoder();
decoder->deInitCodec();
- free(inputBuffer);
decoder->resetDecoder();
}
- delete encoder;
fclose(inputFp);
extractor->deInitExtractor();
- delete decoder;
}
INSTANTIATE_TEST_SUITE_P(
@@ -220,7 +218,7 @@
"c2.android.hevc.encoder", true)));
int main(int argc, char **argv) {
- gEnv = new BenchmarkTestEnvironment();
+ gEnv = new (std::nothrow) BenchmarkTestEnvironment();
::testing::AddGlobalTestEnvironment(gEnv);
::testing::InitGoogleTest(&argc, argv);
int status = gEnv->initFromOptions(argc, argv);
diff --git a/media/tests/benchmark/tests/ExtractorTest.cpp b/media/tests/benchmark/tests/ExtractorTest.cpp
index 27ee9ba..35fb465 100644
--- a/media/tests/benchmark/tests/ExtractorTest.cpp
+++ b/media/tests/benchmark/tests/ExtractorTest.cpp
@@ -17,6 +17,8 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "extractorTest"
+#include <memory>
+
#include <gtest/gtest.h>
#include <android/binder_process.h>
@@ -29,7 +31,7 @@
class ExtractorTest : public ::testing::TestWithParam<pair<string, int32_t>> {};
TEST_P(ExtractorTest, Extract) {
- Extractor *extractObj = new Extractor();
+ std::unique_ptr<Extractor> extractObj(new (std::nothrow) Extractor());
ASSERT_NE(extractObj, nullptr) << "Extractor creation failed";
string inputFile = gEnv->getRes() + GetParam().first;
@@ -53,7 +55,6 @@
extractObj->dumpStatistics(GetParam().first, "", gEnv->getStatsFile());
fclose(inputFp);
- delete extractObj;
}
INSTANTIATE_TEST_SUITE_P(ExtractorTestAll, ExtractorTest,
@@ -76,7 +77,7 @@
int main(int argc, char **argv) {
ABinderProcess_startThreadPool();
- gEnv = new BenchmarkTestEnvironment();
+ gEnv = new (std::nothrow) BenchmarkTestEnvironment();
::testing::AddGlobalTestEnvironment(gEnv);
::testing::InitGoogleTest(&argc, argv);
int status = gEnv->initFromOptions(argc, argv);
diff --git a/media/tests/benchmark/tests/MuxerTest.cpp b/media/tests/benchmark/tests/MuxerTest.cpp
index 991644b..65a3df4 100644
--- a/media/tests/benchmark/tests/MuxerTest.cpp
+++ b/media/tests/benchmark/tests/MuxerTest.cpp
@@ -20,6 +20,7 @@
#include <fstream>
#include <iostream>
+#include <memory>
#include "BenchmarkTestEnvironment.h"
#include "Muxer.h"
@@ -59,7 +60,7 @@
MUXER_OUTPUT_T outputFormat = getMuxerOutFormat(fmt);
ASSERT_NE(outputFormat, MUXER_OUTPUT_FORMAT_INVALID) << "Invalid muxer output format";
- Muxer *muxerObj = new Muxer();
+ std::unique_ptr<Muxer> muxerObj(new (std::nothrow) Muxer());
ASSERT_NE(muxerObj, nullptr) << "Muxer creation failed";
Extractor *extractor = muxerObj->getExtractor();
@@ -78,7 +79,7 @@
int32_t status = extractor->setupTrackFormat(curTrack);
ASSERT_EQ(status, 0) << "Track Format invalid";
- uint8_t *inputBuffer = (uint8_t *)malloc(kMaxBufferSize);
+ std::unique_ptr<uint8_t[]> inputBuffer(new (std::nothrow) uint8_t[kMaxBufferSize]);
ASSERT_NE(inputBuffer, nullptr) << "Insufficient memory";
// AMediaCodecBufferInfo : <size of frame> <flags> <presentationTimeUs> <offset>
@@ -94,7 +95,7 @@
ASSERT_LE(inputBufferOffset + info.size, kMaxBufferSize)
<< "Memory allocated not sufficient";
- memcpy(inputBuffer + inputBufferOffset, extractor->getFrameBuf(), info.size);
+ memcpy(inputBuffer.get() + inputBufferOffset, extractor->getFrameBuf(), info.size);
info.offset = inputBufferOffset;
frameInfos.push_back(info);
inputBufferOffset += info.size;
@@ -109,18 +110,16 @@
status = muxerObj->initMuxer(fd, outputFormat);
ASSERT_EQ(status, 0) << "initMuxer failed";
- status = muxerObj->mux(inputBuffer, frameInfos);
+ status = muxerObj->mux(inputBuffer.get(), frameInfos);
ASSERT_EQ(status, 0) << "Mux failed";
muxerObj->deInitMuxer();
muxerObj->dumpStatistics(GetParam().first + "." + fmt.c_str(), fmt, gEnv->getStatsFile());
- free(inputBuffer);
fclose(outputFp);
muxerObj->resetMuxer();
}
fclose(inputFp);
extractor->deInitExtractor();
- delete muxerObj;
}
INSTANTIATE_TEST_SUITE_P(
@@ -146,7 +145,7 @@
make_pair("bbb_16000hz_1ch_9kbps_amrwb_5mins.3gp", "3gpp")));
int main(int argc, char **argv) {
- gEnv = new BenchmarkTestEnvironment();
+ gEnv = new (std::nothrow) BenchmarkTestEnvironment();
::testing::AddGlobalTestEnvironment(gEnv);
::testing::InitGoogleTest(&argc, argv);
int status = gEnv->initFromOptions(argc, argv);
diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h
index 6a138bb..33983d7 100644
--- a/services/audioflinger/PlaybackTracks.h
+++ b/services/audioflinger/PlaybackTracks.h
@@ -310,6 +310,7 @@
binder::Status unmute(/*out*/ bool *ret) override;
private:
Track* const mTrack;
+ bool setMute(bool muted);
};
sp<AudioVibrationController> mAudioVibrationController;
sp<os::ExternalVibration> mExternalVibration;
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 6135020..64532bb 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -1898,9 +1898,7 @@
}
}
-binder::Status AudioFlinger::PlaybackThread::Track::AudioVibrationController::mute(
- /*out*/ bool *ret) {
- *ret = false;
+bool AudioFlinger::PlaybackThread::Track::AudioVibrationController::setMute(bool muted) {
sp<ThreadBase> thread = mTrack->mThread.promote();
if (thread != 0) {
// Lock for updating mHapticPlaybackEnabled.
@@ -1908,27 +1906,22 @@
PlaybackThread *playbackThread = (PlaybackThread *)thread.get();
if ((mTrack->channelMask() & AUDIO_CHANNEL_HAPTIC_ALL) != AUDIO_CHANNEL_NONE
&& playbackThread->mHapticChannelCount > 0) {
- mTrack->setHapticPlaybackEnabled(false);
- *ret = true;
+ mTrack->setHapticPlaybackEnabled(!muted);
+ return true;
}
}
+ return false;
+}
+
+binder::Status AudioFlinger::PlaybackThread::Track::AudioVibrationController::mute(
+ /*out*/ bool *ret) {
+ *ret = setMute(true);
return binder::Status::ok();
}
binder::Status AudioFlinger::PlaybackThread::Track::AudioVibrationController::unmute(
/*out*/ bool *ret) {
- *ret = false;
- sp<ThreadBase> thread = mTrack->mThread.promote();
- if (thread != 0) {
- // Lock for updating mHapticPlaybackEnabled.
- Mutex::Autolock _l(thread->mLock);
- PlaybackThread *playbackThread = (PlaybackThread *)thread.get();
- if ((mTrack->channelMask() & AUDIO_CHANNEL_HAPTIC_ALL) != AUDIO_CHANNEL_NONE
- && playbackThread->mHapticChannelCount > 0) {
- mTrack->setHapticPlaybackEnabled(true);
- *ret = true;
- }
- }
+ *ret = setMute(false);
return binder::Status::ok();
}