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

Commit 56a37b05 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

Add option to query hardware decoders only

Add an option to OMXCodec::QueryCodecs() to filter out
 software codecs.

Update stagefright command line tool to list the roles of codecs.

Change-Id: Icddb79118c30fe13cc3aea20f340174cc082c4e0
parent a6c53c79
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -803,6 +803,7 @@ int main(int argc, char **argv) {
            Vector<CodecCapabilities> results;
            CHECK_EQ(QueryCodecs(omx, kMimeTypes[k],
                                 true, // queryDecoders
                                 false, // hwCodecOnly
                                 &results), (status_t)OK);

            for (size_t i = 0; i < results.size(); ++i) {
@@ -842,7 +843,12 @@ int main(int argc, char **argv) {

        for (List<IOMX::ComponentInfo>::iterator it = list.begin();
             it != list.end(); ++it) {
            printf("%s\n", (*it).mName.string());
            printf("%s\t Roles: ", (*it).mName.string());
            for (List<String8>::iterator itRoles = (*it).mRoles.begin() ;
                    itRoles != (*it).mRoles.end() ; ++itRoles) {
                printf("%s\t", (*itRoles).string());
            }
            printf("\n");
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -360,7 +360,7 @@ struct CodecCapabilities {

status_t QueryCodecs(
        const sp<IOMX> &omx,
        const char *mimeType, bool queryDecoders,
        const char *mimeType, bool queryDecoders, bool hwCodecOnly,
        Vector<CodecCapabilities> *results);

}  // namespace android
+11 −16
Original line number Diff line number Diff line
@@ -4406,26 +4406,19 @@ status_t OMXCodec::pause() {

status_t QueryCodecs(
        const sp<IOMX> &omx,
        const char *mime, bool queryDecoders,
        const char *mime, bool queryDecoders, bool hwCodecOnly,
        Vector<CodecCapabilities> *results) {
    Vector<String8> matchingCodecs;
    results->clear();

    for (int index = 0;; ++index) {
        const char *componentName;
    OMXCodec::findMatchingCodecs(mime,
            !queryDecoders /*createEncoder*/,
            NULL /*matchComponentName*/,
            hwCodecOnly ? OMXCodec::kHardwareCodecsOnly : 0 /*flags*/,
            &matchingCodecs);

        if (!queryDecoders) {
            componentName = GetCodec(
                    kEncoderInfo, sizeof(kEncoderInfo) / sizeof(kEncoderInfo[0]),
                    mime, index);
        } else {
            componentName = GetCodec(
                    kDecoderInfo, sizeof(kDecoderInfo) / sizeof(kDecoderInfo[0]),
                    mime, index);
        }

        if (!componentName) {
            return OK;
        }
    for (size_t c = 0; c < matchingCodecs.size(); c++) {
        const char *componentName = matchingCodecs.itemAt(c).string();

        if (strncmp(componentName, "OMX.", 4)) {
            // Not an OpenMax component but a software codec.
@@ -4490,6 +4483,8 @@ status_t QueryCodecs(

        CHECK_EQ(omx->freeNode(node), (status_t)OK);
    }

    return OK;
}

void OMXCodec::restorePatchedDataPointer(BufferInfo *info) {