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