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); }
public HResult Stop() { HResult hr = HResult.S_OK; CSourceOperation spStopOp = new CSourceOperation { Type = SourceOperationType.Operation_Stop }; // Queue asynchronous stop //doStop(spStopOp); return(hr); }
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); }
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); } }