Loading media/bufferpool/2.0/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -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", ], Loading @@ -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, }, Loading media/codec2/core/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ cc_library_shared { vndk: { enabled: true, }, double_loadable: true, srcs: ["C2.cpp"], Loading media/codec2/sfplugin/Android.bp +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", Loading @@ -11,7 +13,6 @@ cc_library_shared { "Codec2InfoBuilder.cpp", "PipelineWatcher.cpp", "ReflectedParamUpdater.cpp", "SkipCutBuffer.cpp", ], cflags: [ Loading @@ -32,6 +33,7 @@ cc_library_shared { "android.hardware.media.omx@1.0", "libbase", "libbinder", "libcodec2", "libcodec2_client", "libcodec2_vndk", "libcutils", Loading @@ -51,6 +53,11 @@ cc_library_shared { "libutils", ], export_shared_lib_headers: [ "libcodec2", "libcodec2_client", ], sanitize: { cfi: true, misc_undefined: [ Loading media/codec2/sfplugin/CCodec.cpp +35 −23 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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 { Loading Loading @@ -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() { Loading Loading @@ -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"); Loading Loading @@ -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 Loading Loading @@ -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); } Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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)); Loading @@ -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); } Loading Loading @@ -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>(); Loading Loading @@ -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. Loading @@ -1901,3 +1911,5 @@ extern "C" android::PersistentSurface *CreateInputSurface() { inputSurface->getHalInterface())); } } // namespace android media/codec2/sfplugin/CCodecBufferChannel.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
media/bufferpool/2.0/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -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", ], Loading @@ -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, }, Loading
media/codec2/core/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ cc_library_shared { vndk: { enabled: true, }, double_loadable: true, srcs: ["C2.cpp"], Loading
media/codec2/sfplugin/Android.bp +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", Loading @@ -11,7 +13,6 @@ cc_library_shared { "Codec2InfoBuilder.cpp", "PipelineWatcher.cpp", "ReflectedParamUpdater.cpp", "SkipCutBuffer.cpp", ], cflags: [ Loading @@ -32,6 +33,7 @@ cc_library_shared { "android.hardware.media.omx@1.0", "libbase", "libbinder", "libcodec2", "libcodec2_client", "libcodec2_vndk", "libcutils", Loading @@ -51,6 +53,11 @@ cc_library_shared { "libutils", ], export_shared_lib_headers: [ "libcodec2", "libcodec2_client", ], sanitize: { cfi: true, misc_undefined: [ Loading
media/codec2/sfplugin/CCodec.cpp +35 −23 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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 { Loading Loading @@ -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() { Loading Loading @@ -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"); Loading Loading @@ -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 Loading Loading @@ -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); } Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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)); Loading @@ -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); } Loading Loading @@ -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>(); Loading Loading @@ -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. Loading @@ -1901,3 +1911,5 @@ extern "C" android::PersistentSurface *CreateInputSurface() { inputSurface->getHalInterface())); } } // namespace android
media/codec2/sfplugin/CCodecBufferChannel.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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