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