Merge "Move Tuner 1.1 new RecordFilterEvent fields into a separate struct"
diff --git a/tv/tuner/1.1/IFilterCallback.hal b/tv/tuner/1.1/IFilterCallback.hal
index a80273b..3e5f047 100644
--- a/tv/tuner/1.1/IFilterCallback.hal
+++ b/tv/tuner/1.1/IFilterCallback.hal
@@ -17,13 +17,15 @@
package android.hardware.tv.tuner@1.1;
import @1.0::IFilterCallback;
-import @1.1::DemuxFilterEvent;
+import @1.0::DemuxFilterEvent;
+import @1.1::DemuxFilterEventExt;
interface IFilterCallback extends @1.0::IFilterCallback {
/**
* Notify the client that a new filter event happened.
*
- * @param filterEvent a v1_1 filter event.
+ * @param filterEvent a v1_0 filter event.
+ * @param filterEventExt a v1_1 extended filter event.
*/
- oneway onFilterEvent_1_1(DemuxFilterEvent filterEvent);
+ oneway onFilterEvent_1_1(DemuxFilterEvent filterEvent, DemuxFilterEventExt filterEventExt);
};
diff --git a/tv/tuner/1.1/default/Filter.cpp b/tv/tuner/1.1/default/Filter.cpp
index 4d08afe..fae83a2 100644
--- a/tv/tuner/1.1/default/Filter.cpp
+++ b/tv/tuner/1.1/default/Filter.cpp
@@ -220,7 +220,7 @@
// For the first time of filter output, implementation needs to send the filter
// Event Callback without waiting for the DATA_CONSUMED to init the process.
while (mFilterThreadRunning) {
- if (mFilterEvent.events.size() == 0 && mFilterEvent_1_1.events.size() == 0) {
+ if (mFilterEvent.events.size() == 0 && mFilterEventExt.events.size() == 0) {
if (DEBUG_FILTER) {
ALOGD("[Filter] wait for filter data output.");
}
@@ -228,18 +228,17 @@
continue;
}
// After successfully write, send a callback and wait for the read to be done
- if (mFilterEvent_1_1.events.size() > 0) {
- if (mCallback_1_1 == nullptr) {
- ALOGE("[Filter] IFilterCallback_1_1 has not been configured yet. Can't send event");
- mFilterThreadRunning = false;
- break;
- }
- mCallback_1_1->onFilterEvent_1_1(mFilterEvent_1_1);
- mFilterEvent_1_1.events.resize(0);
- } else {
+ if (mCallback_1_1 != nullptr) {
+ mCallback_1_1->onFilterEvent_1_1(mFilterEvent, mFilterEventExt);
+ mFilterEventExt.events.resize(0);
+ } else if (mCallback != nullptr) {
mCallback->onFilterEvent(mFilterEvent);
- mFilterEvent.events.resize(0);
+ } else {
+ ALOGD("[Filter] filter callback is not configured yet.");
+ mFilterThreadRunning = false;
+ return;
}
+ mFilterEvent.events.resize(0);
freeAvHandle();
mFilterStatus = DemuxFilterStatus::DATA_READY;
@@ -279,8 +278,8 @@
mCallback->onFilterEvent(mFilterEvent);
mFilterEvent.events.resize(0);
} else if (mCallback_1_1 != nullptr) {
- mCallback_1_1->onFilterEvent_1_1(mFilterEvent_1_1);
- mFilterEvent_1_1.events.resize(0);
+ mCallback_1_1->onFilterEvent_1_1(mFilterEvent, mFilterEventExt);
+ mFilterEventExt.events.resize(0);
}
break;
}
@@ -612,22 +611,18 @@
recordEvent = {
.byteNumber = mRecordFilterOutput.size(),
};
- V1_1::DemuxFilterTsRecordEvent recordEvent_1_1;
- recordEvent_1_1 = {
- .tsRecordEvent_1_0 = recordEvent,
+ V1_1::DemuxFilterRecordEventExt recordEventExt;
+ recordEventExt = {
.pts = (mPts == 0) ? time(NULL) * 900000 : mPts,
};
int size;
- if (mCallback_1_1 != nullptr) {
- size = mFilterEvent_1_1.events.size();
- mFilterEvent_1_1.events.resize(size + 1);
- mFilterEvent_1_1.events[size].tsRecord(recordEvent_1_1);
- } else if (mCallback != nullptr) {
- size = mFilterEvent.events.size();
- mFilterEvent.events.resize(size + 1);
- mFilterEvent.events[size].tsRecord(recordEvent);
- }
+ size = mFilterEventExt.events.size();
+ mFilterEventExt.events.resize(size + 1);
+ mFilterEventExt.events[size].tsRecord(recordEventExt);
+ size = mFilterEvent.events.size();
+ mFilterEvent.events.resize(size + 1);
+ mFilterEvent.events[size].tsRecord(recordEvent);
mRecordFilterOutput.clear();
return Result::SUCCESS;
diff --git a/tv/tuner/1.1/default/Filter.h b/tv/tuner/1.1/default/Filter.h
index 8e6fe38..fa52f96 100644
--- a/tv/tuner/1.1/default/Filter.h
+++ b/tv/tuner/1.1/default/Filter.h
@@ -128,7 +128,7 @@
bool mIsUsingFMQ = false;
EventFlag* mFilterEventFlag;
DemuxFilterEvent mFilterEvent;
- V1_1::DemuxFilterEvent mFilterEvent_1_1;
+ V1_1::DemuxFilterEventExt mFilterEventExt;
// Thread handlers
pthread_t mFilterThread;
diff --git a/tv/tuner/1.1/types.hal b/tv/tuner/1.1/types.hal
index 5c02b85..bbfc39a 100644
--- a/tv/tuner/1.1/types.hal
+++ b/tv/tuner/1.1/types.hal
@@ -17,15 +17,10 @@
package android.hardware.tv.tuner@1.1;
import @1.0::Constant;
-import @1.0::DemuxFilterDownloadEvent;
-import @1.0::DemuxFilterIpPayloadEvent;
-import @1.0::DemuxFilterMediaEvent;
import @1.0::DemuxFilterMmtpRecordEvent;
-import @1.0::DemuxFilterPesEvent;
-import @1.0::DemuxFilterSectionEvent;
-import @1.0::DemuxFilterTemiEvent;
import @1.0::DemuxFilterTsRecordEvent;
import android.hidl.safe_union@1.0;
+import android.hidl.safe_union@1.0::Monostate;
@export
enum Constant : @1.0::Constant {
@@ -52,64 +47,36 @@
};
/**
- * Filter Event for TS Record data.
+ * Extended Demux Filter Record Event.
*/
-struct DemuxFilterTsRecordEvent {
- /**
- * V1_0 Filter Event for TS Record data.
- */
- @1.0::DemuxFilterTsRecordEvent tsRecordEvent_1_0;
-
+struct DemuxFilterRecordEventExt {
/**
* The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
* and has the same format as the PTS in ISO/IEC 13818-1. It is used only for the SC and
* the SC_HEVC.
*/
uint64_t pts;
-};
-
-/**
- * Filter Event for MMTP Record data.
- */
-struct DemuxFilterMmtpRecordEvent {
- /**
- * V1_0 Filter Event for MMTP Record data.
- */
- @1.0::DemuxFilterMmtpRecordEvent mmtpRecordEvent_1_0;
/**
* MPU sequence number of the filtered data. This is only used for MMTP.
*/
uint32_t mpuSequenceNumber;
-
- /**
- * The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
- * and has the same format as the PTS in ISO/IEC 13818-1. It is used only for the SC and
- * the SC_HEVC.
- */
- uint64_t pts;
};
/**
- * Filter Event.
+ * Extended Demux Filter Event.
*/
-struct DemuxFilterEvent {
+struct DemuxFilterEventExt {
safe_union Event {
- DemuxFilterSectionEvent section;
+ /**
+ * No extended record filter Event. This is used by the tsRecord or mmtpRecord filter event
+ * that does not contain the DemuxFilterRecordEventExt information.
+ */
+ Monostate noinit;
- DemuxFilterMediaEvent media;
+ DemuxFilterRecordEventExt tsRecord;
- DemuxFilterPesEvent pes;
-
- @1.1::DemuxFilterTsRecordEvent tsRecord;
-
- @1.1::DemuxFilterMmtpRecordEvent mmtpRecord;
-
- DemuxFilterDownloadEvent download;
-
- DemuxFilterIpPayloadEvent ipPayload;
-
- DemuxFilterTemiEvent temi;
+ DemuxFilterRecordEventExt mmtpRecord;
};
/**
diff --git a/tv/tuner/1.1/vts/functional/FilterTests.cpp b/tv/tuner/1.1/vts/functional/FilterTests.cpp
index 9cbec86..24e1fa0 100644
--- a/tv/tuner/1.1/vts/functional/FilterTests.cpp
+++ b/tv/tuner/1.1/vts/functional/FilterTests.cpp
@@ -20,11 +20,12 @@
bool result = false;
ALOGW("[vts] reading from filter FMQ or buffer %d", mFilterId);
// todo separate filter handlers
- for (int i = 0; i < mFilterEvent.events.size(); i++) {
- switch (mFilterEventType) {
- case FilterEventType::RECORD:
- ALOGW("[vts] Record filter event, pts=%" PRIu64 ".",
- mFilterEvent.events[0].tsRecord().pts);
+ for (int i = 0; i < mFilterEventExt.events.size(); i++) {
+ auto eventExt = mFilterEventExt.events[i];
+ switch (eventExt.getDiscriminator()) {
+ case DemuxFilterEventExt::Event::hidl_discriminator::tsRecord:
+ ALOGW("[vts] Extended TS record filter event, pts=%" PRIu64 ".",
+ eventExt.tsRecord().pts);
break;
default:
break;
diff --git a/tv/tuner/1.1/vts/functional/FilterTests.h b/tv/tuner/1.1/vts/functional/FilterTests.h
index 8156f14..721e419 100644
--- a/tv/tuner/1.1/vts/functional/FilterTests.h
+++ b/tv/tuner/1.1/vts/functional/FilterTests.h
@@ -44,6 +44,7 @@
using android::hardware::MQDescriptorSync;
using android::hardware::Return;
using android::hardware::Void;
+using android::hardware::tv::tuner::V1_0::DemuxFilterEvent;
using android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
using android::hardware::tv::tuner::V1_0::DemuxFilterSettings;
using android::hardware::tv::tuner::V1_0::DemuxFilterStatus;
@@ -52,7 +53,7 @@
using android::hardware::tv::tuner::V1_0::IDemux;
using android::hardware::tv::tuner::V1_0::IFilter;
using android::hardware::tv::tuner::V1_0::Result;
-using android::hardware::tv::tuner::V1_1::DemuxFilterEvent;
+using android::hardware::tv::tuner::V1_1::DemuxFilterEventExt;
using android::hardware::tv::tuner::V1_1::IFilterCallback;
using android::hardware::tv::tuner::V1_1::ITuner;
@@ -78,11 +79,13 @@
class FilterCallback : public IFilterCallback {
public:
- virtual Return<void> onFilterEvent_1_1(const DemuxFilterEvent& filterEvent) override {
+ virtual Return<void> onFilterEvent_1_1(const DemuxFilterEvent& filterEvent,
+ const DemuxFilterEventExt& filterEventExt) override {
android::Mutex::Autolock autoLock(mMsgLock);
// Temprarily we treat the first coming back filter data on the matching pid a success
// once all of the MQ are cleared, means we got all the expected output
mFilterEvent = filterEvent;
+ mFilterEventExt = filterEventExt;
readFilterEventData();
mPidFilterOutputCount++;
mMsgCondition.signal();
@@ -109,6 +112,7 @@
sp<IFilter> mFilter;
FilterEventType mFilterEventType;
DemuxFilterEvent mFilterEvent;
+ DemuxFilterEventExt mFilterEventExt;
android::Mutex mMsgLock;
android::Mutex mFilterOutputLock;