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 19517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <vector> 20517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 21223b8e36091a48b3963d2ea6fc7e304b71e26553Pawin Vongmasa#include <android-base/logging.h> 22517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <cutils/native_handle.h> 230d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa#include <binder/Binder.h> 24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 250d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa#include "WOmxObserver.h" 26517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "Conversion.h" 27517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 28517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android { 29517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware { 30517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media { 31517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx { 32517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 { 33517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace implementation { 34517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 35517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// LWOmxObserver 36517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaLWOmxObserver::LWOmxObserver(sp<IOmxObserver> const& base) : mBase(base) { 37517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 38517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 39517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasavoid LWOmxObserver::onMessages(std::list<omx_message> const& lMessages) { 40517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa hidl_vec<Message> tMessages; 41517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa std::vector<native_handle_t*> handles(lMessages.size()); 42517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa tMessages.resize(lMessages.size()); 43517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa size_t i = 0; 44517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (auto const& message : lMessages) { 45517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa wrapAs(&tMessages[i], &handles[i], message); 46517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa ++i; 47517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 4826f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa auto transResult = mBase->onMessages(tMessages); 4926f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa if (!transResult.isOk()) { 50223b8e36091a48b3963d2ea6fc7e304b71e26553Pawin Vongmasa LOG(ERROR) << "LWOmxObserver::onMessages - Transaction failed"; 5126f202600b4e10fa80bd2d51283aebb8fdd3669cPawin Vongmasa } 52517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (auto& handle : handles) { 538a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa native_handle_close(handle); 54517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa native_handle_delete(handle); 55517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 56517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 57517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 58517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// TWOmxObserver 59517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaTWOmxObserver::TWOmxObserver(sp<IOMXObserver> const& base) : mBase(base) { 60517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 61517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 62517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxObserver::onMessages(const hidl_vec<Message>& tMessages) { 63517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa std::list<omx_message> lMessages; 64517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa for (size_t i = 0; i < tMessages.size(); ++i) { 65517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa lMessages.push_back(omx_message{}); 668a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa convertTo(&lMessages.back(), tMessages[i]); 67517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa } 68517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa mBase->onMessages(lMessages); 69517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa return Return<void>(); 70517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} 71517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa 72517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace implementation 73517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace V1_0 74517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace omx 75517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace media 76517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace hardware 77517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace android 78