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

Commit c02a1832 authored by Sadiq Sada's avatar Sadiq Sada Committed by Android (Google) Code Review
Browse files

Merge "Send DVR FMQ Status back to Filter" into main

parents 06b0211a 52b7f34a
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