Loading tv/tuner/aidl/default/Dvr.cpp +9 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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) { Loading @@ -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()) { Loading Loading @@ -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; } Loading tv/tuner/aidl/default/Dvr.h +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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(); Loading tv/tuner/aidl/default/Filter.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading tv/tuner/aidl/default/Filter.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -286,6 +287,8 @@ class Filter : public BnFilter { int mStartId = 0; uint8_t mScramblingStatusMonitored = 0; uint8_t mIpCidMonitored = 0; PlaybackStatus mIptvDvrPlaybackStatus; }; } // namespace tuner Loading Loading
tv/tuner/aidl/default/Dvr.cpp +9 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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) { Loading @@ -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()) { Loading Loading @@ -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; } Loading
tv/tuner/aidl/default/Dvr.h +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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(); Loading
tv/tuner/aidl/default/Filter.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
tv/tuner/aidl/default/Filter.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -286,6 +287,8 @@ class Filter : public BnFilter { int mStartId = 0; uint8_t mScramblingStatusMonitored = 0; uint8_t mIpCidMonitored = 0; PlaybackStatus mIptvDvrPlaybackStatus; }; } // namespace tuner Loading