1f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa/* 2f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * Copyright 2016, The Android Open Source Project 3f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * 4f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * Licensed under the Apache License, Version 2.0 (the "License"); 5f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * you may not use this file except in compliance with the License. 6f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * You may obtain a copy of the License at 7f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * 8f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * http://www.apache.org/licenses/LICENSE-2.0 9f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * 10f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * Unless required by applicable law or agreed to in writing, software 11f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * distributed under the License is distributed on an "AS IS" BASIS, 12f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * See the License for the specific language governing permissions and 14f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * limitations under the License. 15f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa */ 16f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa 1704563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa#include <gui/bufferqueue/1.0/H2BGraphicBufferProducer.h> 18ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/WOmx.h> 19ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/WOmxNode.h> 20ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/WOmxObserver.h> 21ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/WGraphicBufferSource.h> 22ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/Conversion.h> 23517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android { 25517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware { 26517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media { 27517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx { 28517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 { 29eeac97b18ca5c939bf2ac59334d36d54f705af3dPawin Vongmasanamespace utils { 30517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 3104563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasausing ::android::hardware::graphics::bufferqueue::V1_0::utils:: 3204563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa H2BGraphicBufferProducer; 3304563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasatypedef ::android::hardware::graphics::bufferqueue::V1_0::IGraphicBufferProducer 3404563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa HGraphicBufferProducer; 3504563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa 36517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// LWOmx 37517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaLWOmx::LWOmx(sp<IOmx> const& base) : mBase(base) { 38517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 39517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 40517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasastatus_t LWOmx::listNodes(List<IOMX::ComponentInfo>* list) { 41517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa status_t fnStatus; 42517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa status_t transStatus = toStatusT(mBase->listNodes( 43517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa [&fnStatus, list]( 44517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa Status status, 45517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa hidl_vec<IOmx::ComponentInfo> const& nodeList) { 46517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa fnStatus = toStatusT(status); 47517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa list->clear(); 48517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (size_t i = 0; i < nodeList.size(); ++i) { 49517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa auto newInfo = list->insert( 50517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa list->end(), IOMX::ComponentInfo()); 51517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa convertTo(&*newInfo, nodeList[i]); 52517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 53517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa })); 54517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa return transStatus == NO_ERROR ? fnStatus : transStatus; 55517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 56517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 57517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasastatus_t LWOmx::allocateNode( 58517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa char const* name, 59517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa sp<IOMXObserver> const& observer, 60517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa sp<IOMXNode>* omxNode) { 61517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa status_t fnStatus; 62517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa status_t transStatus = toStatusT(mBase->allocateNode( 63517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa name, new TWOmxObserver(observer), 64517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa [&fnStatus, omxNode](Status status, sp<IOmxNode> const& node) { 65517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa fnStatus = toStatusT(status); 66517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa *omxNode = new LWOmxNode(node); 67517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa })); 68517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa return transStatus == NO_ERROR ? fnStatus : transStatus; 69517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 70517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 71517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasastatus_t LWOmx::createInputSurface( 72f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa sp<::android::IGraphicBufferProducer>* bufferProducer, 73f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa sp<::android::IGraphicBufferSource>* bufferSource) { 74f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa status_t fnStatus; 75f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa status_t transStatus = toStatusT(mBase->createInputSurface( 76f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa [&fnStatus, bufferProducer, bufferSource] ( 77f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa Status status, 7804563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa sp<HGraphicBufferProducer> const& tProducer, 79f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa sp<IGraphicBufferSource> const& tSource) { 80f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa fnStatus = toStatusT(status); 8104563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa *bufferProducer = new H2BGraphicBufferProducer(tProducer); 82f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa *bufferSource = new LWGraphicBufferSource(tSource); 83f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa })); 84f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa return transStatus == NO_ERROR ? fnStatus : transStatus; 85517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 86517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 87eeac97b18ca5c939bf2ac59334d36d54f705af3dPawin Vongmasa} // namespace utils 88517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace V1_0 89517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace omx 90517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace media 91517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace hardware 92517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace android 93