/// <summary> /// Removes the component of specified media type (if registered). /// It calls the dispose method of the media component too. /// </summary> /// <param name="mediaType">Type of the media.</param> internal void RemoveComponent(MediaType mediaType) { lock (ComponentSyncLock) { var component = default(MediaComponent); if (mediaType == MediaType.Audio) { component = m_Audio; m_Audio = null; } else if (mediaType == MediaType.Video) { component = m_Video; m_Video = null; } else if (mediaType == MediaType.Subtitle) { component = m_Subtitle; m_Subtitle = null; } component?.Dispose(); UpdateComponentBackingFields(); } }
/// <summary> /// Removes the component of specified media type (if registered). /// It calls the dispose method of the media component too. /// </summary> /// <param name="mediaType">Type of the media.</param> internal void RemoveComponent(MediaType mediaType) { lock (ComponentSyncLock) { var component = default(MediaComponent); switch (mediaType) { case MediaType.Audio: component = m_Audio; m_Audio = null; break; case MediaType.Video: component = m_Video; m_Video = null; break; case MediaType.Subtitle: component = m_Subtitle; m_Subtitle = null; break; default: break; } component?.Dispose(); UpdateComponentBackingFields(); } }
/// <summary> /// Registers the component in this component set. /// </summary> /// <param name="component">The component.</param> /// <exception cref="ArgumentNullException">When component of the same type is already registered</exception> /// <exception cref="NotSupportedException">When MediaType is not supported</exception> /// <exception cref="ArgumentException">When the component is null</exception> internal void AddComponent(MediaComponent component) { lock (ComponentSyncLock) { if (component == null) { throw new ArgumentNullException(nameof(component)); } var errorMessage = $"A component for '{component.MediaType}' is already registered."; switch (component.MediaType) { case MediaType.Audio: if (m_Audio != null) { throw new ArgumentException(errorMessage); } m_Audio = component as AudioComponent; break; case MediaType.Video: if (m_Video != null) { throw new ArgumentException(errorMessage); } m_Video = component as VideoComponent; break; case MediaType.Subtitle: if (m_Subtitle != null) { throw new ArgumentException(errorMessage); } m_Subtitle = component as SubtitleComponent; break; default: throw new NotSupportedException($"Unable to register component with {nameof(MediaType)} '{component.MediaType}'"); } UpdateComponentBackingFields(); } }