internal MediaContextNotificationWindow(MediaContext ownerMediaContext)
        {
            // Remember the pointer to the owner MediaContext that we'll forward the broadcasts to.
            _ownerMediaContext = ownerMediaContext;

            // Create a top-level, invisible window so we can get the WM_DWMCOMPOSITIONCHANGED 
            // and other DWM notifications that are broadcasted to top-level windows only.
            HwndWrapper hwndNotification;
            hwndNotification = new HwndWrapper(0, NativeMethods.WS_POPUP, 0, 0, 0, 0, 0, "MediaContextNotificationWindow", IntPtr.Zero, null);

            _hwndNotificationHook = new HwndWrapperHook(MessageFilter);

            _hwndNotification = new SecurityCriticalDataClass<HwndWrapper>(hwndNotification);
            _hwndNotification.Value.AddHook(_hwndNotificationHook);

            _isDisposed = false;

            //
            // On Vista, we need to know when the Magnifier goes on and off
            // in order to switch to and from software rendering because the
            // Vista Magnifier cannot magnify D3D content. To receive the
            // window message informing us of this, we must tell the DWM
            // we are MIL content.
            //
            // The Win7 Magnifier can magnify D3D content so it's not an
            // issue there. In fact, Win7 doesn't even send the WM.
            //
            // If the DWM is not running, this call will result in NoOp.
            //

            ChangeWindowMessageFilter(s_dwmRedirectionEnvironmentChanged, 1 /* MSGFLT_ADD */);
            MS.Internal.HRESULT.Check(MilContent_AttachToHwnd(_hwndNotification.Value.Handle));
        }
예제 #2
0
        public static bool Startup(MediaContext mc)
        { 
            //
            // Note to stress triagers:
            //
            // This call will fail if PresentationCore.dll and milcore.dll have mismatched 
            // versions -- please make sure that both binaries have been properly built
            // and deployed. 
            // 
            // *** Failure here does NOT indicate a bug in MediaContext.Startup! ***
            // 

            HRESULT.Check(UnsafeNativeMethods.MilVersionCheck(MS.Internal.Composition.Version.MilSdkVersion));

            using (CompositionEngineLock.Acquire()) 
            {
                _mediaContexts.Add(mc); 
 
                //Is this the first startup?
                if (0 == s_refCount) 
                {
                    HRESULT.Check(SafeNativeMethods.MilCompositionEngine_InitializePartitionManager(
                                  0 // THREAD_PRIORITY_NORMAL
                                  )); 

                    s_forceSoftareForGraphicsStreamMagnifier = 
                        UnsafeNativeMethods.WgxConnection_ShouldForceSoftwareForGraphicsStreamClient(); 

                    ConnectTransport(); 

                    // Read a flag from the registry to determine whether we should run
                    // animation smoothing code.
                    ReadAnimationSmoothingSetting(); 
                }
                s_refCount++; 
            } 
            //
 

            return true;
        }
예제 #3
0
        internal static bool ConnectChannels(MediaContext mc)
        { 
            bool fCreated = false; 

            using (CompositionEngineLock.Acquire()) 
            {
                if (IsTransportConnected)
                {
                    mc.CreateChannels(); 
                    fCreated = true;
                } 
            } 

            return fCreated; 
        }
예제 #4
0
        internal static void Shutdown(MediaContext mc)
        { 
            using (CompositionEngineLock.Acquire())
            {
                Debug.Assert(s_refCount > 0);
                _mediaContexts.Remove(mc); 

                s_refCount--; 
                if (0 == s_refCount) 
                {
                    // We can shut-down. 
                    // Debug.WriteLine("MediSystem::NotifyDisconnect Stop Transport\n");

                    if (IsTransportConnected)
                    { 
                        DisconnectTransport();
                    } 
 
                    HRESULT.Check(SafeNativeMethods.MilCompositionEngine_DeinitializePartitionManager());
                } 
            }
        }
예제 #5
0
        /// <summary> 
        /// Gets the MediaContext from the context passed in as argument.
        /// </summary> 
        internal static MediaContext From(Dispatcher dispatcher)
        {
            Debug.Assert(dispatcher != null, "Dispatcher required");
            MediaContext cm = (MediaContext)dispatcher.Reserved0; 
            if (cm == null)
            { 
                cm = new MediaContext(dispatcher); 
                Debug.Assert(dispatcher.Reserved0 == cm);
            } 

            return cm;
        }