WOmxObserver.cpp revision 8a21c0191f974a0b9cbd5818052e2655e0aaa306
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 17517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "WOmxObserver.h" 18517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 19517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <vector> 20517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 21517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <cutils/native_handle.h> 22517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <frameworks/native/include/binder/Binder.h> 23517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "Conversion.h" 25517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 26517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android { 27517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware { 28517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media { 29517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx { 30517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 { 31517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace implementation { 32517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 33517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// LWOmxObserver 34517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaLWOmxObserver::LWOmxObserver(sp<IOmxObserver> const& base) : mBase(base) { 35517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 36517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 37517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasavoid LWOmxObserver::onMessages(std::list<omx_message> const& lMessages) { 38517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa hidl_vec<Message> tMessages; 39517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa std::vector<native_handle_t*> handles(lMessages.size()); 40517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa tMessages.resize(lMessages.size()); 41517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa size_t i = 0; 42517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (auto const& message : lMessages) { 43517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa wrapAs(&tMessages[i], &handles[i], message); 44517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa ++i; 45517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 46517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa mBase->onMessages(tMessages); 47517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (auto& handle : handles) { 488a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa native_handle_close(handle); 49517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa native_handle_delete(handle); 50517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 51517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 52517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 53517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::IBinder* LWOmxObserver::onAsBinder() { 54517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa return nullptr; 55517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 56517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 57517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// TWOmxObserver 58517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaTWOmxObserver::TWOmxObserver(sp<IOMXObserver> const& base) : mBase(base) { 59517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 60517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 61517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxObserver::onMessages(const hidl_vec<Message>& tMessages) { 62517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa std::list<omx_message> lMessages; 63517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (size_t i = 0; i < tMessages.size(); ++i) { 64517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa lMessages.push_back(omx_message{}); 658a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa convertTo(&lMessages.back(), tMessages[i]); 66517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 67517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa mBase->onMessages(lMessages); 68517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa return Return<void>(); 69517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 70517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 71517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace implementation 72517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace V1_0 73517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace omx 74517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace media 75517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace hardware 76517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace android 77