mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Send DVR FMQ Status back to Filter
Events about how full DVR FMQ is should be sent back to Filter. Bug: 288170590 Test: manual Change-Id: Id87c652f0f92f8d7afed072eb7415af7ce48b0c4
This commit is contained in:
@@ -245,6 +245,11 @@ void Dvr::maySendIptvPlaybackStatusCallback() {
|
||||
IPTV_PLAYBACK_STATUS_THRESHOLD_HIGH,
|
||||
IPTV_PLAYBACK_STATUS_THRESHOLD_LOW);
|
||||
if (mPlaybackStatus != newStatus) {
|
||||
map<int64_t, std::shared_ptr<Filter>>::iterator it;
|
||||
for (it = mFilters.begin(); it != mFilters.end(); it++) {
|
||||
std::shared_ptr<Filter> currentFilter = it->second;
|
||||
currentFilter->setIptvDvrPlaybackStatus(newStatus);
|
||||
}
|
||||
mCallback->onPlaybackStatus(newStatus);
|
||||
mPlaybackStatus = newStatus;
|
||||
}
|
||||
@@ -393,7 +398,7 @@ bool Dvr::processEsDataOnPlayback(bool isVirtualFrontend, bool isRecording) {
|
||||
|
||||
// Read es raw data from the FMQ per meta data built previously
|
||||
vector<int8_t> frameData;
|
||||
map<int64_t, std::shared_ptr<IFilter>>::iterator it;
|
||||
map<int64_t, std::shared_ptr<Filter>>::iterator it;
|
||||
int pid = 0;
|
||||
for (int i = 0; i < totalFrames; i++) {
|
||||
frameData.resize(esMeta[i].len);
|
||||
@@ -425,7 +430,7 @@ void Dvr::getMetaDataValue(int& index, int8_t* dataOutputBuffer, int& value) {
|
||||
}
|
||||
|
||||
void Dvr::startTpidFilter(vector<int8_t> data) {
|
||||
map<int64_t, std::shared_ptr<IFilter>>::iterator it;
|
||||
map<int64_t, std::shared_ptr<Filter>>::iterator it;
|
||||
for (it = mFilters.begin(); it != mFilters.end(); it++) {
|
||||
uint16_t pid = ((data[1] & 0x1f) << 8) | ((data[2] & 0xff));
|
||||
if (DEBUG_DVR) {
|
||||
@@ -446,7 +451,7 @@ bool Dvr::startFilterDispatcher(bool isVirtualFrontend, bool isRecording) {
|
||||
}
|
||||
}
|
||||
|
||||
map<int64_t, std::shared_ptr<IFilter>>::iterator it;
|
||||
map<int64_t, std::shared_ptr<Filter>>::iterator it;
|
||||
// Handle the output data per filter type
|
||||
for (it = mFilters.begin(); it != mFilters.end(); it++) {
|
||||
if (!mDemux->startFilterHandler(it->first).isOk()) {
|
||||
@@ -518,7 +523,7 @@ RecordStatus Dvr::checkRecordStatusChange(uint32_t availableToWrite, uint32_t av
|
||||
return mRecordStatus;
|
||||
}
|
||||
|
||||
bool Dvr::addPlaybackFilter(int64_t filterId, std::shared_ptr<IFilter> filter) {
|
||||
bool Dvr::addPlaybackFilter(int64_t filterId, std::shared_ptr<Filter> filter) {
|
||||
mFilters[filterId] = filter;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ class Dvr : public BnDvr {
|
||||
bool createDvrMQ();
|
||||
int writePlaybackFMQ(void* buf, size_t size);
|
||||
bool writeRecordFMQ(const std::vector<int8_t>& data);
|
||||
bool addPlaybackFilter(int64_t filterId, std::shared_ptr<IFilter> filter);
|
||||
bool addPlaybackFilter(int64_t filterId, std::shared_ptr<Filter> filter);
|
||||
bool removePlaybackFilter(int64_t filterId);
|
||||
bool readPlaybackFMQ(bool isVirtualFrontend, bool isRecording);
|
||||
bool processEsDataOnPlayback(bool isVirtualFrontend, bool isRecording);
|
||||
@@ -110,7 +110,7 @@ class Dvr : public BnDvr {
|
||||
DvrType mType;
|
||||
uint32_t mBufferSize;
|
||||
std::shared_ptr<IDvrCallback> mCallback;
|
||||
std::map<int64_t, std::shared_ptr<IFilter>> mFilters;
|
||||
std::map<int64_t, std::shared_ptr<Filter>> mFilters;
|
||||
|
||||
void deleteEventFlag();
|
||||
bool readDataFromMQ();
|
||||
|
||||
@@ -565,6 +565,8 @@ void Filter::filterThreadLoop() {
|
||||
|
||||
ALOGD("[Filter] filter %" PRIu64 " threadLoop start.", mFilterId);
|
||||
|
||||
ALOGI("IPTV DVR Playback status on Filter: %d", mIptvDvrPlaybackStatus);
|
||||
|
||||
// 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) {
|
||||
|
||||
@@ -147,6 +147,7 @@ class Filter : public BnFilter {
|
||||
bool isMediaFilter() { return mIsMediaFilter; };
|
||||
bool isPcrFilter() { return mIsPcrFilter; };
|
||||
bool isRecordFilter() { return mIsRecordFilter; };
|
||||
void setIptvDvrPlaybackStatus(PlaybackStatus newStatus) { mIptvDvrPlaybackStatus = newStatus; };
|
||||
|
||||
private:
|
||||
// Demux service
|
||||
@@ -286,6 +287,8 @@ class Filter : public BnFilter {
|
||||
int mStartId = 0;
|
||||
uint8_t mScramblingStatusMonitored = 0;
|
||||
uint8_t mIpCidMonitored = 0;
|
||||
|
||||
PlaybackStatus mIptvDvrPlaybackStatus;
|
||||
};
|
||||
|
||||
} // namespace tuner
|
||||
|
||||
Reference in New Issue
Block a user