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

Commit 9468f951 authored by Wonsik Kim's avatar Wonsik Kim Committed by Android (Google) Code Review
Browse files

Merge "stagefright: link CCodec directly with libstagefright"

parents 6aa610c0 155d5cbd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ cc_library {
    name: "libstagefright_bufferpool@2.0.1",
    defaults: ["libstagefright_bufferpool@2.0-default"],
    vendor_available: true,
    // TODO: b/147147992
    double_loadable: true,
    cflags: [
        "-DBUFFERPOOL_CLONE_HANDLES",
    ],
@@ -40,6 +42,8 @@ cc_library {
    name: "libstagefright_bufferpool@2.0",
    defaults: ["libstagefright_bufferpool@2.0-default"],
    vendor_available: true,
    // TODO: b/147147992
    double_loadable: true,
    vndk: {
        enabled: true,
    },
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ cc_library_shared {
    vndk: {
        enabled: true,
    },
    double_loadable: true,

    srcs: ["C2.cpp"],

+8 −1
Original line number Diff line number Diff line
cc_library_shared {
    name: "libsfplugin_ccodec",

    export_include_dirs: ["include"],

    srcs: [
        "C2OMXNode.cpp",
        "CCodec.cpp",
@@ -11,7 +13,6 @@ cc_library_shared {
        "Codec2InfoBuilder.cpp",
        "PipelineWatcher.cpp",
        "ReflectedParamUpdater.cpp",
        "SkipCutBuffer.cpp",
    ],

    cflags: [
@@ -32,6 +33,7 @@ cc_library_shared {
        "android.hardware.media.omx@1.0",
        "libbase",
        "libbinder",
        "libcodec2",
        "libcodec2_client",
        "libcodec2_vndk",
        "libcutils",
@@ -51,6 +53,11 @@ cc_library_shared {
        "libutils",
    ],

    export_shared_lib_headers: [
        "libcodec2",
        "libcodec2_client",
    ],

    sanitize: {
        cfi: true,
        misc_undefined: [
+35 −23
Original line number Diff line number Diff line
@@ -40,13 +40,14 @@
#include <media/openmax/OMX_IndexExt.h>
#include <media/stagefright/omx/1.0/WGraphicBufferSource.h>
#include <media/stagefright/omx/OmxGraphicBufferSource.h>
#include <media/stagefright/CCodec.h>
#include <media/stagefright/BufferProducerWrapper.h>
#include <media/stagefright/MediaCodecConstants.h>
#include <media/stagefright/PersistentSurface.h>

#include "C2OMXNode.h"
#include "CCodec.h"
#include "CCodecBufferChannel.h"
#include "CCodecConfig.h"
#include "InputSurfaceWrapper.h"

extern "C" android::PersistentSurface *CreateInputSurface();
@@ -59,6 +60,7 @@ using android::base::StringPrintf;
using ::android::hardware::media::c2::V1_0::IInputSurface;

typedef hardware::media::omx::V1_0::IGraphicBufferSource HGraphicBufferSource;
typedef CCodecConfig Config;

namespace {

@@ -571,7 +573,8 @@ private:
// CCodec

CCodec::CCodec()
    : mChannel(new CCodecBufferChannel(std::make_shared<CCodecCallbackImpl>(this))) {
    : mChannel(new CCodecBufferChannel(std::make_shared<CCodecCallbackImpl>(this))),
      mConfig(new CCodecConfig) {
}

CCodec::~CCodec() {
@@ -662,7 +665,8 @@ void CCodec::allocate(const sp<MediaCodecInfo> &codecInfo) {
    }

    // initialize config here in case setParameters is called prior to configure
    Mutexed<Config>::Locked config(mConfig);
    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
    const std::unique_ptr<Config> &config = *configLocked;
    status_t err = config->initialize(mClient, comp);
    if (err != OK) {
        ALOGW("Failed to initialize configuration support");
@@ -736,7 +740,8 @@ void CCodec::configure(const sp<AMessage> &msg) {
            setSurface(surface);
        }

        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        config->mUsingSurface = surface != nullptr;

        // Enforce required parameters
@@ -1052,7 +1057,8 @@ void CCodec::configure(const sp<AMessage> &msg) {
        return;
    }

    Mutexed<Config>::Locked config(mConfig);
    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
    const std::unique_ptr<Config> &config = *configLocked;

    mCallback->onComponentConfigured(config->mInputFormat, config->mOutputFormat);
}
@@ -1126,7 +1132,8 @@ void CCodec::createInputSurface() {
    sp<AMessage> outputFormat;
    uint64_t usage = 0;
    {
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        inputFormat = config->mInputFormat;
        outputFormat = config->mOutputFormat;
        usage = config->mISConfig ? config->mISConfig->mUsage : 0;
@@ -1170,7 +1177,8 @@ void CCodec::createInputSurface() {
}

status_t CCodec::setupInputSurface(const std::shared_ptr<InputSurfaceWrapper> &surface) {
    Mutexed<Config>::Locked config(mConfig);
    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
    const std::unique_ptr<Config> &config = *configLocked;
    config->mUsingSurface = true;

    // we are now using surface - apply default color aspects to input format - as well as
@@ -1215,7 +1223,8 @@ void CCodec::setInputSurface(const sp<PersistentSurface> &surface) {
    sp<AMessage> outputFormat;
    uint64_t usage = 0;
    {
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        inputFormat = config->mInputFormat;
        outputFormat = config->mOutputFormat;
        usage = config->mISConfig ? config->mISConfig->mUsage : 0;
@@ -1291,7 +1300,8 @@ void CCodec::start() {
    sp<AMessage> outputFormat;
    status_t err2 = OK;
    {
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        inputFormat = config->mInputFormat;
        outputFormat = config->mOutputFormat;
        if (config->mInputSurface) {
@@ -1377,7 +1387,8 @@ void CCodec::stop() {
    }

    {
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        if (config->mInputSurface) {
            config->mInputSurface->disconnect();
            config->mInputSurface = nullptr;
@@ -1425,7 +1436,8 @@ void CCodec::initiateRelease(bool sendCallback /* = true */) {
    }

    if (clearInputSurfaceIfNeeded) {
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        if (config->mInputSurface) {
            config->mInputSurface->disconnect();
            config->mInputSurface = nullptr;
@@ -1583,7 +1595,8 @@ void CCodec::signalSetParameters(const sp<AMessage> &msg) {
        params->removeEntryAt(params->findEntryByName(KEY_BIT_RATE));
    }

    Mutexed<Config>::Locked config(mConfig);
    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
    const std::unique_ptr<Config> &config = *configLocked;

    /**
     * Handle input surface parameters
@@ -1642,7 +1655,8 @@ void CCodec::signalRequestIDRFrame() {
        comp = state->comp;
    }
    ALOGV("request IDR");
    Mutexed<Config>::Locked config(mConfig);
    Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
    const std::unique_ptr<Config> &config = *configLocked;
    std::vector<std::unique_ptr<C2Param>> params;
    params.push_back(
            std::make_unique<C2StreamRequestSyncFrameTuning::output>(0u, true));
@@ -1661,7 +1675,8 @@ void CCodec::onInputBufferDone(uint64_t frameIndex, size_t arrayIndex) {
    mChannel->onInputBufferDone(frameIndex, arrayIndex);
    if (arrayIndex == 0) {
        // We always put no more than one buffer per work, if we use an input surface.
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
        const std::unique_ptr<Config> &config = *configLocked;
        if (config->mInputSurface) {
            config->mInputSurface->onInputBufferDone(frameIndex);
        }
@@ -1738,7 +1753,8 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) {
            }

            // handle configuration changes in work done
            Mutexed<Config>::Locked config(mConfig);
            Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
            const std::unique_ptr<Config> &config = *configLocked;
            bool changed = false;
            Config::Watcher<C2StreamInitDataInfo::output> initData =
                config->watch<C2StreamInitDataInfo::output>();
@@ -1867,14 +1883,8 @@ void CCodec::initiateReleaseIfStuck() {
    mCallback->onError(UNKNOWN_ERROR, ACTION_CODE_FATAL);
}

}  // namespace android

extern "C" android::CodecBase *CreateCodec() {
    return new android::CCodec;
}

// Create Codec 2.0 input surface
extern "C" android::PersistentSurface *CreateInputSurface() {
// static
PersistentSurface *CCodec::CreateInputSurface() {
    using namespace android;
    using ::android::hardware::media::omx::V1_0::implementation::TWGraphicBufferSource;
    // Attempt to create a Codec2's input surface.
@@ -1901,3 +1911,5 @@ extern "C" android::PersistentSurface *CreateInputSurface() {
            inputSurface->getHalInterface()));
}

}  // namespace android
+1 −1
Original line number Diff line number Diff line
@@ -41,12 +41,12 @@
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/MediaCodec.h>
#include <media/stagefright/MediaCodecConstants.h>
#include <media/stagefright/SkipCutBuffer.h>
#include <media/MediaCodecBuffer.h>
#include <system/window.h>

#include "CCodecBufferChannel.h"
#include "Codec2Buffer.h"
#include "SkipCutBuffer.h"

namespace android {

Loading