169 files changed, 64432 insertions, 116 deletions
diff --git a/tvapi/android/tvserver/TvService.h b/tvapi/android/tvserver/TvService.h new file mode 100644 index 0000000..66a6418 --- a/dev/null +++ b/tvapi/android/tvserver/TvService.h @@ -0,0 +1,83 @@ +#ifndef ANDROID_SERVERS_TV_TVSERVICE_H +#define ANDROID_SERVERS_TV_TVSERVICE_H + +#include <include/ITvService.h> +#include <include/Tv.h> +#include <utils/threads.h> +#include <utils/Vector.h> +#include <stdint.h> +#include <tv/CTv.h> +#include "tv/CTvScreenCapture.h" + +using namespace android; + +#define DEBUG_HEAP_LEAKS 0 +#define RESOURCE_NUMS 5 + +class TvService: public BnTvService , public CTv::TvIObserver, public CTvScreenCapture::TvIObserver +{ +public: + class Client: public BnTv + { + public: + Client(const sp<TvService> &tvService, const sp<ITvClient> &tvClient, pid_t clientPid, CTv *pTv); + Client(); + virtual ~Client(); + virtual void disconnect(); + virtual status_t connect(const sp<ITvClient> &client); + virtual status_t lock(); + virtual status_t unlock(); + virtual status_t processCmd(const Parcel &p, Parcel *r); + virtual status_t createSubtitle(const sp<IMemory> &share_mem); + virtual status_t createVideoFrame(const sp<IMemory> &share_mem); + + // our client... + const sp<ITvClient> &getTvClient() const + { + return mTvClient; + } + + int notifyCallback(const int &msgtype, const Parcel &p); + String16 mStrName; + static void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void *user); + private: + friend class CTv; + friend class TvService; + status_t checkPid(); + static sp<Client> getClientFromCookie(void *user); + + mutable Mutex mLock; + mutable Condition mReady; + sp<TvService> mTvService; + sp<ITvClient> mTvClient; + pid_t mClientPid; + int mGetNotifyFlag; + int mCurProgIndex; + CTv *mpTv; + bool mIsStartTv; + };//end client + + virtual sp<ITv> connect(const sp<ITvClient> &tvClient); + + virtual void onTvEvent(const CTvEv &ev); + void removeClient(const sp<ITvClient> &tvClient); + + Client *mpStartTvClient; + wp<Client> mpScannerClient; + static void instantiate(CTv *pTv); + Vector< wp<Client> > m_v_Clients; + +private: + TvService(CTv *pTv); + virtual ~TvService(); + virtual status_t onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags); + volatile int32_t mUsers; + virtual void incUsers(); + virtual void decUsers(); + mutable Mutex mServiceLock; + CTv *mpTv; + CTvScreenCapture mCapVidFrame; + +}; + +#endif |