00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma once
00023
00024 #include "..\..\..\include\RealMedia\pntypes.h"
00025 #include "..\..\..\include\RealMedia\pnwintyp.h"
00026 #include "..\..\..\include\RealMedia\pncom.h"
00027 #include "..\..\..\include\RealMedia\rmapckts.h"
00028 #include "..\..\..\include\RealMedia\rmacomm.h"
00029 #include "..\..\..\include\RealMedia\rmamon.h"
00030 #include "..\..\..\include\RealMedia\rmafiles.h"
00031 #include "..\..\..\include\RealMedia\rmaengin.h"
00032 #include "..\..\..\include\RealMedia\rmacore.h"
00033 #include "..\..\..\include\RealMedia\rmaclsnk.h"
00034 #include "..\..\..\include\RealMedia\rmaerror.h"
00035 #include "..\..\..\include\RealMedia\rmaauth.h"
00036 #include "..\..\..\include\RealMedia\rmawin.h"
00037 #include "..\..\..\include\RealMedia\rmasite2.h"
00038 #include "..\..\..\include\RealMedia\rmaausvc.h"
00039 #include "..\..\..\include\RealMedia\rmavsurf.h"
00040 #include "..\..\..\include\RealMedia\rmaevent.h"
00041
00042 namespace DSObjects
00043 {
00044
00045 struct REGION
00046 {
00047 REGION() : rects(0), pOSRegion(0) {}
00048 long size;
00049 long numRects;
00050 PNxRect* rects;
00051 PNxRect extents;
00052 void* pOSRegion;
00053 };
00054
00055 void ExtractRects(REGION* pRegion);
00056 REGION* RMACreateRectRegion(int left, int top, int right, int bottom);
00057 void RMASubtractRegion(REGION* regM, REGION* regS, REGION* regD);
00058 void RMAUnionRegion(REGION* reg1, REGION* reg2, REGION* regD);
00059 void RMAIntersectRegion(REGION* reg1, REGION* reg2, REGION* regD);
00060 BOOL RMAEqualRegion(REGION* reg1, REGION* reg2);
00061 void RMADestroyRegion(REGION* reg);
00062 REGION* RMACreateRegion();
00063
00064 class CRealMediaWindowlessSite;
00065
00066
00067
00068
00069
00070 class CRealMediaWindowlessSite;
00071
00072 class CRealMediaVideoSurface
00073 : public CUnknown
00074 , public IRMAVideoSurface
00075 {
00076 void IntersectRect(PNxRect* pRect, PNxRect* pBox, PNxRect* pRetVal);
00077
00078 protected:
00079 CComPtr<IUnknown> m_pContext;
00080 CRealMediaWindowlessSite* m_pSiteWindowless;
00081 RMABitmapInfoHeader m_bitmapInfo;
00082 RMABitmapInfoHeader m_lastBitmapInfo;
00083
00084 public:
00085 CRealMediaVideoSurface(IUnknown* pContext, CRealMediaWindowlessSite* pSiteWindowless);
00086 virtual ~CRealMediaVideoSurface();
00087
00088 DECLARE_IUNKNOWN;
00089 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
00090
00091
00092
00093 STDMETHODIMP Blt(UCHAR* pImageData, RMABitmapInfoHeader* pBitmapInfo, REF(PNxRect) inDestRect, REF(PNxRect) inSrcRect);
00094 STDMETHODIMP BeginOptimizedBlt(RMABitmapInfoHeader* pBitmapInfo);
00095 STDMETHODIMP OptimizedBlt(UCHAR* pImageBits, REF(PNxRect) rDestRect, REF(PNxRect) rSrcRect);
00096 STDMETHODIMP EndOptimizedBlt();
00097 STDMETHODIMP GetOptimizedFormat(REF(RMA_COMPRESSION_TYPE) ulType);
00098 STDMETHODIMP GetPreferredFormat(REF(RMA_COMPRESSION_TYPE) ulType);
00099 };
00100
00101
00102
00103
00104
00105 class CRealMediaWindowlessSite
00106 : public CUnknown
00107 , public IRMASite
00108 , public IRMASite2
00109 , public IRMASiteWindowless
00110 , public IRMAVideoSurface
00111 {
00112 CComQIPtr<IRMACommonClassFactory, &IID_IRMACommonClassFactory> m_pCCF;
00113 CComPtr<IUnknown> m_pContext;
00114 CComPtr<IRMAValues> m_pValues;
00115
00116 CComPtr<IRMASiteUser> m_pUser;
00117
00118 CRealMediaWindowlessSite* m_pParentSite;
00119 CInterfaceList<IRMASite, &IID_IRMASite> m_pChildren;
00120
00121 CComPtr<IRMASiteWatcher> m_pWatcher;
00122 CInterfaceList<IRMAPassiveSiteWatcher, &IID_IRMAPassiveSiteWatcher> m_pPassiveWatchers;
00123
00124 PNxSize m_size;
00125 PNxPoint m_position;
00126 bool m_fDamaged, m_fInRedraw, m_fIsVisible;
00127 INT32 m_lZOrder;
00128
00129
00130
00131 REGION* m_pRegion;
00132 REGION* m_pRegionWithoutChildren;
00133
00134 void RecomputeRegion();
00135 void InternalRecomputeRegion();
00136 void ComputeRegion();
00137 void SubtractSite(REGION* pRegion);
00138
00139 void UpdateZOrder(CRealMediaWindowlessSite* pUpdatedChildSite, INT32 lOldZOrder, INT32 lNewZOrder);
00140 void SetInternalZOrder(INT32 lZOrder);
00141
00142 public:
00143 CRealMediaWindowlessSite(HRESULT& hr, IUnknown* pContext, CRealMediaWindowlessSite* pParentSite = NULL, IUnknown* pUnkOuter = NULL);
00144 virtual ~CRealMediaWindowlessSite();
00145
00146 DECLARE_IUNKNOWN;
00147 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
00148
00149 void GetTopLeft(PNxPoint* pPoint);
00150 REGION* GetRegion();
00151
00152
00153
00154 STDMETHODIMP EventOccurred(PNxEvent* pEvent);
00155 STDMETHODIMP_(PNxWindow*) GetParentWindow();
00156
00157
00158
00159 STDMETHODIMP AttachUser(IRMASiteUser* pUser);
00160 STDMETHODIMP DetachUser();
00161 STDMETHODIMP GetUser(REF(IRMASiteUser*) pUser);
00162
00163 STDMETHODIMP CreateChild(REF(IRMASite*) pChildSite);
00164 STDMETHODIMP DestroyChild(IRMASite* pChildSite);
00165
00166 STDMETHODIMP AttachWatcher(IRMASiteWatcher* pWatcher);
00167 STDMETHODIMP DetachWatcher();
00168
00169 STDMETHODIMP SetPosition(PNxPoint position);
00170 STDMETHODIMP GetPosition(REF(PNxPoint) position);
00171 STDMETHODIMP SetSize(PNxSize size);
00172 STDMETHODIMP GetSize(REF(PNxSize) size);
00173
00174 STDMETHODIMP DamageRect(PNxRect rect);
00175 STDMETHODIMP DamageRegion(PNxRegion region);
00176 STDMETHODIMP ForceRedraw();
00177
00178
00179
00180 STDMETHODIMP UpdateSiteWindow(PNxWindow* pWindow);
00181 STDMETHODIMP ShowSite(BOOL bShow);
00182 STDMETHODIMP_(BOOL) IsSiteVisible();
00183 STDMETHODIMP SetZOrder(INT32 lZOrder);
00184 STDMETHODIMP GetZOrder(REF(INT32) lZOrder);
00185 STDMETHODIMP MoveSiteToTop();
00186 STDMETHODIMP GetVideoSurface(REF(IRMAVideoSurface*) pSurface);
00187 STDMETHODIMP_(UINT32) GetNumberOfChildSites();
00188
00189 STDMETHODIMP AddPassiveSiteWatcher(IRMAPassiveSiteWatcher* pWatcher);
00190 STDMETHODIMP RemovePassiveSiteWatcher(IRMAPassiveSiteWatcher* pWatcher);
00191
00192 STDMETHODIMP SetCursor(PNxCursor cursor, REF(PNxCursor) oldCursor);
00193
00194 private:
00195 void IntersectRect(PNxRect* pRect, PNxRect* pBox, PNxRect* pRetVal);
00196
00197 protected:
00198 RMABitmapInfoHeader m_bitmapInfo;
00199 RMABitmapInfoHeader m_lastBitmapInfo;
00200
00201 CComPtr<IRMAVideoSurface> m_pBltService;
00202
00203 public:
00204 bool GetBltService(IRMAVideoSurface** ppBltService);
00205 void SetBltService(IRMAVideoSurface* ppBltService);
00206
00207
00208
00209 STDMETHODIMP Blt(UCHAR* pImageData, RMABitmapInfoHeader* pBitmapInfo, REF(PNxRect) inDestRect, REF(PNxRect) inSrcRect);
00210 STDMETHODIMP BeginOptimizedBlt(RMABitmapInfoHeader* pBitmapInfo);
00211 STDMETHODIMP OptimizedBlt(UCHAR* pImageBits, REF(PNxRect) rDestRect, REF(PNxRect) rSrcRect);
00212 STDMETHODIMP EndOptimizedBlt();
00213 STDMETHODIMP GetOptimizedFormat(REF(RMA_COMPRESSION_TYPE) ulType);
00214 STDMETHODIMP GetPreferredFormat(REF(RMA_COMPRESSION_TYPE) ulType);
00215 };
00216
00217 }
00218 using namespace DSObjects;