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 19517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "WOmxBufferSource.h" 20517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include "Conversion.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)); 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 104517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace implementation 105517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace V1_0 106517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace omx 107517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace media 108517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace hardware 109517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa} // namespace android 110