Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52b7f34a authored by sadiqsada's avatar sadiqsada Committed by Sadiq Sada
Browse files

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
parent 56c98294
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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;
}
+2 −2
Original line number Diff line number Diff line
@@ -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();
+2 −0
Original line number Diff line number Diff line
@@ -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) {
+3 −0
Original line number Diff line number Diff line
@@ -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