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

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

Merge "Add API to configure media filter stream type for Demux Framing"

parents 8d40eb3a 57909db2
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -70,4 +70,15 @@ interface IFilter extends @1.0::IFilter {
     *         memory is not initialized.
     */
    getAvSharedHandle() generates (Result result, handle avMemory, uint64_t avMemSize);

    /**
     * Configure A/V filter’s stream type. This API only applies to A/V filters.
     *
     * @param avStreamType the stream type for A/V.
     * @return return result Result status of the operation.
     *         SUCCESS if successful,
     *         INVALID_STATE if configure can't be applied,
     *         UNKNOWN_ERROR if failed for other reasons.
     */
    configureAvStreamType(AvStreamType avStreamType) generates (Result result);
};
+21 −0
Original line number Diff line number Diff line
@@ -228,6 +228,27 @@ Return<void> Filter::getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) {
    return Void();
}

Return<Result> Filter::configureAvStreamType(const V1_1::AvStreamType& avStreamType) {
    ALOGV("%s", __FUNCTION__);

    if (!mIsMediaFilter) {
        return Result::UNAVAILABLE;
    }

    switch (avStreamType.getDiscriminator()) {
        case V1_1::AvStreamType::hidl_discriminator::audio:
            mAudioStreamType = static_cast<uint32_t>(avStreamType.audio());
            break;
        case V1_1::AvStreamType::hidl_discriminator::video:
            mVideoStreamType = static_cast<uint32_t>(avStreamType.video());
            break;
        default:
            break;
    }

    return Result::SUCCESS;
}

bool Filter::createFilterMQ() {
    ALOGV("%s", __FUNCTION__);

+5 −0
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ class Filter : public V1_1::IFilter {

    virtual Return<void> getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) override;

    virtual Return<Result> configureAvStreamType(const V1_1::AvStreamType& avStreamType) override;

    /**
     * To create a FilterMQ and its Event Flag.
     *
@@ -225,6 +227,9 @@ class Filter : public V1_1::IFilter {
    hidl_handle mSharedAvMemHandle;
    bool mUsingSharedAvMem = true;
    uint32_t mSharedAvMemOffset = 0;

    uint32_t mAudioStreamType;
    uint32_t mVideoStreamType;
};

}  // namespace implementation
+127 −0
Original line number Diff line number Diff line
@@ -568,3 +568,130 @@ safe_union FrontendScanMessageExt1_1 {

    bool isHighPriority;
};

@export
enum VideoStreamType : uint32_t {
    UNDEFINED,
    /*
     * ITU-T | ISO/IEC Reserved
     */
    RESERVED,
    /*
     * ISO/IEC 11172
     */
    MPEG1,
    /*
     * ITU-T Rec.H.262 and ISO/IEC 13818-2
     */
    MPEG2,
    /*
     * ISO/IEC 14496-2 (MPEG-4 H.263 based video)
     */
    MPEG4P2,
    /*
     * ITU-T Rec.H.264 and ISO/IEC 14496-10
     */
    AVC,
    /*
     * ITU-T Rec. H.265 and ISO/IEC 23008-2
     */
    HEVC,
    /*
     * Microsoft VC.1
     */
    VC1,
    /*
     * Google VP8
     */
    VP8,
    /*
     * Google VP9
     */
    VP9,
    /*
     * AOMedia Video 1
     */
    AV1,
    /*
     * Chinese Standard
     */
    AVS,
    /*
     * New Chinese Standard
     */
    AVS2,
};

@export
enum AudioStreamType : uint32_t {
    UNDEFINED,
    /*
     * Uncompressed Audio
     */
    PCM,
    /*
     * MPEG Audio Layer III versions
     */
    MP3,
    /*
     * ISO/IEC 11172 Audio
     */
    MPEG1,
    /*
     * ISO/IEC 13818-3
     */
    MPEG2,
    /*
     * ISO/IEC 23008-3 (MPEG-H Part 3)
     */
    MPEGH,
    /*
     * ISO/IEC 14496-3
     */
    AAC,
    /*
     * Dolby Digital
     */
    AC3,
    /*
     * Dolby Digital Plus
     */
    EAC3,
    /*
     * Dolby AC-4
     */
    AC4,
    /*
     * Basic DTS
     */
    DTS,
    /*
     * High Resolution DTS
     */
    DTS_HD,
    /*
     * Windows Media Audio
     */
    WMA,
    /*
     * Opus Interactive Audio Codec
     */
    OPUS,
    /*
     * VORBIS Interactive Audio Codec
     */
    VORBIS,
    /*
     * SJ/T 11368-2006
     */
    DRA,
};

/**
 *  Stream type for A/V filter.
 */
safe_union AvStreamType {
    VideoStreamType video;

    AudioStreamType audio;
};
+14 −0
Original line number Diff line number Diff line
@@ -164,6 +164,20 @@ AssertionResult FilterTests::configFilter(DemuxFilterSettings setting, uint64_t
    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::configAvFilterStreamType(AvStreamType type, uint64_t filterId) {
    Result status;
    EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first.";
    sp<android::hardware::tv::tuner::V1_1::IFilter> filter_v1_1 =
            android::hardware::tv::tuner::V1_1::IFilter::castFrom(mFilters[filterId]);
    if (filter_v1_1 != NULL) {
        status = filter_v1_1->configureAvStreamType(type);
    } else {
        ALOGW("[vts] Can't cast IFilter into v1_1.");
        return failure();
    }
    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::configIpFilterCid(uint32_t ipCid, uint64_t filterId) {
    Result status;
    EXPECT_TRUE(mFilters[filterId]) << "Open Ip filter first.";
Loading