summaryrefslogtreecommitdiff
path: root/tvapi/android/tvserver/TvService.h (plain)
blob: 5356d49da8a91e810f2c4effc17167ef749f169b
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 if (mTvService == NULL)
63 mTvService = new TvService();
64 return mTvService;
65 }
66 virtual sp<ITv> connect(const sp<ITvClient> &tvClient);
67
68 virtual void onTvEvent(const CTvEv &ev);
69 void removeClient(const sp<ITvClient> &tvClient);
70
71 Client *mpStartTvClient;
72 wp<Client> mpScannerClient;
73 wp<Client> mpSubClient;
74 Vector< wp<Client> > m_v_Clients;
75
76private:
77 TvService();
78 virtual ~TvService();
79 virtual status_t onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags);
80 volatile int32_t mUsers;
81 virtual void incUsers();
82 virtual void decUsers();
83 mutable Mutex mServiceLock;
84 static CTv *mpTv;
85 CTvScreenCapture mCapVidFrame;
86
87};
88
89#endif
90