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

Commit 57909db2 authored by Amy Zhang's avatar Amy Zhang
Browse files

Add API to configure media filter stream type for Demux Framing

Test: atest VtsHalTvTunerV1_1TargetTest
Bug: 170339836
Change-Id: Ib42e041ddcd6de36df8af6732715c54097995e92
parent b900f5e7
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -70,4 +70,15 @@ interface IFilter extends @1.0::IFilter {
     *         memory is not initialized.
     *         memory is not initialized.
     */
     */
    getAvSharedHandle() generates (Result result, handle avMemory, uint64_t avMemSize);
    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 Original line Diff line number Diff line
@@ -228,6 +228,27 @@ Return<void> Filter::getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) {
    return Void();
    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() {
bool Filter::createFilterMQ() {
    ALOGV("%s", __FUNCTION__);
    ALOGV("%s", __FUNCTION__);


+5 −0
Original line number Original line 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<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.
     * To create a FilterMQ and its Event Flag.
     *
     *
@@ -225,6 +227,9 @@ class Filter : public V1_1::IFilter {
    hidl_handle mSharedAvMemHandle;
    hidl_handle mSharedAvMemHandle;
    bool mUsingSharedAvMem = true;
    bool mUsingSharedAvMem = true;
    uint32_t mSharedAvMemOffset = 0;
    uint32_t mSharedAvMemOffset = 0;

    uint32_t mAudioStreamType;
    uint32_t mVideoStreamType;
};
};


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


    bool isHighPriority;
    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 Original line Diff line number Diff line
@@ -164,6 +164,20 @@ AssertionResult FilterTests::configFilter(DemuxFilterSettings setting, uint64_t
    return AssertionResult(status == Result::SUCCESS);
    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) {
AssertionResult FilterTests::configIpFilterCid(uint32_t ipCid, uint64_t filterId) {
    Result status;
    Result status;
    EXPECT_TRUE(mFilters[filterId]) << "Open Ip filter first.";
    EXPECT_TRUE(mFilters[filterId]) << "Open Ip filter first.";
Loading