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