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
170d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa#include <utils/String8.h>
180d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa
19ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/WOmxBufferSource.h>
20ac7d4125516299b8a3e6f2b25822a692bdd96311Pawin Vongmasa#include <media/omx/1.0/Conversion.h>
21517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
22517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android {
23517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware {
24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media {
25517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx {
26517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 {
27eeac97b18ca5c939bf2ac59334d36d54f705af3dPawin Vongmasanamespace utils {
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));
648ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    native_handle_close(fenceNh);
658ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    native_handle_delete(fenceNh);
66517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    return status;
67517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
68517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
69517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa// TWOmxBufferSource
70517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaTWOmxBufferSource::TWOmxBufferSource(sp<IOMXBufferSource> const& base) :
71517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    mBase(base) {
72517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
73517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
74517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onOmxExecuting() {
758ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    mBase->onOmxExecuting();
768ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    return Void();
77517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
78517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
79517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onOmxIdle() {
808ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    mBase->onOmxIdle();
818ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    return Void();
82517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
83517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
84517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onOmxLoaded() {
858ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    mBase->onOmxLoaded();
868ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    return Void();
87517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
88517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
89517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onInputBufferAdded(uint32_t buffer) {
908ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    mBase->onInputBufferAdded(int32_t(buffer));
918ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    return Void();
92517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
93517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
94517b0e090680e378f056677201426ed9dc325c65Pawin VongmasaReturn<void> TWOmxBufferSource::onInputBufferEmptied(
95517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa        uint32_t buffer, hidl_handle const& fence) {
96517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    OMXFenceParcelable fenceParcelable;
97f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa    if (!convertTo(&fenceParcelable, fence)) {
98223b8e36091a48b3963d2ea6fc7e304b71e26553Pawin Vongmasa        return Void();
99f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa    }
1008ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    mBase->onInputBufferEmptied(int32_t(buffer), fenceParcelable);
1018ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasa    return Void();
102517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}
103517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
104eeac97b18ca5c939bf2ac59334d36d54f705af3dPawin Vongmasa}  // namespace utils
105517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace V1_0
106517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace omx
107517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace media
108517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace hardware
109517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace android
110