public void Transcode(MediaSource source, string mcxuser) { // Modified to ensure a user will only transcode one file at a time. string key = source.Key; lock (sTranscoders) { if (sTranscoders.ContainsKey(key)) { // Transcoding service is/was allready transcoding the file Utilities.DebugLine("Transcode [Already Processing]: {0}, status={1}", source, sTranscoders[key].Status); if ((sTranscoders[key].Status == TranscodingStatus.BufferReady) || (sTranscoders[key].Status == TranscodingStatus.Done) || (sTranscoders[key].Status == TranscodingStatus.Initializing)) { NotifyAll(key, sTranscoders[key].Status); return; } } } // This file if not allready being transcoded. Check user is not allready transcoding lock (sUserSession) { if (sUserSession.ContainsKey(mcxuser)) { // Allready transcoding, cancel the job Utilities.DebugLine("Transcode [User allready transcoding]: {0}", mcxuser); if (sTranscoders.ContainsKey(sUserSession[mcxuser])) { if ((sTranscoders[sUserSession[mcxuser]].Status == TranscodingStatus.BufferReady) || (sTranscoders[sUserSession[mcxuser]].Status == TranscodingStatus.Initializing)) { Cancel(sUserSession[mcxuser]); } } sUserSession.Remove(mcxuser); } } // Start transcoding session sTranscoders[key] = new Transcoder(source); sUserSession[mcxuser] = key; }
public void Cancel(string key) { Transcoder t = null; lock (sTranscoders) if (sTranscoders.ContainsKey(key) == false) { Utilities.DebugLine("Cancel [Not present]: {0}", key); } else { t = sTranscoders[key]; sTranscoders.Remove(key); } if (t != null) { t.Cancel(); } }