/// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
        /// <summary>
        /// Gets the playback rate capabilitys for the session
        /// </summary>
        /// <param name="mediaSession">the media session. If not null, we will
        /// populate this object from the session</param>
        /// <history>
        ///    01 Nov 18  Cynic - Started
        /// </history>
        public bool AcquirePlayBackRates(IMFMediaSession mediaSession)
        {
            bool  outBool;
            bool  wantThinned;
            float supportedRate;

            Reset();

            if (mediaSession == null)
            {
                return(false);
            }

            try
            {
                // first we acquire the thinned rates
                wantThinned = true;

                outBool = TantaWMFUtils.GetFastestRate(mediaSession, MFRateDirection.Forward, wantThinned, out supportedRate);
                if (outBool == true)
                {
                    fastestForwardSpeedThinned = Math.Abs(supportedRate);
                }
                outBool = TantaWMFUtils.GetSlowestRate(mediaSession, MFRateDirection.Forward, wantThinned, out supportedRate);
                if (outBool == true)
                {
                    slowestForwardSpeedThinned = Math.Abs(supportedRate);
                }

                // now test for the reverse being possible with this thinning mode
                outBool = TantaWMFUtils.IsRewindSupported(mediaSession, wantThinned);
                if (outBool == true)
                {
                    reverseSpeedIsSupportedThinned = true;
                    outBool = TantaWMFUtils.GetFastestRate(mediaSession, MFRateDirection.Reverse, wantThinned, out supportedRate);
                    if (outBool == true)
                    {
                        fastestReverseSpeedThinned = Math.Abs(supportedRate);
                    }
                    outBool = TantaWMFUtils.GetSlowestRate(mediaSession, MFRateDirection.Reverse, wantThinned, out supportedRate);
                    if (outBool == true)
                    {
                        slowestReverseSpeedThinned = Math.Abs(supportedRate);
                    }
                }

                // next we acquire the thinned rates
                wantThinned = false;

                outBool = TantaWMFUtils.GetFastestRate(mediaSession, MFRateDirection.Forward, wantThinned, out supportedRate);
                if (outBool == true)
                {
                    fastestForwardSpeedNonThinned = Math.Abs(supportedRate);
                }
                outBool = TantaWMFUtils.GetSlowestRate(mediaSession, MFRateDirection.Forward, wantThinned, out supportedRate);
                if (outBool == true)
                {
                    slowestForwardSpeedNonThinned = Math.Abs(supportedRate);
                }

                // now test for the reverse being possible with this thinning mode
                outBool = TantaWMFUtils.IsRewindSupported(mediaSession, wantThinned);
                if (outBool == true)
                {
                    reverseSpeedIsSupportedNonThinned = true;
                    outBool = TantaWMFUtils.GetFastestRate(mediaSession, MFRateDirection.Reverse, wantThinned, out supportedRate);
                    if (outBool == true)
                    {
                        fastestReverseSpeedNonThinned = Math.Abs(supportedRate);
                    }
                    outBool = TantaWMFUtils.GetSlowestRate(mediaSession, MFRateDirection.Reverse, wantThinned, out supportedRate);
                    if (outBool == true)
                    {
                        slowestReverseSpeedNonThinned = Math.Abs(supportedRate);
                    }
                }

                capabilityRequestSuccessful = true;
            }
            catch
            {
                capabilityRequestSuccessful = false;
            }
            return(CapabilityRequestSuccessful);
        }