OSDN Git Service

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