summaryrefslogtreecommitdiff
path: root/tvapi/android/tvserver/TvService.h (plain)
blob: a6b4e9f2c07e792fe2dd7427111f284ccdb67d74
1#ifndef ANDROID_SERVERS_TV_TVSERVICE_H
2#define ANDROID_SERVERS_TV_TVSERVICE_H
3
4#include <include/ITvService.h>
5//#include <include/Tv.h>
6#include <utils/threads.h>
7#include <utils/Vector.h>
8#include <stdint.h>
9#include <tv/CTv.h>
10#include "tv/CTvScreenCapture.h"
11
12using namespace android;
13
14#define DEBUG_HEAP_LEAKS 0
15#define RESOURCE_NUMS 5
16
17class TvService: public BnTvService , public CTv::TvIObserver, public CTvScreenCapture::TvIObserver {
18public:
19 class Client: public BnTv {
20 public:
21 Client(const sp<TvService> &tvService, const sp<ITvClient> &tvClient, pid_t clientPid, CTv *pTv);
22 Client();
23 virtual ~Client();
24 virtual void disconnect();
25 virtual status_t connect(const sp<ITvClient> &client);
26 virtual status_t lock();
27 virtual status_t unlock();
28 virtual status_t processCmd(const Parcel &p, Parcel *r);
29 virtual status_t createSubtitle(const sp<IMemory> &share_mem);
30 virtual status_t createVideoFrame(const sp<IMemory> &share_mem, int iSourceMode, int iCapVideoLayerOnly);
31
32 // our client...
33 const sp<ITvClient> &getTvClient() const
34 {
35 return mTvClient;
36 }
37
38 int notifyCallback(const int &msgtype, const Parcel &p);
39 String16 mStrName;
40 static void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void *user);
41 private:
42 friend class CTv;
43 friend class TvService;
44 status_t checkPid();
45 static sp<Client> getClientFromCookie(void *user);
46
47 mutable Mutex mLock;
48 mutable Condition mReady;
49 sp<TvService> mTvService;
50 sp<ITvClient> mTvClient;
51 pid_t mClientPid;
52 int mGetNotifyFlag;
53 int mCurProgIndex;
54 CTv *mpTv;
55 bool mIsStartTv;
56 sp<IMemory> mSubBmpBuf;
57 };//end client
58
59 static void instantiate();
60 static TvService *mTvService;
61 static TvService *getIntance()
62 {
63 if (mTvService == NULL)
64 mTvService = new TvService();
65 return mTvService;
66 }
67 virtual sp<ITv> connect(const sp<ITvClient> &tvClient);
68
69 virtual void onTvEvent(const CTvEv &ev);
70 void removeClient(const sp<ITvClient> &tvClient);
71
72 Client *mpStartTvClient;
73 wp<Client> mpScannerClient;
74 wp<Client> mpSubClient;
75 Vector< wp<Client> > m_v_Clients;
76
77private:
78 TvService();
79 virtual ~TvService();
80 virtual status_t onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags);
81 volatile int32_t mUsers;
82 virtual void incUsers();
83 virtual void decUsers();
84 mutable Mutex mServiceLock;
85 static CTv *mpTv;
86 CTvScreenCapture mCapVidFrame;
87
88};
89
90#endif
91