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

Commit a240379a authored by Amy Zhang's avatar Amy Zhang Committed by Android (Google) Code Review
Browse files

Merge "Move Tuner 1.1 new RecordFilterEvent fields into a separate struct"

parents ca763655 cc9207cc
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -17,13 +17,15 @@
package android.hardware.tv.tuner@1.1;
package android.hardware.tv.tuner@1.1;


import @1.0::IFilterCallback;
import @1.0::IFilterCallback;
import @1.1::DemuxFilterEvent;
import @1.0::DemuxFilterEvent;
import @1.1::DemuxFilterEventExt;


interface IFilterCallback extends @1.0::IFilterCallback {
interface IFilterCallback extends @1.0::IFilterCallback {
    /**
    /**
     * Notify the client that a new filter event happened.
     * Notify the client that a new filter event happened.
     *
     *
     * @param filterEvent a v1_1 filter event.
     * @param filterEvent a v1_0 filter event.
     * @param filterEventExt a v1_1 extended filter event.
     */
     */
    oneway onFilterEvent_1_1(DemuxFilterEvent filterEvent);
    oneway onFilterEvent_1_1(DemuxFilterEvent filterEvent, DemuxFilterEventExt filterEventExt);
};
};
+20 −25
Original line number Original line Diff line number Diff line
@@ -220,7 +220,7 @@ void Filter::filterThreadLoop() {
    // For the first time of filter output, implementation needs to send the filter
    // 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.
    // Event Callback without waiting for the DATA_CONSUMED to init the process.
    while (mFilterThreadRunning) {
    while (mFilterThreadRunning) {
        if (mFilterEvent.events.size() == 0 && mFilterEvent_1_1.events.size() == 0) {
        if (mFilterEvent.events.size() == 0 && mFilterEventExt.events.size() == 0) {
            if (DEBUG_FILTER) {
            if (DEBUG_FILTER) {
                ALOGD("[Filter] wait for filter data output.");
                ALOGD("[Filter] wait for filter data output.");
            }
            }
@@ -228,18 +228,17 @@ void Filter::filterThreadLoop() {
            continue;
            continue;
        }
        }
        // After successfully write, send a callback and wait for the read to be done
        // After successfully write, send a callback and wait for the read to be done
        if (mFilterEvent_1_1.events.size() > 0) {
        if (mCallback_1_1 != nullptr) {
            if (mCallback_1_1 == nullptr) {
            mCallback_1_1->onFilterEvent_1_1(mFilterEvent, mFilterEventExt);
                ALOGE("[Filter] IFilterCallback_1_1 has not been configured yet. Can't send event");
            mFilterEventExt.events.resize(0);
        } else if (mCallback != nullptr) {
            mCallback->onFilterEvent(mFilterEvent);
        } else {
            ALOGD("[Filter] filter callback is not configured yet.");
            mFilterThreadRunning = false;
            mFilterThreadRunning = false;
                break;
            return;
        }
        }
            mCallback_1_1->onFilterEvent_1_1(mFilterEvent_1_1);
            mFilterEvent_1_1.events.resize(0);
        } else {
            mCallback->onFilterEvent(mFilterEvent);
        mFilterEvent.events.resize(0);
        mFilterEvent.events.resize(0);
        }


        freeAvHandle();
        freeAvHandle();
        mFilterStatus = DemuxFilterStatus::DATA_READY;
        mFilterStatus = DemuxFilterStatus::DATA_READY;
@@ -279,8 +278,8 @@ void Filter::filterThreadLoop() {
                    mCallback->onFilterEvent(mFilterEvent);
                    mCallback->onFilterEvent(mFilterEvent);
                    mFilterEvent.events.resize(0);
                    mFilterEvent.events.resize(0);
                } else if (mCallback_1_1 != nullptr) {
                } else if (mCallback_1_1 != nullptr) {
                    mCallback_1_1->onFilterEvent_1_1(mFilterEvent_1_1);
                    mCallback_1_1->onFilterEvent_1_1(mFilterEvent, mFilterEventExt);
                    mFilterEvent_1_1.events.resize(0);
                    mFilterEventExt.events.resize(0);
                }
                }
                break;
                break;
            }
            }
@@ -612,22 +611,18 @@ Result Filter::startRecordFilterHandler() {
    recordEvent = {
    recordEvent = {
            .byteNumber = mRecordFilterOutput.size(),
            .byteNumber = mRecordFilterOutput.size(),
    };
    };
    V1_1::DemuxFilterTsRecordEvent recordEvent_1_1;
    V1_1::DemuxFilterRecordEventExt recordEventExt;
    recordEvent_1_1 = {
    recordEventExt = {
            .tsRecordEvent_1_0 = recordEvent,
            .pts = (mPts == 0) ? time(NULL) * 900000 : mPts,
            .pts = (mPts == 0) ? time(NULL) * 900000 : mPts,
    };
    };


    int size;
    int size;
    if (mCallback_1_1 != nullptr) {
    size = mFilterEventExt.events.size();
        size = mFilterEvent_1_1.events.size();
    mFilterEventExt.events.resize(size + 1);
        mFilterEvent_1_1.events.resize(size + 1);
    mFilterEventExt.events[size].tsRecord(recordEventExt);
        mFilterEvent_1_1.events[size].tsRecord(recordEvent_1_1);
    } else if (mCallback != nullptr) {
    size = mFilterEvent.events.size();
    size = mFilterEvent.events.size();
    mFilterEvent.events.resize(size + 1);
    mFilterEvent.events.resize(size + 1);
    mFilterEvent.events[size].tsRecord(recordEvent);
    mFilterEvent.events[size].tsRecord(recordEvent);
    }


    mRecordFilterOutput.clear();
    mRecordFilterOutput.clear();
    return Result::SUCCESS;
    return Result::SUCCESS;
+1 −1
Original line number Original line Diff line number Diff line
@@ -128,7 +128,7 @@ class Filter : public V1_1::IFilter {
    bool mIsUsingFMQ = false;
    bool mIsUsingFMQ = false;
    EventFlag* mFilterEventFlag;
    EventFlag* mFilterEventFlag;
    DemuxFilterEvent mFilterEvent;
    DemuxFilterEvent mFilterEvent;
    V1_1::DemuxFilterEvent mFilterEvent_1_1;
    V1_1::DemuxFilterEventExt mFilterEventExt;


    // Thread handlers
    // Thread handlers
    pthread_t mFilterThread;
    pthread_t mFilterThread;
+12 −45
Original line number Original line Diff line number Diff line
@@ -17,15 +17,10 @@
package android.hardware.tv.tuner@1.1;
package android.hardware.tv.tuner@1.1;


import @1.0::Constant;
import @1.0::Constant;
import @1.0::DemuxFilterDownloadEvent;
import @1.0::DemuxFilterIpPayloadEvent;
import @1.0::DemuxFilterMediaEvent;
import @1.0::DemuxFilterMmtpRecordEvent;
import @1.0::DemuxFilterMmtpRecordEvent;
import @1.0::DemuxFilterPesEvent;
import @1.0::DemuxFilterSectionEvent;
import @1.0::DemuxFilterTemiEvent;
import @1.0::DemuxFilterTsRecordEvent;
import @1.0::DemuxFilterTsRecordEvent;
import android.hidl.safe_union@1.0;
import android.hidl.safe_union@1.0;
import android.hidl.safe_union@1.0::Monostate;


@export
@export
enum Constant : @1.0::Constant {
enum Constant : @1.0::Constant {
@@ -52,64 +47,36 @@ enum Constant64Bit : uint64_t {
};
};


/**
/**
 * Filter Event for TS Record data.
 * Extended Demux Filter Record Event.
 */
 */
struct DemuxFilterTsRecordEvent {
struct DemuxFilterRecordEventExt {
    /**
     * V1_0 Filter Event for TS Record data.
     */
    @1.0::DemuxFilterTsRecordEvent tsRecordEvent_1_0;

    /**
    /**
     * The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
     * The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
     * and has the same format as the PTS in ISO/IEC 13818-1. It is used only for the SC and
     * and has the same format as the PTS in ISO/IEC 13818-1. It is used only for the SC and
     * the SC_HEVC.
     * the SC_HEVC.
     */
     */
    uint64_t pts;
    uint64_t pts;
};

/**
 * Filter Event for MMTP Record data.
 */
struct DemuxFilterMmtpRecordEvent {
    /**
     * V1_0 Filter Event for MMTP Record data.
     */
    @1.0::DemuxFilterMmtpRecordEvent mmtpRecordEvent_1_0;


    /**
    /**
     * MPU sequence number of the filtered data. This is only used for MMTP.
     * MPU sequence number of the filtered data. This is only used for MMTP.
     */
     */
    uint32_t mpuSequenceNumber;
    uint32_t mpuSequenceNumber;

    /**
     * The Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
     * and has the same format as the PTS in ISO/IEC 13818-1. It is used only for the SC and
     * the SC_HEVC.
     */
    uint64_t pts;
};
};


/**
/**
 * Filter Event.
 * Extended Demux Filter Event.
 */
 */
struct DemuxFilterEvent {
struct DemuxFilterEventExt {
    safe_union Event {
    safe_union Event {
        DemuxFilterSectionEvent section;
        /**

         * No extended record filter Event. This is used by the tsRecord or mmtpRecord filter event
        DemuxFilterMediaEvent media;
         * that does not contain the DemuxFilterRecordEventExt information.

         */
        DemuxFilterPesEvent pes;
        Monostate noinit;

        @1.1::DemuxFilterTsRecordEvent tsRecord;

        @1.1::DemuxFilterMmtpRecordEvent mmtpRecord;

        DemuxFilterDownloadEvent download;


        DemuxFilterIpPayloadEvent ipPayload;
        DemuxFilterRecordEventExt tsRecord;


        DemuxFilterTemiEvent temi;
        DemuxFilterRecordEventExt mmtpRecord;
    };
    };


    /**
    /**
+6 −5
Original line number Original line Diff line number Diff line
@@ -20,11 +20,12 @@ bool FilterCallback::readFilterEventData() {
    bool result = false;
    bool result = false;
    ALOGW("[vts] reading from filter FMQ or buffer %d", mFilterId);
    ALOGW("[vts] reading from filter FMQ or buffer %d", mFilterId);
    // todo separate filter handlers
    // todo separate filter handlers
    for (int i = 0; i < mFilterEvent.events.size(); i++) {
    for (int i = 0; i < mFilterEventExt.events.size(); i++) {
        switch (mFilterEventType) {
        auto eventExt = mFilterEventExt.events[i];
            case FilterEventType::RECORD:
        switch (eventExt.getDiscriminator()) {
                ALOGW("[vts] Record filter event, pts=%" PRIu64 ".",
            case DemuxFilterEventExt::Event::hidl_discriminator::tsRecord:
                      mFilterEvent.events[0].tsRecord().pts);
                ALOGW("[vts] Extended TS record filter event, pts=%" PRIu64 ".",
                      eventExt.tsRecord().pts);
                break;
                break;
            default:
            default:
                break;
                break;
Loading