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