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 17e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stoza#include <gui/IConsumerListener.h> 18e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stoza 19e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stoza#include <gui/BufferItem.h> 20a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 21a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiannamespace android { 22a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 237a63e83b303c550156e29eaabf437d174fae4dccDan Stozanamespace { // Anonymous 247a63e83b303c550156e29eaabf437d174fae4dccDan Stoza 257a63e83b303c550156e29eaabf437d174fae4dccDan Stozaenum class Tag : uint32_t { 265ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson ON_DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, 275ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson ON_FRAME_AVAILABLE, 287a63e83b303c550156e29eaabf437d174fae4dccDan Stoza ON_FRAME_REPLACED, 297a63e83b303c550156e29eaabf437d174fae4dccDan Stoza ON_BUFFERS_RELEASED, 30399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall ON_SIDEBAND_STREAM_CHANGED, 317a63e83b303c550156e29eaabf437d174fae4dccDan Stoza LAST = ON_SIDEBAND_STREAM_CHANGED, 32a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 33a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 347a63e83b303c550156e29eaabf437d174fae4dccDan Stoza} // Anonymous namespace 357a63e83b303c550156e29eaabf437d174fae4dccDan Stoza 367a63e83b303c550156e29eaabf437d174fae4dccDan Stozaclass BpConsumerListener : public SafeBpInterface<IConsumerListener> { 37a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 387a63e83b303c550156e29eaabf437d174fae4dccDan Stoza explicit BpConsumerListener(const sp<IBinder>& impl) 397a63e83b303c550156e29eaabf437d174fae4dccDan Stoza : SafeBpInterface<IConsumerListener>(impl, "BpConsumerListener") {} 407a63e83b303c550156e29eaabf437d174fae4dccDan Stoza 417a63e83b303c550156e29eaabf437d174fae4dccDan Stoza ~BpConsumerListener() override; 427a63e83b303c550156e29eaabf437d174fae4dccDan Stoza 437a63e83b303c550156e29eaabf437d174fae4dccDan Stoza void onDisconnect() override { 447a63e83b303c550156e29eaabf437d174fae4dccDan Stoza callRemoteAsync<decltype(&IConsumerListener::onDisconnect)>(Tag::ON_DISCONNECT); 457a63e83b303c550156e29eaabf437d174fae4dccDan Stoza } 46a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 477a63e83b303c550156e29eaabf437d174fae4dccDan Stoza void onFrameAvailable(const BufferItem& item) override { 487a63e83b303c550156e29eaabf437d174fae4dccDan Stoza callRemoteAsync<decltype(&IConsumerListener::onFrameAvailable)>(Tag::ON_FRAME_AVAILABLE, 497a63e83b303c550156e29eaabf437d174fae4dccDan Stoza item); 507a63e83b303c550156e29eaabf437d174fae4dccDan Stoza } 51d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 527a63e83b303c550156e29eaabf437d174fae4dccDan Stoza void onFrameReplaced(const BufferItem& item) override { 537a63e83b303c550156e29eaabf437d174fae4dccDan Stoza callRemoteAsync<decltype(&IConsumerListener::onFrameReplaced)>(Tag::ON_FRAME_REPLACED, 547a63e83b303c550156e29eaabf437d174fae4dccDan Stoza item); 555ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson } 565ea5e5905170f32d5cf45ad35c552d64743892c3Brian Anderson 577a63e83b303c550156e29eaabf437d174fae4dccDan Stoza void onBuffersReleased() override { 587a63e83b303c550156e29eaabf437d174fae4dccDan Stoza callRemoteAsync<decltype(&IConsumerListener::onBuffersReleased)>(Tag::ON_BUFFERS_RELEASED); 59a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 60a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 617a63e83b303c550156e29eaabf437d174fae4dccDan Stoza void onSidebandStreamChanged() override { 627a63e83b303c550156e29eaabf437d174fae4dccDan Stoza callRemoteAsync<decltype(&IConsumerListener::onSidebandStreamChanged)>( 637a63e83b303c550156e29eaabf437d174fae4dccDan Stoza Tag::ON_SIDEBAND_STREAM_CHANGED); 64a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 65399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall 667a63e83b303c550156e29eaabf437d174fae4dccDan Stoza void addAndGetFrameTimestamps(const NewFrameEventsEntry* /*newTimestamps*/, 677a63e83b303c550156e29eaabf437d174fae4dccDan Stoza FrameEventHistoryDelta* /*outDelta*/) override { 687a63e83b303c550156e29eaabf437d174fae4dccDan Stoza LOG_ALWAYS_FATAL("IConsumerListener::addAndGetFrameTimestamps cannot be proxied"); 69399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall } 70a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 71a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 727a63e83b303c550156e29eaabf437d174fae4dccDan Stoza// Out-of-line virtual method definitions to trigger vtable emission in this translation unit (see 73e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stoza// clang warning -Wweak-vtables) 747a63e83b303c550156e29eaabf437d174fae4dccDan StozaBpConsumerListener::~BpConsumerListener() = default; 757a63e83b303c550156e29eaabf437d174fae4dccDan StozaConsumerListener::~ConsumerListener() = default; 76d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 77a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIMPLEMENT_META_INTERFACE(ConsumerListener, "android.gui.IConsumerListener"); 78a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 79e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stozastatus_t BnConsumerListener::onTransact(uint32_t code, const Parcel& data, Parcel* reply, 80e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stoza uint32_t flags) { 817a63e83b303c550156e29eaabf437d174fae4dccDan Stoza if (code < IBinder::FIRST_CALL_TRANSACTION || code > static_cast<uint32_t>(Tag::LAST)) { 827a63e83b303c550156e29eaabf437d174fae4dccDan Stoza return BBinder::onTransact(code, data, reply, flags); 837a63e83b303c550156e29eaabf437d174fae4dccDan Stoza } 847a63e83b303c550156e29eaabf437d174fae4dccDan Stoza auto tag = static_cast<Tag>(code); 857a63e83b303c550156e29eaabf437d174fae4dccDan Stoza switch (tag) { 867a63e83b303c550156e29eaabf437d174fae4dccDan Stoza case Tag::ON_DISCONNECT: 877a63e83b303c550156e29eaabf437d174fae4dccDan Stoza return callLocalAsync(data, reply, &IConsumerListener::onDisconnect); 887a63e83b303c550156e29eaabf437d174fae4dccDan Stoza case Tag::ON_FRAME_AVAILABLE: 897a63e83b303c550156e29eaabf437d174fae4dccDan Stoza return callLocalAsync(data, reply, &IConsumerListener::onFrameAvailable); 907a63e83b303c550156e29eaabf437d174fae4dccDan Stoza case Tag::ON_FRAME_REPLACED: 917a63e83b303c550156e29eaabf437d174fae4dccDan Stoza return callLocalAsync(data, reply, &IConsumerListener::onFrameReplaced); 927a63e83b303c550156e29eaabf437d174fae4dccDan Stoza case Tag::ON_BUFFERS_RELEASED: 937a63e83b303c550156e29eaabf437d174fae4dccDan Stoza return callLocalAsync(data, reply, &IConsumerListener::onBuffersReleased); 947a63e83b303c550156e29eaabf437d174fae4dccDan Stoza case Tag::ON_SIDEBAND_STREAM_CHANGED: 957a63e83b303c550156e29eaabf437d174fae4dccDan Stoza return callLocalAsync(data, reply, &IConsumerListener::onSidebandStreamChanged); 96a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 97a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 98a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 99e7df8368652eb4b8cef377182c3d04436b1b7513Dan Stoza} // namespace android 100