summaryrefslogtreecommitdiff
path: root/tvapi/android/libtvbinder/ITv.cpp (plain)
blob: 598871303322bc792a818b5ab9f6f7667e25ec1d
1//#define LOG_NDEBUG 0
2#define LOG_TAG "ITv"
3#include <utils/Log.h>
4#include <stdint.h>
5#include <sys/types.h>
6#include <binder/Parcel.h>
7#include <include/ITv.h>
8
9enum {
10 DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
11 START_PREVIEW,
12 SEND_COMMAND,
13 CONNECT,
14 LOCK,
15 UNLOCK,
16 TV_CMD,
17 TV_CREATE_SUBTITLE,
18 TV_CREATE_VIDEO_FRAME,
19};
20
21class BpTv: public BpInterface<ITv> {
22public:
23 BpTv(const sp<IBinder> &impl)
24 : BpInterface<ITv>(impl)
25 {
26 }
27
28 // disconnect from tv service
29 void disconnect()
30 {
31 Parcel data, reply;
32 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
33 remote()->transact(DISCONNECT, data, &reply);
34 }
35
36 status_t processCmd(const Parcel &p, Parcel *r)
37 {
38 Parcel data, reply;
39 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
40 data.write(p.data(), p.dataSize());
41 remote()->transact(TV_CMD, data, &reply);
42 r->write(reply.data(), reply.dataSize());
43 r->setDataPosition(0);
44 return 0;
45 }
46
47 virtual status_t createVideoFrame(const sp<IMemory> &share_mem, int iSourceMode, int iCapVideoLayerOnly)
48 {
49 Parcel data, reply;
50 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
51 data.writeStrongBinder(IInterface::asBinder(share_mem));
52 data.writeInt32(iSourceMode);
53 data.writeInt32(iCapVideoLayerOnly);
54 remote()->transact(TV_CREATE_VIDEO_FRAME, data, &reply);
55 return reply.readInt32();
56 }
57
58 virtual status_t createSubtitle(const sp<IMemory> &share_mem)
59 {
60 Parcel data, reply;
61 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
62 data.writeStrongBinder(IInterface::asBinder(share_mem));
63 remote()->transact(TV_CREATE_SUBTITLE, data, &reply);
64 return reply.readInt32();
65 }
66 virtual status_t connect(const sp<ITvClient> &tvClient)
67 {
68 Parcel data, reply;
69 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
70 data.writeStrongBinder(IInterface::asBinder(tvClient));
71 remote()->transact(CONNECT, data, &reply);
72 return reply.readInt32();
73 }
74 virtual status_t lock()
75 {
76 Parcel data, reply;
77 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
78 remote()->transact(LOCK, data, &reply);
79 return reply.readInt32();
80 }
81 virtual status_t unlock()
82 {
83 Parcel data, reply;
84 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
85 remote()->transact(UNLOCK, data, &reply);
86 return reply.readInt32();
87 }
88};
89
90IMPLEMENT_META_INTERFACE(Tv, "android.amlogic.ITv");
91
92status_t BnTv::onTransact(
93 uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
94{
95 switch (code) {
96 case DISCONNECT: {
97 CHECK_INTERFACE(ITv, data, reply);
98 disconnect();
99 return NO_ERROR;
100 }
101 break;
102 case CONNECT: {
103 CHECK_INTERFACE(ITv, data, reply);
104 sp<ITvClient> tvClient = interface_cast<ITvClient>(data.readStrongBinder());
105 reply->writeInt32(connect(tvClient));
106 return NO_ERROR;
107 }
108 break;
109 case LOCK: {
110 CHECK_INTERFACE(ITv, data, reply);
111 reply->writeInt32(lock());
112 return NO_ERROR;
113 }
114 break;
115 case UNLOCK: {
116 CHECK_INTERFACE(ITv, data, reply);
117 reply->writeInt32(unlock());
118 return NO_ERROR;
119 }
120 break;
121 case TV_CMD: {
122 CHECK_INTERFACE(ITv, data, reply);
123 processCmd(data, reply);
124 //reply->write(tmp.data(), tmp.dataSize());
125 return NO_ERROR;
126 }
127 case TV_CREATE_SUBTITLE: {
128 CHECK_INTERFACE(ITv, data, reply);
129 sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
130 createSubtitle(buffer);
131 //reply->write(tmp.data(), tmp.dataSize());
132 return NO_ERROR;
133 }
134 case TV_CREATE_VIDEO_FRAME: {
135 CHECK_INTERFACE(ITv, data, reply);
136 sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
137 int srcMode = data.readInt32();
138 int capVideoLayerOnly = data.readInt32();
139 createVideoFrame(buffer, srcMode, capVideoLayerOnly);
140 //reply->write(tmp.data(), tmp.dataSize());
141 return NO_ERROR;
142 }
143 break;
144 default:
145 return BBinder::onTransact(code, data, reply, flags);
146 }
147}
148
149