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