Loading media/codec2/hidl/services/vendor.cpp +59 −16 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ #include <hidl/HidlTransportSupport.h> #include <minijail.h> #include <util/C2InterfaceHelper.h> #include <C2Component.h> #include <C2Config.h> // This is the absolute on-device path of the prebuild_etc module // "android.hardware.media.c2@1.1-default-seccomp_policy" in Android.bp. Loading @@ -37,11 +39,14 @@ static constexpr char kExtSeccompPolicyPath[] = "/vendor/etc/seccomp_policy/" "android.hardware.media.c2@1.1-extended-seccomp-policy"; class DummyC2Store : public C2ComponentStore { class StoreImpl : public C2ComponentStore { public: DummyC2Store() = default; StoreImpl() : mReflectorHelper(std::make_shared<C2ReflectorHelper>()), mInterface(mReflectorHelper) { } virtual ~DummyC2Store() override = default; virtual ~StoreImpl() override = default; virtual C2String getName() const override { return "default"; Loading Loading @@ -71,31 +76,69 @@ public: } virtual c2_status_t query_sm( const std::vector<C2Param*>& /* stackParams */, const std::vector<C2Param::Index>& /* heapParamIndices */, std::vector<std::unique_ptr<C2Param>>* const /* heapParams */) const override { return C2_OMITTED; const std::vector<C2Param*>& stackParams, const std::vector<C2Param::Index>& heapParamIndices, std::vector<std::unique_ptr<C2Param>>* const heapParams) const override { return mInterface.query(stackParams, heapParamIndices, C2_MAY_BLOCK, heapParams); } virtual c2_status_t config_sm( const std::vector<C2Param*>& /* params */, std::vector<std::unique_ptr<C2SettingResult>>* const /* failures */) override { return C2_OMITTED; const std::vector<C2Param*>& params, std::vector<std::unique_ptr<C2SettingResult>>* const failures) override { return mInterface.config(params, C2_MAY_BLOCK, failures); } virtual std::shared_ptr<C2ParamReflector> getParamReflector() const override { return nullptr; return mReflectorHelper; } virtual c2_status_t querySupportedParams_nb( std::vector<std::shared_ptr<C2ParamDescriptor>>* const /* params */) const override { return C2_OMITTED; std::vector<std::shared_ptr<C2ParamDescriptor>>* const params) const override { return mInterface.querySupportedParams(params); } virtual c2_status_t querySupportedValues_sm( std::vector<C2FieldSupportedValuesQuery>& /* fields */) const override { return C2_OMITTED; std::vector<C2FieldSupportedValuesQuery>& fields) const override { return mInterface.querySupportedValues(fields, C2_MAY_BLOCK); } private: class Interface : public C2InterfaceHelper { public: Interface(const std::shared_ptr<C2ReflectorHelper> &helper) : C2InterfaceHelper(helper) { setDerivedInstance(this); addParameter( DefineParam(mIonUsageInfo, "ion-usage") .withDefault(new C2StoreIonUsageInfo()) .withFields({ C2F(mIonUsageInfo, usage).flags( {C2MemoryUsage::CPU_READ | C2MemoryUsage::CPU_WRITE}), C2F(mIonUsageInfo, capacity).inRange(0, UINT32_MAX, 1024), C2F(mIonUsageInfo, heapMask).any(), C2F(mIonUsageInfo, allocFlags).flags({}), C2F(mIonUsageInfo, minAlignment).equalTo(0) }) .withSetter(SetIonUsage) .build()); } virtual ~Interface() = default; private: static C2R SetIonUsage(bool /* mayBlock */, C2P<C2StoreIonUsageInfo> &me) { // Vendor's TODO: put appropriate mapping logic me.set().heapMask = ~0; me.set().allocFlags = 0; me.set().minAlignment = 0; return C2R::Ok(); } std::shared_ptr<C2StoreIonUsageInfo> mIonUsageInfo; }; std::shared_ptr<C2ReflectorHelper> mReflectorHelper; Interface mInterface; }; int main(int /* argc */, char** /* argv */) { Loading Loading @@ -124,7 +167,7 @@ int main(int /* argc */, char** /* argv */) { // /* implementation of C2ComponentStore */); LOG(DEBUG) << "Instantiating Codec2's IComponentStore service..."; store = new utils::ComponentStore( std::make_shared<DummyC2Store>()); std::make_shared<StoreImpl>()); if (store == nullptr) { LOG(ERROR) << "Cannot create Codec2's IComponentStore service."; Loading Loading
media/codec2/hidl/services/vendor.cpp +59 −16 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ #include <hidl/HidlTransportSupport.h> #include <minijail.h> #include <util/C2InterfaceHelper.h> #include <C2Component.h> #include <C2Config.h> // This is the absolute on-device path of the prebuild_etc module // "android.hardware.media.c2@1.1-default-seccomp_policy" in Android.bp. Loading @@ -37,11 +39,14 @@ static constexpr char kExtSeccompPolicyPath[] = "/vendor/etc/seccomp_policy/" "android.hardware.media.c2@1.1-extended-seccomp-policy"; class DummyC2Store : public C2ComponentStore { class StoreImpl : public C2ComponentStore { public: DummyC2Store() = default; StoreImpl() : mReflectorHelper(std::make_shared<C2ReflectorHelper>()), mInterface(mReflectorHelper) { } virtual ~DummyC2Store() override = default; virtual ~StoreImpl() override = default; virtual C2String getName() const override { return "default"; Loading Loading @@ -71,31 +76,69 @@ public: } virtual c2_status_t query_sm( const std::vector<C2Param*>& /* stackParams */, const std::vector<C2Param::Index>& /* heapParamIndices */, std::vector<std::unique_ptr<C2Param>>* const /* heapParams */) const override { return C2_OMITTED; const std::vector<C2Param*>& stackParams, const std::vector<C2Param::Index>& heapParamIndices, std::vector<std::unique_ptr<C2Param>>* const heapParams) const override { return mInterface.query(stackParams, heapParamIndices, C2_MAY_BLOCK, heapParams); } virtual c2_status_t config_sm( const std::vector<C2Param*>& /* params */, std::vector<std::unique_ptr<C2SettingResult>>* const /* failures */) override { return C2_OMITTED; const std::vector<C2Param*>& params, std::vector<std::unique_ptr<C2SettingResult>>* const failures) override { return mInterface.config(params, C2_MAY_BLOCK, failures); } virtual std::shared_ptr<C2ParamReflector> getParamReflector() const override { return nullptr; return mReflectorHelper; } virtual c2_status_t querySupportedParams_nb( std::vector<std::shared_ptr<C2ParamDescriptor>>* const /* params */) const override { return C2_OMITTED; std::vector<std::shared_ptr<C2ParamDescriptor>>* const params) const override { return mInterface.querySupportedParams(params); } virtual c2_status_t querySupportedValues_sm( std::vector<C2FieldSupportedValuesQuery>& /* fields */) const override { return C2_OMITTED; std::vector<C2FieldSupportedValuesQuery>& fields) const override { return mInterface.querySupportedValues(fields, C2_MAY_BLOCK); } private: class Interface : public C2InterfaceHelper { public: Interface(const std::shared_ptr<C2ReflectorHelper> &helper) : C2InterfaceHelper(helper) { setDerivedInstance(this); addParameter( DefineParam(mIonUsageInfo, "ion-usage") .withDefault(new C2StoreIonUsageInfo()) .withFields({ C2F(mIonUsageInfo, usage).flags( {C2MemoryUsage::CPU_READ | C2MemoryUsage::CPU_WRITE}), C2F(mIonUsageInfo, capacity).inRange(0, UINT32_MAX, 1024), C2F(mIonUsageInfo, heapMask).any(), C2F(mIonUsageInfo, allocFlags).flags({}), C2F(mIonUsageInfo, minAlignment).equalTo(0) }) .withSetter(SetIonUsage) .build()); } virtual ~Interface() = default; private: static C2R SetIonUsage(bool /* mayBlock */, C2P<C2StoreIonUsageInfo> &me) { // Vendor's TODO: put appropriate mapping logic me.set().heapMask = ~0; me.set().allocFlags = 0; me.set().minAlignment = 0; return C2R::Ok(); } std::shared_ptr<C2StoreIonUsageInfo> mIonUsageInfo; }; std::shared_ptr<C2ReflectorHelper> mReflectorHelper; Interface mInterface; }; int main(int /* argc */, char** /* argv */) { Loading Loading @@ -124,7 +167,7 @@ int main(int /* argc */, char** /* argv */) { // /* implementation of C2ComponentStore */); LOG(DEBUG) << "Instantiating Codec2's IComponentStore service..."; store = new utils::ComponentStore( std::make_shared<DummyC2Store>()); std::make_shared<StoreImpl>()); if (store == nullptr) { LOG(ERROR) << "Cannot create Codec2's IComponentStore service."; Loading