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

Commit e8c8ed47 authored by Lajos Molnar's avatar Lajos Molnar Committed by Android (Google) Code Review
Browse files

Merge "stagefright: use OMXCodec's QueryCodec for capabilities" into nyc-dev

parents 3ea4f828 7f2262fc
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ namespace android {

struct AMessage;
class Parcel;
struct CodecCapabilities;

typedef KeyedVector<AString, AString> CodecSettings;

@@ -126,9 +127,7 @@ private:
    void addQuirk(const char *name);
    status_t addMime(const char *mime);
    status_t updateMime(const char *mime);
  
    // after this call |caps| will be owned by MediaCodecInfo, which may modify it
    status_t setCapabilitiesFromCodec(const sp<Capabilities> &caps);
    status_t initializeCapabilities(const CodecCapabilities &caps);
    void addDetail(const AString &key, const AString &value);
    void addFeature(const AString &key, int32_t value);
    void addFeature(const AString &key, const char *value);
+21 −5
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
#include <media/stagefright/foundation/AMessage.h>
#include <binder/Parcel.h>

#include <media/stagefright/OMXCodec.h>

namespace android {

void MediaCodecInfo::Capabilities::getSupportedProfileLevels(
@@ -238,12 +240,26 @@ void MediaCodecInfo::removeMime(const char *mime) {
    }
}

status_t MediaCodecInfo::setCapabilitiesFromCodec(const sp<Capabilities> &caps) {
    if (mCurrentCaps != NULL) {
        // keep current capabilities map
        caps->mDetails = mCurrentCaps->mDetails;
status_t MediaCodecInfo::initializeCapabilities(const CodecCapabilities &caps) {
    mCurrentCaps->mProfileLevels.clear();
    mCurrentCaps->mColorFormats.clear();

    for (size_t i = 0; i < caps.mProfileLevels.size(); ++i) {
        const CodecProfileLevel &src = caps.mProfileLevels.itemAt(i);

        ProfileLevel profileLevel;
        profileLevel.mProfile = src.mProfile;
        profileLevel.mLevel = src.mLevel;
        mCurrentCaps->mProfileLevels.push_back(profileLevel);
    }

    for (size_t i = 0; i < caps.mColorFormats.size(); ++i) {
        mCurrentCaps->mColorFormats.push_back(caps.mColorFormats.itemAt(i));
    }
    mCurrentCaps = caps;

    mCurrentCaps->mFlags = caps.mFlags;
    mCurrentCaps->mDetails = new AMessage;

    return OK;
}

+6 −10
Original line number Diff line number Diff line
@@ -31,10 +31,10 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/ACodec.h>
#include <media/stagefright/MediaCodec.h>
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/OMXClient.h>
#include <media/stagefright/OMXCodec.h>

#include <sys/stat.h>
#include <utils/threads.h>
@@ -752,22 +752,18 @@ status_t MediaCodecList::initializeCapabilities(const char *type) {
    ALOGV("initializeCapabilities %s:%s",
            mCurrentInfo->mName.c_str(), type);

    sp<MediaCodecInfo::Capabilities> caps;
    status_t err = MediaCodec::QueryCapabilities(
            mCurrentInfo->mName,
    CodecCapabilities caps;
    status_t err = QueryCodec(
            mOMX,
            mCurrentInfo->mName.c_str(),
            type,
            mCurrentInfo->mIsEncoder,
            &caps);
    if (err != OK) {
        return err;
    } else if (caps == NULL) {
        ALOGE("MediaCodec::QueryCapabilities returned OK but no capabilities for '%s':'%s':'%s'",
                mCurrentInfo->mName.c_str(), type,
                mCurrentInfo->mIsEncoder ? "encoder" : "decoder");
        return UNKNOWN_ERROR;
    }

    return mCurrentInfo->setCapabilitiesFromCodec(caps);
    return mCurrentInfo->initializeCapabilities(caps);
}

status_t MediaCodecList::addQuirk(const char **attrs) {