WOmxObserver.cpp revision 26f202600b4e10fa80bd2d51283aebb8fdd3669c
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 1726f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa#define LOG_TAG "WOmxObserver-impl" 18517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "WOmxObserver.h" 19517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 20517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <vector> 21517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 22517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <cutils/native_handle.h> 23517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <frameworks/native/include/binder/Binder.h> 24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 25517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "Conversion.h" 26517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 27517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android { 28517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware { 29517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media { 30517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx { 31517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 { 32517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace implementation { 33517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 34517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// LWOmxObserver 35517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaLWOmxObserver::LWOmxObserver(sp<IOmxObserver> const& base) : mBase(base) { 36517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 37517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 38517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasavoid LWOmxObserver::onMessages(std::list<omx_message> const& lMessages) { 39517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa hidl_vec<Message> tMessages; 40517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa std::vector<native_handle_t*> handles(lMessages.size()); 41517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa tMessages.resize(lMessages.size()); 42517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa size_t i = 0; 43517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (auto const& message : lMessages) { 44517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa wrapAs(&tMessages[i], &handles[i], message); 45517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa ++i; 46517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 4726f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa auto transResult = mBase->onMessages(tMessages); 4826f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa if (!transResult.isOk()) { 4926f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa ALOGE("LWOmxObserver::onMessages transaction failed"); 5026f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa } 51517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (auto& handle : handles) { 528a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa native_handle_close(handle); 53517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa native_handle_delete(handle); 54517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 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