diff options
Diffstat (limited to 'media/codecs/base/include/SimpleC2Interface.h')
| -rw-r--r-- | media/codecs/base/include/SimpleC2Interface.h | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/media/codecs/base/include/SimpleC2Interface.h b/media/codecs/base/include/SimpleC2Interface.h deleted file mode 100644 index 2051d3d..0000000 --- a/media/codecs/base/include/SimpleC2Interface.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_SIMPLE_C2_INTERFACE_H_ -#define ANDROID_SIMPLE_C2_INTERFACE_H_ - -#include <C2Component.h> -#include <C2Config.h> -#include <util/C2InterfaceHelper.h> - -namespace android { - -/** - * Wrap a common interface object (such as Codec2Client::Interface, or C2InterfaceHelper into - * a C2ComponentInterface. - * - * \param T common interface type - */ -template <typename T> -class SimpleC2Interface : public C2ComponentInterface { -public: - SimpleC2Interface(const char *name, c2_node_id_t id, const std::shared_ptr<T> &impl) - : mName(name), - mId(id), - mImpl(impl) { - } - - ~SimpleC2Interface() override = default; - - // From C2ComponentInterface - C2String getName() const override { return mName; } - c2_node_id_t getId() const override { return mId; } - c2_status_t query_vb( - const std::vector<C2Param*> &stackParams, - const std::vector<C2Param::Index> &heapParamIndices, - c2_blocking_t mayBlock, - std::vector<std::unique_ptr<C2Param>>* const heapParams) const override { - return mImpl->query(stackParams, heapParamIndices, mayBlock, heapParams); - } - c2_status_t config_vb( - const std::vector<C2Param*> ¶ms, - c2_blocking_t mayBlock, - std::vector<std::unique_ptr<C2SettingResult>>* const failures) override { - return mImpl->config(params, mayBlock, failures); - } - c2_status_t createTunnel_sm(c2_node_id_t) override { return C2_OMITTED; } - c2_status_t releaseTunnel_sm(c2_node_id_t) override { return C2_OMITTED; } - c2_status_t querySupportedParams_nb( - std::vector<std::shared_ptr<C2ParamDescriptor>> * const params) const override { - return mImpl->querySupportedParams(params); - } - c2_status_t querySupportedValues_vb( - std::vector<C2FieldSupportedValuesQuery> &fields, - c2_blocking_t mayBlock) const override { - return mImpl->querySupportedValues(fields, mayBlock); - } - -private: - C2String mName; - const c2_node_id_t mId; - const std::shared_ptr<T> mImpl; -}; - -/** - * Utility classes for common interfaces. - */ -template<> -class SimpleC2Interface<void> { -public: - /** - * Base Codec 2.0 parameters required for all components. - */ - struct BaseParams : C2InterfaceHelper { - explicit BaseParams( - const std::shared_ptr<C2ReflectorHelper> &helper, - C2String name, - C2Component::kind_t kind, - C2Component::domain_t domain, - C2String mediaType, - std::vector<C2String> aliases = std::vector<C2String>()); - - /// Marks that this component has no input latency. Otherwise, component must - /// add support for C2PortRequestedDelayTuning::input and C2PortActualDelayTuning::input. - void noInputLatency(); - - /// Marks that this component has no output latency. Otherwise, component must - /// add support for C2PortRequestedDelayTuning::output and C2PortActualDelayTuning::output. - void noOutputLatency(); - - /// Marks that this component has no pipeline latency. Otherwise, component must - /// add support for C2RequestedPipelineDelayTuning and C2ActualPipelineDelayTuning. - void noPipelineLatency(); - - /// Marks that this component has no need for private buffers. Otherwise, component must - /// add support for C2MaxPrivateBufferCountTuning, C2PrivateAllocatorsTuning and - /// C2PrivateBlockPoolsTuning. - void noPrivateBuffers(); - - /// Marks that this component holds no references to input buffers. Otherwise, component - /// must add support for C2StreamMaxReferenceAgeTuning::input and - /// C2StreamMaxReferenceCountTuning::input. - void noInputReferences(); - - /// Marks that this component holds no references to output buffers. Otherwise, component - /// must add support for C2StreamMaxReferenceAgeTuning::output and - /// C2StreamMaxReferenceCountTuning::output. - void noOutputReferences(); - - /// Marks that this component does not stretch time. Otherwise, component - /// must add support for C2ComponentTimeStretchTuning. - void noTimeStretch(); - - std::shared_ptr<C2ApiLevelSetting> mApiLevel; - std::shared_ptr<C2ApiFeaturesSetting> mApiFeatures; - - std::shared_ptr<C2PlatformLevelSetting> mPlatformLevel; - std::shared_ptr<C2PlatformFeaturesSetting> mPlatformFeatures; - - std::shared_ptr<C2ComponentNameSetting> mName; - std::shared_ptr<C2ComponentAliasesSetting> mAliases; - std::shared_ptr<C2ComponentKindSetting> mKind; - std::shared_ptr<C2ComponentDomainSetting> mDomain; - std::shared_ptr<C2ComponentAttributesSetting> mAttrib; - std::shared_ptr<C2ComponentTimeStretchTuning> mTimeStretch; - - std::shared_ptr<C2PortMediaTypeSetting::input> mInputMediaType; - std::shared_ptr<C2PortMediaTypeSetting::output> mOutputMediaType; - std::shared_ptr<C2StreamBufferTypeSetting::input> mInputFormat; - std::shared_ptr<C2StreamBufferTypeSetting::output> mOutputFormat; - - std::shared_ptr<C2PortRequestedDelayTuning::input> mRequestedInputDelay; - std::shared_ptr<C2PortRequestedDelayTuning::output> mRequestedOutputDelay; - std::shared_ptr<C2RequestedPipelineDelayTuning> mRequestedPipelineDelay; - - std::shared_ptr<C2PortActualDelayTuning::input> mActualInputDelay; - std::shared_ptr<C2PortActualDelayTuning::output> mActualOutputDelay; - std::shared_ptr<C2ActualPipelineDelayTuning> mActualPipelineDelay; - - std::shared_ptr<C2StreamMaxReferenceAgeTuning::input> mMaxInputReferenceAge; - std::shared_ptr<C2StreamMaxReferenceCountTuning::input> mMaxInputReferenceCount; - std::shared_ptr<C2StreamMaxReferenceAgeTuning::output> mMaxOutputReferenceAge; - std::shared_ptr<C2StreamMaxReferenceCountTuning::output> mMaxOutputReferenceCount; - std::shared_ptr<C2MaxPrivateBufferCountTuning> mMaxPrivateBufferCount; - - std::shared_ptr<C2PortStreamCountTuning::input> mInputStreamCount; - std::shared_ptr<C2PortStreamCountTuning::output> mOutputStreamCount; - - std::shared_ptr<C2SubscribedParamIndicesTuning> mSubscribedParamIndices; - std::shared_ptr<C2PortSuggestedBufferCountTuning::input> mSuggestedInputBufferCount; - std::shared_ptr<C2PortSuggestedBufferCountTuning::output> mSuggestedOutputBufferCount; - - std::shared_ptr<C2CurrentWorkTuning> mCurrentWorkOrdinal; - std::shared_ptr<C2LastWorkQueuedTuning::input> mLastInputQueuedWorkOrdinal; - std::shared_ptr<C2LastWorkQueuedTuning::output> mLastOutputQueuedWorkOrdinal; - - std::shared_ptr<C2PortAllocatorsTuning::input> mInputAllocators; - std::shared_ptr<C2PortAllocatorsTuning::output> mOutputAllocators; - std::shared_ptr<C2PrivateAllocatorsTuning> mPrivateAllocators; - std::shared_ptr<C2PortBlockPoolsTuning::output> mOutputPoolIds; - std::shared_ptr<C2PrivateBlockPoolsTuning> mPrivatePoolIds; - - std::shared_ptr<C2TrippedTuning> mTripped; - std::shared_ptr<C2OutOfMemoryTuning> mOutOfMemory; - - std::shared_ptr<C2PortConfigCounterTuning::input> mInputConfigCounter; - std::shared_ptr<C2PortConfigCounterTuning::output> mOutputConfigCounter; - std::shared_ptr<C2ConfigCounterTuning> mDirectConfigCounter; - }; -}; - -template<typename T> -using SimpleInterface = SimpleC2Interface<T>; - -template<typename T, typename ...Args> -std::shared_ptr<T> AllocSharedString(const Args(&... args), const char *str) { - size_t len = strlen(str) + 1; - std::shared_ptr<T> ret = T::AllocShared(len, args...); - strcpy(ret->m.value, str); - return ret; -} - -template<typename T, typename ...Args> -std::shared_ptr<T> AllocSharedString(const Args(&... args), const std::string &str) { - std::shared_ptr<T> ret = T::AllocShared(str.length() + 1, args...); - strcpy(ret->m.value, str.c_str()); - return ret; -} - -template <typename T> -struct Setter { - typedef typename std::remove_reference<T>::type type; - - static C2R NonStrictValueWithNoDeps( - bool mayBlock, C2InterfaceHelper::C2P<type> &me) { - (void)mayBlock; - return me.F(me.v.value).validatePossible(me.v.value); - } - - static C2R NonStrictValuesWithNoDeps( - bool mayBlock, C2InterfaceHelper::C2P<type> &me) { - (void)mayBlock; - C2R res = C2R::Ok(); - for (size_t ix = 0; ix < me.v.flexCount(); ++ix) { - res.plus(me.F(me.v.m.values[ix]).validatePossible(me.v.m.values[ix])); - } - return res; - } - - static C2R StrictValueWithNoDeps( - bool mayBlock, - const C2InterfaceHelper::C2P<type> &old, - C2InterfaceHelper::C2P<type> &me) { - (void)mayBlock; - if (!me.F(me.v.value).supportsNow(me.v.value)) { - me.set().value = old.v.value; - } - return me.F(me.v.value).validatePossible(me.v.value); - } -}; - -} // namespace android - -#endif // ANDROID_SIMPLE_C2_INTERFACE_H_ |
