WOmxBufferSource.cpp revision f62ea8018813951e8f6a182880cadb3217e4ce37
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 "WOmxBufferSource.h"
18517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "Conversion.h"
19517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <utils/String8.h>
20517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <cutils/native_handle.h>
21517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
22517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android {
23517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware {
24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media {
25517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx {
26517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 {
27517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace implementation {
28517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
29517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// LWOmxBufferSource
30517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaLWOmxBufferSource::LWOmxBufferSource(sp<IOmxBufferSource> const& base) :
31517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    mBase(base) {
32517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
33517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
34517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::binder::Status LWOmxBufferSource::onOmxExecuting() {
35517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toBinderStatus(mBase->onOmxExecuting());
36517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
37517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
38517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::binder::Status LWOmxBufferSource::onOmxIdle() {
39517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toBinderStatus(mBase->onOmxIdle());
40517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
41517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
42517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::binder::Status LWOmxBufferSource::onOmxLoaded() {
43517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toBinderStatus(mBase->onOmxLoaded());
44517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
45517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
46517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::binder::Status LWOmxBufferSource::onInputBufferAdded(
47517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa        int32_t bufferId) {
48517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toBinderStatus(mBase->onInputBufferAdded(
49517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            static_cast<uint32_t>(bufferId)));
50517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
51517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
52517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::binder::Status LWOmxBufferSource::onInputBufferEmptied(
53517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa        int32_t bufferId, OMXFenceParcelable const& fenceParcel) {
54517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    hidl_handle fence;
55517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    native_handle_t* fenceNh;
56517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    if (!wrapAs(&fence, &fenceNh, fenceParcel)) {
57517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa        return ::android::binder::Status::fromExceptionCode(
58517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa                ::android::binder::Status::EX_BAD_PARCELABLE,
59517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa                "Invalid fence");
60517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    }
61517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    ::android::binder::Status status = toBinderStatus(
62517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            mBase->onInputBufferEmptied(
63517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            static_cast<uint32_t>(bufferId), fence));
64517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    if (native_handle_delete(fenceNh) != 0) {
65517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa        return ::android::binder::Status::fromExceptionCode(
66517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa                ::android::binder::Status::EX_NULL_POINTER,
67517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa                "Cannot delete native handle");
68517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    }
69517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return status;
70517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
71517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
72517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa::android::IBinder* LWOmxBufferSource::onAsBinder() {
73517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return nullptr;
74517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
75517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
76517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// TWOmxBufferSource
77517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaTWOmxBufferSource::TWOmxBufferSource(sp<IOMXBufferSource> const& base) :
78517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    mBase(base) {
79517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
80517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
81517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onOmxExecuting() {
82517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toHardwareStatus(mBase->onOmxExecuting());
83517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
84517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
85517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onOmxIdle() {
86517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toHardwareStatus(mBase->onOmxIdle());
87517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
88517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
89517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onOmxLoaded() {
90517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toHardwareStatus(mBase->onOmxLoaded());
91517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
92517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
93517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onInputBufferAdded(uint32_t buffer) {
94517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toHardwareStatus(mBase->onInputBufferAdded(
95517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            static_cast<int32_t>(buffer)));
96517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
97517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
98517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onInputBufferEmptied(
99517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa        uint32_t buffer, hidl_handle const& fence) {
100517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    OMXFenceParcelable fenceParcelable;
101f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa    if (!convertTo(&fenceParcelable, fence)) {
102f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa      return ::android::hardware::Status::fromExceptionCode(
103f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa              ::android::hardware::Status::EX_BAD_PARCELABLE);
104f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa    }
105517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return toHardwareStatus(mBase->onInputBufferEmptied(
106517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            static_cast<int32_t>(buffer), fenceParcelable));
107517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
108517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
109517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace implementation
110517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace V1_0
111517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace omx
112517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace media
113517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace hardware
114517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace android
115