Make a few function parameters to be reference
To avoid redundant copies of input data, const reference is used.
Note that there is a behavior change when calling
createMediaFilterEventWithIon: the output buffer will be cleared even if
the operation fails to unblock future calls.
Test: vts-tradefed run vts -m VtsHalTvTunerV1_1TargetTest
Change-Id: Ib26f90930d288738c5b55843e2aecde5318c3786
diff --git a/tv/tuner/1.1/default/Filter.cpp b/tv/tuner/1.1/default/Filter.cpp
index 7d609ea..e0c785e 100644
--- a/tv/tuner/1.1/default/Filter.cpp
+++ b/tv/tuner/1.1/default/Filter.cpp
@@ -532,7 +532,7 @@
return mTpid;
}
-void Filter::updateFilterOutput(vector<uint8_t> data) {
+void Filter::updateFilterOutput(const vector<uint8_t>& data) {
std::lock_guard<std::mutex> lock(mFilterOutputLock);
mFilterOutput.insert(mFilterOutput.end(), data.begin(), data.end());
}
@@ -542,7 +542,7 @@
mPts = pts;
}
-void Filter::updateRecordOutput(vector<uint8_t> data) {
+void Filter::updateRecordOutput(const vector<uint8_t>& data) {
std::lock_guard<std::mutex> lock(mRecordFilterOutputLock);
mRecordFilterOutput.insert(mRecordFilterOutput.end(), data.begin(), data.end());
}
@@ -689,9 +689,7 @@
Result result;
if (mPts) {
result = createMediaFilterEventWithIon(mFilterOutput);
- if (result == Result::SUCCESS) {
- mFilterOutput.clear();
- }
+ mFilterOutput.clear();
return result;
}
@@ -729,6 +727,7 @@
}
result = createMediaFilterEventWithIon(mPesOutput);
+ mPesOutput.clear();
if (result != Result::SUCCESS) {
return result;
}
@@ -739,7 +738,7 @@
return Result::SUCCESS;
}
-Result Filter::createMediaFilterEventWithIon(vector<uint8_t> output) {
+Result Filter::createMediaFilterEventWithIon(const vector<uint8_t>& output) {
if (mUsingSharedAvMem) {
if (mSharedAvMemHandle.getNativeHandle() == nullptr) {
return Result::UNKNOWN_ERROR;
@@ -793,7 +792,7 @@
return Result::SUCCESS;
}
-bool Filter::writeSectionsAndCreateEvent(vector<uint8_t> data) {
+bool Filter::writeSectionsAndCreateEvent(const vector<uint8_t>& data) {
// TODO check how many sections has been read
ALOGD("[Filter] section handler");
std::lock_guard<std::mutex> lock(mFilterEventLock);
@@ -874,7 +873,7 @@
return nativeHandle;
}
-Result Filter::createIndependentMediaEvents(vector<uint8_t> output) {
+Result Filter::createIndependentMediaEvents(const vector<uint8_t>& output) {
int av_fd = createAvIonFd(output.size());
if (av_fd == -1) {
return Result::UNKNOWN_ERROR;
@@ -912,8 +911,6 @@
mFilterEvent.events.resize(size + 1);
mFilterEvent.events[size].media(mediaEvent);
- // Clear and log
- output.clear();
mAvBufferCopyCount = 0;
::close(av_fd);
if (DEBUG_FILTER) {
@@ -922,7 +919,7 @@
return Result::SUCCESS;
}
-Result Filter::createShareMemMediaEvents(vector<uint8_t> output) {
+Result Filter::createShareMemMediaEvents(const vector<uint8_t>& output) {
// copy the filtered data to the shared buffer
uint8_t* sharedAvBuffer = getIonBuffer(mSharedAvMemHandle.getNativeHandle()->data[0],
output.size() + mSharedAvMemOffset);
@@ -955,8 +952,6 @@
mFilterEvent.events.resize(size + 1);
mFilterEvent.events[size].media(mediaEvent);
- // Clear and log
- output.clear();
if (DEBUG_FILTER) {
ALOGD("[Filter] shared av data length %d", mediaEvent.dataLength);
}
diff --git a/tv/tuner/1.1/default/Filter.h b/tv/tuner/1.1/default/Filter.h
index 659bebf..1ea2f51 100644
--- a/tv/tuner/1.1/default/Filter.h
+++ b/tv/tuner/1.1/default/Filter.h
@@ -93,8 +93,8 @@
*/
bool createFilterMQ();
uint16_t getTpid();
- void updateFilterOutput(vector<uint8_t> data);
- void updateRecordOutput(vector<uint8_t> data);
+ void updateFilterOutput(const vector<uint8_t>& data);
+ void updateRecordOutput(const vector<uint8_t>& data);
void updatePts(uint64_t pts);
Result startFilterHandler();
Result startRecordFilterHandler();
@@ -177,7 +177,7 @@
void deleteEventFlag();
bool writeDataToFilterMQ(const std::vector<uint8_t>& data);
bool readDataFromMQ();
- bool writeSectionsAndCreateEvent(vector<uint8_t> data);
+ bool writeSectionsAndCreateEvent(const vector<uint8_t>& data);
void maySendFilterStatusCallback();
DemuxFilterStatus checkFilterStatusChange(uint32_t availableToWrite, uint32_t availableToRead,
uint32_t highThreshold, uint32_t lowThreshold);
@@ -193,9 +193,9 @@
int createAvIonFd(int size);
uint8_t* getIonBuffer(int fd, int size);
native_handle_t* createNativeHandle(int fd);
- Result createMediaFilterEventWithIon(vector<uint8_t> output);
- Result createIndependentMediaEvents(vector<uint8_t> output);
- Result createShareMemMediaEvents(vector<uint8_t> output);
+ Result createMediaFilterEventWithIon(const vector<uint8_t>& output);
+ Result createIndependentMediaEvents(const vector<uint8_t>& output);
+ Result createShareMemMediaEvents(const vector<uint8_t>& output);
bool sameFile(int fd1, int fd2);
DemuxFilterEvent createMediaEvent();