diff --git a/tv/tuner/aidl/default/Dvr.cpp b/tv/tuner/aidl/default/Dvr.cpp index f997b15e71..393200cb4b 100644 --- a/tv/tuner/aidl/default/Dvr.cpp +++ b/tv/tuner/aidl/default/Dvr.cpp @@ -245,6 +245,11 @@ void Dvr::maySendIptvPlaybackStatusCallback() { IPTV_PLAYBACK_STATUS_THRESHOLD_HIGH, IPTV_PLAYBACK_STATUS_THRESHOLD_LOW); if (mPlaybackStatus != newStatus) { + map>::iterator it; + for (it = mFilters.begin(); it != mFilters.end(); it++) { + std::shared_ptr 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 frameData; - map>::iterator it; + map>::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 data) { - map>::iterator it; + map>::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>::iterator it; + map>::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 filter) { +bool Dvr::addPlaybackFilter(int64_t filterId, std::shared_ptr filter) { mFilters[filterId] = filter; return true; } diff --git a/tv/tuner/aidl/default/Dvr.h b/tv/tuner/aidl/default/Dvr.h index 4af187bce4..07f95ad966 100644 --- a/tv/tuner/aidl/default/Dvr.h +++ b/tv/tuner/aidl/default/Dvr.h @@ -95,7 +95,7 @@ class Dvr : public BnDvr { bool createDvrMQ(); int writePlaybackFMQ(void* buf, size_t size); bool writeRecordFMQ(const std::vector& data); - bool addPlaybackFilter(int64_t filterId, std::shared_ptr filter); + bool addPlaybackFilter(int64_t filterId, std::shared_ptr 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 mCallback; - std::map> mFilters; + std::map> mFilters; void deleteEventFlag(); bool readDataFromMQ(); diff --git a/tv/tuner/aidl/default/Filter.cpp b/tv/tuner/aidl/default/Filter.cpp index ba9602e272..7b62c3e21e 100644 --- a/tv/tuner/aidl/default/Filter.cpp +++ b/tv/tuner/aidl/default/Filter.cpp @@ -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) { diff --git a/tv/tuner/aidl/default/Filter.h b/tv/tuner/aidl/default/Filter.h index 0985296657..1cf6b3abc4 100644 --- a/tv/tuner/aidl/default/Filter.h +++ b/tv/tuner/aidl/default/Filter.h @@ -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