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

Commit 1d474cdf authored by Wonsik Kim's avatar Wonsik Kim Committed by android-build-merger
Browse files

Merge "Decouple libstagefright from Codec 2.0" into pi-dev

am: b3aae29d

Change-Id: Ib2dd007c4f485437b83d3ed86c92fb6be4bbec6b
parents 464d131f b3aae29d
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ cc_library_shared {
    srcs: [
        "CodecBase.cpp",
        "FrameRenderTracker.cpp",
        "MediaCodecListWriter.cpp",
    ],

    cflags: [
@@ -66,7 +67,7 @@ cc_library_shared {
    shared_libs: [
        "libgui",
        "liblog",
        "libmedia",
        "libmedia_omx",
        "libstagefright_foundation",
        "libui",
        "libutils",
@@ -95,6 +96,7 @@ cc_library_shared {
        "CCodec.cpp",
        "CCodecBufferChannel.cpp",
        "Codec2Buffer.cpp",
        "Codec2InfoBuilder.cpp",
    ],

    cflags: [
@@ -120,8 +122,10 @@ cc_library_shared {
        "libstagefright_codecbase",
        "libstagefright_foundation",
        "libstagefright_omx_utils",
        "libstagefright_xmlparser",
        "libui",
        "libutils",
        // TODO: Remove libv4l2_c2_componentstore.
        "libv4l2_c2componentstore",
        "android.hardware.cas.native@1.0",

@@ -154,7 +158,6 @@ cc_library_shared {
        "AudioPresentationInfo.cpp",
        "AudioSource.cpp",
        "BufferImpl.cpp",
        "Codec2InfoBuilder.cpp",
        "CallbackDataSource.cpp",
        "CallbackMediaSource.cpp",
        "CameraSource.cpp",
@@ -190,6 +193,7 @@ cc_library_shared {
        "SkipCutBuffer.cpp",
        "StagefrightMediaScanner.cpp",
        "StagefrightMetadataRetriever.cpp",
        "StagefrightPluginLoader.cpp",
        "SurfaceUtils.cpp",
        "Utils.cpp",
        "ThrottledSource.cpp",
@@ -217,8 +221,6 @@ cc_library_shared {
        "libutils",
        "libmedia_helper",
        "libstagefright_ccodec",
        "libstagefright_codec2",
        "libstagefright_codec2_vndk",
        "libstagefright_codecbase",
        "libstagefright_foundation",
        "libstagefright_omx",
@@ -228,8 +230,6 @@ cc_library_shared {
        "libhidlallocatorutils",
        "libhidlbase",
        "libhidlmemory",
        // TODO: Remove libv4l2_c2_componentstore.
        "libv4l2_c2componentstore",
        "libziparchive",
        "android.hidl.allocator@1.0",
        "android.hardware.cas.native@1.0",
+4 −0
Original line number Diff line number Diff line
@@ -910,3 +910,7 @@ void CCodec::initiateReleaseIfStuck() {
}

}  // namespace android

extern "C" android::CodecBase *CreateCodec() {
    return new android::CCodec;
}
+4 −0
Original line number Diff line number Diff line
@@ -159,3 +159,7 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) {
}

}  // namespace android

extern "C" android::MediaCodecListBuilderBase *CreateBuilder() {
    return new android::Codec2InfoBuilder;
}
+8 −3
Original line number Diff line number Diff line
@@ -16,11 +16,14 @@

//#define LOG_NDEBUG 0
#define LOG_TAG "MediaCodec"
#include <utils/Log.h>

#include <inttypes.h>

#include "include/SecureBuffer.h"
#include "include/SharedMemoryBuffer.h"
#include "include/SoftwareRenderer.h"
#include "StagefrightPluginLoader.h"

#include <android/hardware/cas/native/1.0/IDescrambler.h>

@@ -45,7 +48,6 @@
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/ACodec.h>
#include <media/stagefright/BufferProducerWrapper.h>
#include <media/stagefright/CCodec.h>
#include <media/stagefright/MediaCodec.h>
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaDefs.h>
@@ -56,7 +58,6 @@
#include <media/stagefright/SurfaceUtils.h>
#include <mediautils/BatteryNotifier.h>
#include <private/android_filesystem_config.h>
#include <utils/Log.h>
#include <utils/Singleton.h>

namespace android {
@@ -570,11 +571,15 @@ void MediaCodec::PostReplyWithError(const sp<AReplyToken> &replyID, int32_t err)
    response->postReply(replyID);
}

static CodecBase *CreateCCodec() {
    return StagefrightPluginLoader::GetCCodecInstance()->createCodec();
}

//static
sp<CodecBase> MediaCodec::GetCodecBase(const AString &name) {
    static bool ccodecEnabled = property_get_bool("debug.stagefright.ccodec", false);
    if (ccodecEnabled && name.startsWithIgnoreCase("c2.")) {
        return new CCodec;
        return CreateCCodec();
    } else if (name.startsWithIgnoreCase("omx.")) {
        // at this time only ACodec specifies a mime type.
        return new ACodec;
+25 −28
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <utils/Log.h>

#include "MediaCodecListOverrides.h"
#include "StagefrightPluginLoader.h"

#include <binder/IServiceManager.h>

@@ -29,7 +30,6 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/MediaDefs.h>
#include <media/stagefright/Codec2InfoBuilder.h>
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/OmxInfoBuilder.h>
@@ -78,14 +78,25 @@ bool isProfilingNeeded() {
}

OmxInfoBuilder sOmxInfoBuilder;
Codec2InfoBuilder sCodec2InfoBuilder;

std::initializer_list<MediaCodecListBuilderBase *> GetBuilders() {
Mutex sCodec2InfoBuilderMutex;
std::unique_ptr<MediaCodecListBuilderBase> sCodec2InfoBuilder;

MediaCodecListBuilderBase *GetCodec2InfoBuilder() {
    Mutex::Autolock _l(sCodec2InfoBuilderMutex);
    if (!sCodec2InfoBuilder) {
        sCodec2InfoBuilder.reset(
                StagefrightPluginLoader::GetCCodecInstance()->createBuilder());
    }
    return sCodec2InfoBuilder.get();
}

std::vector<MediaCodecListBuilderBase *> GetBuilders() {
    std::vector<MediaCodecListBuilderBase *> builders {&sOmxInfoBuilder};
    if (property_get_bool("debug.stagefright.ccodec", false)) {
        return {&sOmxInfoBuilder, &sCodec2InfoBuilder};
    } else {
        return {&sOmxInfoBuilder};
        builders.push_back(GetCodec2InfoBuilder());
    }
    return builders;
}

}  // unnamed namespace
@@ -179,16 +190,22 @@ sp<IMediaCodecList> MediaCodecList::getInstance() {
    return sRemoteList;
}

MediaCodecList::MediaCodecList(std::initializer_list<MediaCodecListBuilderBase*> builders) {
MediaCodecList::MediaCodecList(std::vector<MediaCodecListBuilderBase*> builders) {
    mGlobalSettings = new AMessage();
    mCodecInfos.clear();
    MediaCodecListWriter writer(this);
    MediaCodecListWriter writer;
    for (MediaCodecListBuilderBase *builder : builders) {
        if (builder == nullptr) {
            ALOGD("ignored a null builder");
            continue;
        }
        mInitCheck = builder->buildMediaCodecList(&writer);
        if (mInitCheck != OK) {
            break;
        }
    }
    writer.writeGlobalSettings(mGlobalSettings);
    writer.writeCodecInfos(&mCodecInfos);
    std::stable_sort(
            mCodecInfos.begin(),
            mCodecInfos.end(),
@@ -210,23 +227,6 @@ status_t MediaCodecList::initCheck() const {
    return mInitCheck;
}

MediaCodecListWriter::MediaCodecListWriter(MediaCodecList* list) :
    mList(list) {
}

void MediaCodecListWriter::addGlobalSetting(
        const char* key, const char* value) {
    mList->mGlobalSettings->setString(key, value);
}

std::unique_ptr<MediaCodecInfoWriter>
        MediaCodecListWriter::addMediaCodecInfo() {
    sp<MediaCodecInfo> info = new MediaCodecInfo();
    mList->mCodecInfos.push_back(info);
    return std::unique_ptr<MediaCodecInfoWriter>(
            new MediaCodecInfoWriter(info.get()));
}

// legacy method for non-advanced codecs
ssize_t MediaCodecList::findCodecByType(
        const char *type, bool encoder, size_t startIndex) const {
@@ -344,7 +344,4 @@ void MediaCodecList::findMatchingCodecs(
    }
}

MediaCodecListBuilderBase::~MediaCodecListBuilderBase() {
}

}  // namespace android
Loading