ComponentStore.cpp revision c3d20aa9415c8f02e568f203560685eaf12c3e2d
1c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa/* 2c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Copyright (C) 2018 The Android Open Source Project 3c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * 4c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Licensed under the Apache License, Version 2.0 (the "License"); 5c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * you may not use this file except in compliance with the License. 6c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * You may obtain a copy of the License at 7c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * 8c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * http://www.apache.org/licenses/LICENSE-2.0 9c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * 10c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Unless required by applicable law or agreed to in writing, software 11c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * distributed under the License is distributed on an "AS IS" BASIS, 12c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * See the License for the specific language governing permissions and 14c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * limitations under the License. 15c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa */ 16c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 17c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa//#define LOG_NDEBUG 0 18c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#define LOG_TAG "Codec2-ComponentStore" 19c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <log/log.h> 20c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 21c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <codec2/hidl/1.0/ComponentStore.h> 22c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <codec2/hidl/1.0/InputSurface.h> 23c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <codec2/hidl/1.0/Component.h> 24c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <codec2/hidl/1.0/ConfigurableC2Intf.h> 25c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <codec2/hidl/1.0/types.h> 26c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 27c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <media/stagefright/bqhelper/WGraphicBufferProducer.h> 28c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <media/stagefright/bqhelper/GraphicBufferSource.h> 29c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 30c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <utils/Errors.h> 31c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 32c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace hardware { 33c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace google { 34c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace media { 35c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace c2 { 36c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace V1_0 { 37c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace utils { 38c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 39c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing namespace ::android; 40c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing ::android::GraphicBufferSource; 4189eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasausing namespace ::android::hardware::media::bufferpool::V1_0::implementation; 42c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 43c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace /* unnamed */ { 44c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 45c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasastruct StoreIntf : public ConfigurableC2Intf { 46c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa StoreIntf(const std::shared_ptr<C2ComponentStore>& store) : 47c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa ConfigurableC2Intf(store ? store->getName() : ""), 48c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mStore(store) { 49c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 50c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 51c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_status_t config( 52c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const std::vector<C2Param*> ¶ms, 53c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_blocking_t mayBlock, 54c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::vector<std::unique_ptr<C2SettingResult>> *const failures 55c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa ) override { 56c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // Assume all params are blocking 57c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // TODO: Filter for supported params 58c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (mayBlock == C2_DONT_BLOCK && params.size() != 0) { 59c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return C2_BLOCKING; 60c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 61c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return mStore->config_sm(params, failures); 62c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 63c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 64c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_status_t query( 65c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const std::vector<C2Param::Index> &indices, 66c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_blocking_t mayBlock, 67c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::vector<std::unique_ptr<C2Param>> *const params) const override { 68c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // Assume all params are blocking 69c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // TODO: Filter for supported params 70c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (mayBlock == C2_DONT_BLOCK && indices.size() != 0) { 71c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return C2_BLOCKING; 72c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 73c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return mStore->query_sm({}, indices, params); 74c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 75c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 76c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_status_t querySupportedParams( 77c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::vector<std::shared_ptr<C2ParamDescriptor>> *const params 78c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa ) const override { 79c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return mStore->querySupportedParams_nb(params); 80c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 81c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 82c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_status_t querySupportedValues( 83c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::vector<C2FieldSupportedValuesQuery> &fields, 84c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_blocking_t mayBlock) const override { 85c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // Assume all params are blocking 86c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // TODO: Filter for supported params 87c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (mayBlock == C2_DONT_BLOCK && fields.size() != 0) { 88c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return C2_BLOCKING; 89c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 90c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return mStore->querySupportedValues_sm(fields); 91c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 92c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 93c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasaprotected: 94c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::shared_ptr<C2ComponentStore> mStore; 95c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}; 96c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 97c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // unnamed namespace 98c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 99c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaComponentStore::ComponentStore(const std::shared_ptr<C2ComponentStore>& store) : 100c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa Configurable(new CachedConfigurable(std::make_unique<StoreIntf>(store))), 101c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mStore(store) { 102c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // Retrieve struct descriptors 103c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mParamReflector = mStore->getParamReflector(); 104c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 105c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // Retrieve supported parameters from store 106c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mInit = init(this); 107c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 108c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 109c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasac2_status_t ComponentStore::validateSupportedParams( 110c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const std::vector<std::shared_ptr<C2ParamDescriptor>>& params) { 111c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_status_t res = C2_OK; 112c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 113c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa for (const std::shared_ptr<C2ParamDescriptor> &desc : params) { 114c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (!desc) { 115c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // All descriptors should be valid 116c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa res = res ? res : C2_BAD_VALUE; 117c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa continue; 118c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 119c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa C2Param::CoreIndex coreIndex = desc->index().coreIndex(); 120c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::lock_guard<std::mutex> lock(mStructDescriptorsMutex); 121c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa auto it = mStructDescriptors.find(coreIndex); 122c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (it == mStructDescriptors.end()) { 123c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::shared_ptr<C2StructDescriptor> structDesc = 124c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mParamReflector->describe(coreIndex); 125c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (!structDesc) { 126c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // All supported params must be described 127c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa res = C2_BAD_INDEX; 128c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 129c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mStructDescriptors.insert({ coreIndex, structDesc }); 130c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 131c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 132c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return res; 133c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 134c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 135c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa// Methods from ::android::hardware::media::c2::V1_0::IComponentStore 136c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<void> ComponentStore::createComponent( 137c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const hidl_string& name, 138c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const sp<IComponentListener>& listener, 13989eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa const sp<IClientManager>& pool, 140c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa createComponent_cb _hidl_cb) { 141c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 142c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa sp<Component> component; 143c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::shared_ptr<C2Component> c2component; 144c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa Status status = static_cast<Status>( 145c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mStore->createComponent(name, &c2component)); 146c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 147c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (status == Status::OK) { 14889eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa component = new Component(c2component, listener, this, pool); 149c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (!component) { 150c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa status = Status::CORRUPTED; 15189eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa } else if (component->status() != C2_OK) { 15289eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa status = static_cast<Status>(component->status()); 153c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } else { 15489eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa component->initListener(component); 15589eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa if (component->status() != C2_OK) { 15689eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa status = static_cast<Status>(component->status()); 1570f04c4d93761015d0a138aff8a468b1583d684e4Pawin Vongmasa } else { 15889eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa std::lock_guard<std::mutex> lock(mComponentRosterMutex); 159c3d20aa9415c8f02e568f203560685eaf12c3e2dPawin Vongmasa component->setLocalId( 160c3d20aa9415c8f02e568f203560685eaf12c3e2dPawin Vongmasa mComponentRoster.emplace(component, c2component) 161c3d20aa9415c8f02e568f203560685eaf12c3e2dPawin Vongmasa .first); 1620f04c4d93761015d0a138aff8a468b1583d684e4Pawin Vongmasa } 163c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 164c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 165c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa _hidl_cb(status, component); 166c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return Void(); 167c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 168c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 169c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<void> ComponentStore::createInterface( 170c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const hidl_string& name, 171c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa createInterface_cb _hidl_cb) { 172c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::shared_ptr<C2ComponentInterface> c2interface; 173c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa c2_status_t res = mStore->createInterface(name, &c2interface); 174c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa sp<IComponentInterface> interface; 175c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (res == C2_OK) { 176c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa interface = new ComponentInterface(c2interface, this); 177c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 178c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa _hidl_cb((Status)res, interface); 179c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return Void(); 180c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 181c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 182c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<void> ComponentStore::listComponents(listComponents_cb _hidl_cb) { 183c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::vector<std::shared_ptr<const C2Component::Traits>> c2traits = 184c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mStore->listComponents(); 185c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa hidl_vec<IComponentStore::ComponentTraits> traits(c2traits.size()); 186c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa size_t ix = 0; 187c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa for (const std::shared_ptr<const C2Component::Traits> &c2trait : c2traits) { 188c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (c2trait) { 189c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa objcpy(&traits[ix++], *c2trait); 190c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 191c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 192c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa traits.resize(ix); 193c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa _hidl_cb(traits); 194c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return Void(); 195c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 196c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 197c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<sp<IInputSurface>> ComponentStore::createInputSurface() { 198c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa sp<GraphicBufferSource> source = new GraphicBufferSource(); 199c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (source->initCheck() != OK) { 200c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return nullptr; 201c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 202c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa typedef ::android::hardware::graphics::bufferqueue::V1_0:: 203c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa IGraphicBufferProducer HGBP; 204c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa typedef ::android::TWGraphicBufferProducer<HGBP> B2HGBP; 205c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return new InputSurface( 206c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa this, 207c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa new B2HGBP(source->getIGraphicBufferProducer()), 208c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa source); 209c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 210c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 211c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<void> ComponentStore::getStructDescriptors( 212c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const hidl_vec<uint32_t>& indices, 213c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa getStructDescriptors_cb _hidl_cb) { 214c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa hidl_vec<StructDescriptor> descriptors(indices.size()); 215c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa size_t dstIx = 0; 216e1769037aea395c60e88cb882f2fd14d88036d24Lajos Molnar Status res = Status::OK; 217c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa for (size_t srcIx = 0; srcIx < indices.size(); ++srcIx) { 218c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::lock_guard<std::mutex> lock(mStructDescriptorsMutex); 219c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const auto item = mStructDescriptors.find( 220c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa C2Param::CoreIndex(indices[srcIx]).coreIndex()); 221c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (item == mStructDescriptors.end()) { 222c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa res = Status::NOT_FOUND; 223c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } else if (item->second) { 224c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa objcpy(&descriptors[dstIx++], *item->second); 225c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } else { 226c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa res = Status::NO_MEMORY; 227c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 228c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 229c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa descriptors.resize(dstIx); 230c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa _hidl_cb(res, descriptors); 231c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return Void(); 232c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 233c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 234c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<sp<IClientManager>> ComponentStore::getPoolClientManager() { 23589eabf0d6b92d93eced043ce4abd2ac527c0374aPawin Vongmasa return ClientManager::getInstance(); 236c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 237c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 238c470281b28a572f8e3331341a3855344608d0f72Pawin VongmasaReturn<Status> ComponentStore::copyBuffer(const Buffer& src, const Buffer& dst) { 239c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa // TODO implement 240c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa (void)src; 241c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa (void)dst; 242c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return Status::OMITTED; 243c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 244c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 245c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasavoid ComponentStore::reportComponentDeath( 246c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa const Component::LocalId& componentLocalId) { 247c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::lock_guard<std::mutex> lock(mComponentRosterMutex); 248c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa mComponentRoster.erase(componentLocalId); 249c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 250c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 251c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasastd::shared_ptr<C2Component> ComponentStore::findC2Component( 252c3d20aa9415c8f02e568f203560685eaf12c3e2dPawin Vongmasa const wp<IComponent>& component) const { 253c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa std::lock_guard<std::mutex> lock(mComponentRosterMutex); 254c3d20aa9415c8f02e568f203560685eaf12c3e2dPawin Vongmasa Component::LocalId it = mComponentRoster.find(component); 255c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa if (it == mComponentRoster.end()) { 256c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return std::shared_ptr<C2Component>(); 257c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa } 258c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa return it->second.lock(); 259c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} 260c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa 261c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // namespace utils 262c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // namespace V1_0 263c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // namespace c2 264c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // namespace media 265c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // namespace google 266c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa} // namespace hardware 267