1 /* 2 * Copyright 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 //#define LOG_NDEBUG 0 18 #define LOG_TAG "Codec2-ComponentInterface" 19 #include <android-base/logging.h> 20 21 #include <codec2/hidl/1.0/Component.h> 22 #include <codec2/hidl/1.0/ComponentInterface.h> 23 #include <codec2/hidl/1.0/ComponentStore.h> 24 25 #include <hidl/HidlBinderSupport.h> 26 #include <utils/Timers.h> 27 28 #include <C2BqBufferPriv.h> 29 #include <C2Debug.h> 30 #include <C2PlatformSupport.h> 31 32 #include <chrono> 33 #include <thread> 34 35 namespace android { 36 namespace hardware { 37 namespace media { 38 namespace c2 { 39 namespace V1_0 { 40 namespace utils { 41 42 using namespace ::android; 43 44 namespace /* unnamed */ { 45 46 // Implementation of ConfigurableC2Intf based on C2ComponentInterface 47 struct CompIntf : public ConfigurableC2Intf { 48 CompIntf(const std::shared_ptr<C2ComponentInterface>& intf) : 49 ConfigurableC2Intf{intf->getName(), intf->getId()}, 50 mIntf{intf} { 51 } 52 53 virtual c2_status_t config( 54 const std::vector<C2Param*>& params, 55 c2_blocking_t mayBlock, 56 std::vector<std::unique_ptr<C2SettingResult>>* const failures 57 ) override { 58 return mIntf->config_vb(params, mayBlock, failures); 59 } 60 61 virtual c2_status_t query( 62 const std::vector<C2Param::Index>& indices, 63 c2_blocking_t mayBlock, 64 std::vector<std::unique_ptr<C2Param>>* const params 65 ) const override { 66 return mIntf->query_vb({}, indices, mayBlock, params); 67 } 68 69 virtual c2_status_t querySupportedParams( 70 std::vector<std::shared_ptr<C2ParamDescriptor>>* const params 71 ) const override { 72 return mIntf->querySupportedParams_nb(params); 73 } 74 75 virtual c2_status_t querySupportedValues( 76 std::vector<C2FieldSupportedValuesQuery>& fields, 77 c2_blocking_t mayBlock) const override { 78 return mIntf->querySupportedValues_vb(fields, mayBlock); 79 } 80 81 protected: 82 std::shared_ptr<C2ComponentInterface> mIntf; 83 }; 84 85 } // unnamed namespace 86 87 // ComponentInterface 88 ComponentInterface::ComponentInterface( 89 const std::shared_ptr<C2ComponentInterface>& intf, 90 ComponentStore* store) 91 : mInterface{intf}, 92 mConfigurable{new CachedConfigurable(std::make_unique<CompIntf>(intf))} { 93 mInit = mConfigurable->init(store); 94 } 95 96 c2_status_t ComponentInterface::status() const { 97 return mInit; 98 } 99 100 Return<sp<IConfigurable>> ComponentInterface::getConfigurable() { 101 return mConfigurable; 102 } 103 104 } // namespace utils 105 } // namespace V1_0 106 } // namespace c2 107 } // namespace media 108 } // namespace hardware 109 } // namespace android 110 111