1a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian/* 2a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Copyright (C) 2013 The Android Open Source Project 3a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 4a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * you may not use this file except in compliance with the License. 6a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * You may obtain a copy of the License at 7a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 8a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 10a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Unless required by applicable law or agreed to in writing, software 11a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * See the License for the specific language governing permissions and 14a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * limitations under the License. 15a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian */ 16a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 17d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stoza#include <gui/IConsumerListener.h> 18d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stoza 19d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stoza#include <gui/BufferItem.h> 20a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 21a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiannamespace android { 22a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 23c8ca12ae35708b94583c956fbb81918696f0c313Dan Stozanamespace { // Anonymous 24c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza 25c8ca12ae35708b94583c956fbb81918696f0c313Dan Stozaenum class Tag : uint32_t { 265ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson ON_DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, 275ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson ON_FRAME_AVAILABLE, 28c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza ON_FRAME_REPLACED, 29c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza ON_BUFFERS_RELEASED, 30399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall ON_SIDEBAND_STREAM_CHANGED, 31c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza LAST = ON_SIDEBAND_STREAM_CHANGED, 32a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 33a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 34c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza} // Anonymous namespace 35c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza 36c8ca12ae35708b94583c956fbb81918696f0c313Dan Stozaclass BpConsumerListener : public SafeBpInterface<IConsumerListener> { 37a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 38c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza explicit BpConsumerListener(const sp<IBinder>& impl) 39c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza : SafeBpInterface<IConsumerListener>(impl, "BpConsumerListener") {} 40c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza 41c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza ~BpConsumerListener() override; 42c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza 43c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza void onDisconnect() override { 44c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza callRemoteAsync<decltype(&IConsumerListener::onDisconnect)>(Tag::ON_DISCONNECT); 45c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza } 46a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 47c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza void onFrameAvailable(const BufferItem& item) override { 48c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza callRemoteAsync<decltype(&IConsumerListener::onFrameAvailable)>(Tag::ON_FRAME_AVAILABLE, 49c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza item); 50c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza } 51d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 52c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza void onFrameReplaced(const BufferItem& item) override { 53c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza callRemoteAsync<decltype(&IConsumerListener::onFrameReplaced)>(Tag::ON_FRAME_REPLACED, 54c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza item); 555ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson } 565ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson 57c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza void onBuffersReleased() override { 58c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza callRemoteAsync<decltype(&IConsumerListener::onBuffersReleased)>(Tag::ON_BUFFERS_RELEASED); 59a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 60a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 61c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza void onSidebandStreamChanged() override { 62c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza callRemoteAsync<decltype(&IConsumerListener::onSidebandStreamChanged)>( 63c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza Tag::ON_SIDEBAND_STREAM_CHANGED); 64a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 65399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall 66c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza void addAndGetFrameTimestamps(const NewFrameEventsEntry* /*newTimestamps*/, 67c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza FrameEventHistoryDelta* /*outDelta*/) override { 68c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza LOG_ALWAYS_FATAL("IConsumerListener::addAndGetFrameTimestamps cannot be proxied"); 69399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall } 70a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 71a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 72c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza// Out-of-line virtual method definitions to trigger vtable emission in this translation unit (see 73d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stoza// clang warning -Wweak-vtables) 74c8ca12ae35708b94583c956fbb81918696f0c313Dan StozaBpConsumerListener::~BpConsumerListener() = default; 75c8ca12ae35708b94583c956fbb81918696f0c313Dan StozaConsumerListener::~ConsumerListener() = default; 76d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 77a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIMPLEMENT_META_INTERFACE(ConsumerListener, "android.gui.IConsumerListener"); 78a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 79d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stozastatus_t BnConsumerListener::onTransact(uint32_t code, const Parcel& data, Parcel* reply, 80d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stoza uint32_t flags) { 81c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza if (code < IBinder::FIRST_CALL_TRANSACTION || code > static_cast<uint32_t>(Tag::LAST)) { 82c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza return BBinder::onTransact(code, data, reply, flags); 83c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza } 84c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza auto tag = static_cast<Tag>(code); 85c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza switch (tag) { 86c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza case Tag::ON_DISCONNECT: 87c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza return callLocalAsync(data, reply, &IConsumerListener::onDisconnect); 88c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza case Tag::ON_FRAME_AVAILABLE: 89c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza return callLocalAsync(data, reply, &IConsumerListener::onFrameAvailable); 90c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza case Tag::ON_FRAME_REPLACED: 91c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza return callLocalAsync(data, reply, &IConsumerListener::onFrameReplaced); 92c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza case Tag::ON_BUFFERS_RELEASED: 93c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza return callLocalAsync(data, reply, &IConsumerListener::onBuffersReleased); 94c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza case Tag::ON_SIDEBAND_STREAM_CHANGED: 95c8ca12ae35708b94583c956fbb81918696f0c313Dan Stoza return callLocalAsync(data, reply, &IConsumerListener::onSidebandStreamChanged); 96a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 97a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 98a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 99d8339d96577a08bc90d0b2a4b7bc57b38aeeca4eDan Stoza} // namespace android 100