Exemplo n.º 1
0
        private void doStop(CSourceOperation pOp)
        {
            Debug.Assert(pOp.Type == SourceOperationType.Operation_Stop);

            HResult hr = HResult.S_OK;

            try
            {
                foreach (var stream in _streams)
                {
                    var cs = (stream as MediaStream);
                    if (cs.IsActive)
                    {
                        ThrowIfError(cs.Flush());
                        ThrowIfError(cs.Stop());
                    }
                }
            }
            catch (Exception ex)
            {
                hr = (HResult)ex.HResult;
            }
            // Send the "stopped" event. This might include a failure code.
            _spEventQueue.QueueEventParamVar(MediaEventType.MESourceStopped, Guid.Empty, hr, null);
        }
Exemplo n.º 2
0
        public HResult Stop()
        {
            HResult          hr       = HResult.S_OK;
            CSourceOperation spStopOp = new CSourceOperation
            {
                Type = SourceOperationType.Operation_Stop
            };

            // Queue asynchronous stop
            //doStop(spStopOp);
            return(hr);
        }
Exemplo n.º 3
0
        public HResult Start(IMFPresentationDescriptor pPresentationDescriptor, Guid pguidTimeFormat, ConstPropVariant pvarStartPos)
        {
            HResult hr = HResult.S_OK;

            // Check parameters.

            // Start position and presentation descriptor cannot be NULL.
            if (pvarStartPos == null || pPresentationDescriptor == null)
            {
                return(HResult.E_INVALIDARG);
            }

            // Check the time format.
            if ((pguidTimeFormat != null) && (pguidTimeFormat != Guid.Empty))
            {
                // Unrecognized time format GUID.
                return(HResult.MF_E_UNSUPPORTED_TIME_FORMAT);
            }

            // Check the data type of the start position.
            if (pvarStartPos.GetVariantType() != VariantType.None && pvarStartPos.GetVariantType() != VariantType.Int64)
            {
                return(HResult.MF_E_UNSUPPORTED_TIME_FORMAT);
            }

            if (_eSourceState != SourceState.SourceState_Stopped && _eSourceState != SourceState.SourceState_Started)
            {
                hr = HResult.MF_E_INVALIDREQUEST;
            }

            if (MFError.Succeeded(hr))
            {
                // Check if the presentation description is valid.
                hr = ValidatePresentationDescriptor(pPresentationDescriptor);
            }

            if (MFError.Succeeded(hr))
            {
                CSourceOperation op = new CSourceOperation
                {
                    Type = SourceOperationType.Operation_Start,
                    PresentationDescriptor = pPresentationDescriptor,
                    Data = pvarStartPos
                };
                doStart(op);
            }
            return(hr);
        }
Exemplo n.º 4
0
        private void doStart(CSourceOperation pOp)
        {
            Debug.Assert(pOp.Type == SourceOperationType.Operation_Start);

            IMFPresentationDescriptor spPD = pOp.PresentationDescriptor;

            try
            {
                SelectStreams(spPD);

                _eSourceState = SourceState.SourceState_Starting;
                _networkStreamAdapter.SendStartRequest();
                _eSourceState = SourceState.SourceState_Started;

                ThrowIfError(_spEventQueue.QueueEventParamVar(MediaEventType.MESourceStarted, Guid.Empty, HResult.S_OK, pOp.Data));
            }
            catch (Exception ex)
            {
                _spEventQueue.QueueEventParamVar(MediaEventType.MESourceStarted, Guid.Empty, (HResult)ex.HResult, null);
            }
        }