X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2FTizen.Multimedia.MediaPlayer%2FPlayer%2FPlayer.Properties.cs;h=2af4ce993b5a56c64f1c7884fe356e0e17150163;hb=78474c49c7ec2f128fbccbcf6a5a7f6773ef344c;hp=8dc3f2460668909963cd5c9fd43b333c351762c8;hpb=f8bdc48239703c1569a50847197f980a9f1dc0e7;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git diff --git a/src/Tizen.Multimedia.MediaPlayer/Player/Player.Properties.cs b/src/Tizen.Multimedia.MediaPlayer/Player/Player.Properties.cs index 8dc3f24..2af4ce9 100644 --- a/src/Tizen.Multimedia.MediaPlayer/Player/Player.Properties.cs +++ b/src/Tizen.Multimedia.MediaPlayer/Player/Player.Properties.cs @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. @@ -24,21 +24,63 @@ using static Interop; namespace Tizen.Multimedia { - public partial class Player + /// + /// Represents properties for streaming buffering time. + /// + /// 5 + public struct PlayerBufferingTime { - private void RetrieveProperties() + /// + /// Initializes a new instance of the PlayerBufferingTime struct. + /// + /// A duration of buffering data that must be prerolled to start playback. + /// Except 0 and -1, setting at least 1000 milliseconds is recommended to ensure the normal buffering operation. + /// 0 : use platform default value which could be different depending on the streaming type and network status. (the initial value) + /// -1 : use current value. (since 5.5) + /// A duration of buffering data that must be prerolled to resume playback, + /// when player is internally paused for buffering. + /// Except 0 and -1, setting at least 1000 milliseconds is recommended to ensure the normal buffering operation. + /// 0 : use platform default value, which depends on the streaming type and network status. It is set as the initial value of this parameter. + /// If the player state is or , + /// this function will return correct time value instead of 0. (since 5.5) + /// -1 : use current value. (since 5.5) + /// 5 + public PlayerBufferingTime(int preBufferMillisecond = -1, int reBufferMillisecond = -1) { - NativePlayer.GetAudioLatencyMode(Handle, out _audioLatencyMode). - ThrowIfFailed("Failed to initialize the player"); + PreBufferMillisecond = preBufferMillisecond; + ReBufferMillisecond = reBufferMillisecond; + } - NativePlayer.IsLooping(Handle, out _isLooping).ThrowIfFailed("Failed to initialize the player"); + /// + /// Gets or sets the duration of buffering data that must be prerolled to start playback. + /// + /// 5 + public int PreBufferMillisecond + { + get; + set; } /// + /// Gets or sets the duration of buffering data that must be prerolled to resume playback + /// if player enters pause state for buffering. + /// + /// 5 + public int ReBufferMillisecond + { + get; + set; + } + } + /// 3 + public partial class Player + { + /// /// Gets the native handle of the player. /// /// An IntPtr that contains the native handle of the player. /// The player has already been disposed of. + /// 3 public IntPtr Handle { get @@ -51,6 +93,7 @@ namespace Tizen.Multimedia #region Network configuration private string _cookie = ""; private string _userAgent = ""; + private const int MinBufferingTime = -1; /// /// Gets or sets the cookie for streaming playback. @@ -59,11 +102,11 @@ namespace Tizen.Multimedia /// The player is not in the valid state. /// The player has already been disposed of. /// The value to set is null. + /// 3 public string Cookie { get { - Log.Info(PlayerLog.Tag, "get cookie : " + _cookie); return _cookie; } set @@ -76,7 +119,7 @@ namespace Tizen.Multimedia } NativePlayer.SetStreamingCookie(Handle, value, value.Length). - ThrowIfFailed("Failed to set the cookie to the player"); + ThrowIfFailed(this, "Failed to set the cookie to the player"); _cookie = value; } @@ -89,11 +132,11 @@ namespace Tizen.Multimedia /// The player is not in the valid state. /// The player has already been disposed of. /// The value to set is null. + /// 3 public string UserAgent { get { - Log.Info(PlayerLog.Tag, "get useragent : " + _userAgent); return _userAgent; } set @@ -106,11 +149,51 @@ namespace Tizen.Multimedia } NativePlayer.SetStreamingUserAgent(Handle, value, value.Length). - ThrowIfFailed("Failed to set the user agent to the player"); + ThrowIfFailed(this, "Failed to set the user agent to the player"); _userAgent = value; } } + + /// + /// Gets or sets the streaming buffering time. + /// + /// To set, the player must be in the state. + /// The player is not in the valid state. + /// The player has already been disposed of. + /// + /// is less than -1.
+ /// -or-
+ /// is less than -1.
+ ///
+ /// The required feature is not supported. + /// + /// 5 + public PlayerBufferingTime BufferingTime + { + get + { + ValidateNotDisposed(); + + NativePlayer.GetStreamingBufferingTime(Handle, out var PreBuffMillisecond, out var ReBuffMillisecond). + ThrowIfFailed(this, "Failed to get the buffering time of the player"); + + return new PlayerBufferingTime(PreBuffMillisecond, ReBuffMillisecond); + } + set + { + ValidatePlayerState(PlayerState.Idle); + + if (value.PreBufferMillisecond < MinBufferingTime || value.ReBufferMillisecond < MinBufferingTime) + { + throw new ArgumentOutOfRangeException(nameof(value), value, + $"invalid range, got { value.PreBufferMillisecond }, { value.ReBufferMillisecond }."); + } + + NativePlayer.SetStreamingBufferingTime(Handle, value.PreBufferMillisecond, value.ReBufferMillisecond). + ThrowIfFailed(this, "Failed to set the buffering time of the player"); + } + } #endregion /// @@ -118,6 +201,7 @@ namespace Tizen.Multimedia /// /// The current state of the player. /// The player has already been disposed of. + /// 3 public PlayerState State { get @@ -129,7 +213,8 @@ namespace Tizen.Multimedia return PlayerState.Preparing; } - NativePlayer.GetState(Handle, out var state).ThrowIfFailed("Failed to retrieve the state of the player"); + NativePlayer.GetState(Handle, out var state). + ThrowIfFailed(this, "Failed to retrieve the state of the player"); Debug.Assert(Enum.IsDefined(typeof(PlayerState), state)); @@ -137,8 +222,6 @@ namespace Tizen.Multimedia } } - private AudioLatencyMode _audioLatencyMode; - /// /// Gets or sets the audio latency mode. /// @@ -150,65 +233,61 @@ namespace Tizen.Multimedia /// /// The player has already been disposed of. /// The value is not valid. + /// 3 public AudioLatencyMode AudioLatencyMode { get { - Log.Info(PlayerLog.Tag, "get audio latency mode : " + _audioLatencyMode); - return _audioLatencyMode; + NativePlayer.GetAudioLatencyMode(Handle, out var value). + ThrowIfFailed(this, "Failed to get the audio latency mode of the player"); + + return value; } set { ValidateNotDisposed(); - if (_audioLatencyMode == value) - { - return; - } - ValidationUtil.ValidateEnum(typeof(AudioLatencyMode), value); + ValidationUtil.ValidateEnum(typeof(AudioLatencyMode), value, nameof(value)); NativePlayer.SetAudioLatencyMode(Handle, value). - ThrowIfFailed("Failed to set the audio latency mode of the player"); - - _audioLatencyMode = value; + ThrowIfFailed(this, "Failed to set the audio latency mode of the player"); } } - private bool _isLooping; - /// /// Gets or sets the looping state. /// /// true if the playback is looping; otherwise, false. The default value is false. /// The player has already been disposed of. + /// 3 public bool IsLooping { get { - Log.Info(PlayerLog.Tag, "get looping : " + _isLooping); - return _isLooping; + NativePlayer.IsLooping(Handle, out var value). + ThrowIfFailed(this, "Failed to get the looping state of the player"); + + return value; } set { ValidateNotDisposed(); - if (_isLooping == value) - { - return; - } - - NativePlayer.SetLooping(Handle, value).ThrowIfFailed("Failed to set the looping state of the player"); - - _isLooping = value; + NativePlayer.SetLooping(Handle, value). + ThrowIfFailed(this, "Failed to set the looping state of the player"); } } #region Display methods + + private PlayerDisplaySettings _displaySettings; + /// /// Gets the display settings. /// /// A that specifies the display settings. - public PlayerDisplaySettings DisplaySettings { get; } + /// 3 + public PlayerDisplaySettings DisplaySettings => _displaySettings; private Display _display; @@ -233,10 +312,16 @@ namespace Tizen.Multimedia /// Gets or sets the display. ///
/// A that specifies the display. - /// The player must be in the state. + /// + /// The player must be in the state.
+ /// The raw video feature(http://tizen.org/feature/multimedia.raw_video) is required if + /// the display is created with . + ///
/// The player has already been disposed of. /// The value has already been assigned to another player. /// The player is not in the valid state. + /// The required feature is not supported. + /// 3 public Display Display { get @@ -247,6 +332,11 @@ namespace Tizen.Multimedia { ValidatePlayerState(PlayerState.Idle); + if (value != null && value.HasMediaView) + { + ValidationUtil.ValidateFeatureSupported(PlayerFeatures.RawVideo); + } + if (value?.Owner != null) { if (ReferenceEquals(this, value.Owner)) @@ -256,7 +346,8 @@ namespace Tizen.Multimedia throw new ArgumentException("The display has already been assigned to another."); } - SetDisplay(value).ThrowIfFailed("Failed to set the display to the player"); + + SetDisplay(value).ThrowIfFailed(this, "Failed to configure display of the player"); ReplaceDisplay(value); } @@ -287,6 +378,7 @@ namespace Tizen.Multimedia /// Gets the track info for the audio. /// /// A for audio. + /// 3 public PlayerTrackInfo AudioTrackInfo { get @@ -305,6 +397,7 @@ namespace Tizen.Multimedia /// Gets the track info for the subtitle. /// /// A for the subtitle. + /// 3 public PlayerTrackInfo SubtitleTrackInfo { get @@ -323,6 +416,7 @@ namespace Tizen.Multimedia /// Gets the stream information. /// /// A for this player. + /// 3 public StreamInfo StreamInfo { get @@ -335,20 +429,21 @@ namespace Tizen.Multimedia } } - private readonly AudioEffect _audioEffect; + private AudioEffect _audioEffect; /// /// Gets the audio effect. /// /// http://tizen.org/feature/multimedia.custom_audio_effect /// The required feature is not supported. + /// 3 public AudioEffect AudioEffect { get { if (_audioEffect == null) { - throw new NotSupportedException($"The feature({Features.AudioEffect}) is not supported."); + throw new NotSupportedException($"The feature({PlayerFeatures.AudioEffect}) is not supported."); } return _audioEffect; @@ -360,12 +455,13 @@ namespace Tizen.Multimedia /// /// true if the player is muted; otherwise, false. /// The player has already been disposed of. + /// 3 public bool Muted { get { - bool value = false; - NativePlayer.IsMuted(Handle, out value).ThrowIfFailed("Failed to get the mute state of the player"); + NativePlayer.IsMuted(Handle, out var value). + ThrowIfFailed(this, "Failed to get the mute state of the player"); Log.Info(PlayerLog.Tag, "get mute : " + value); @@ -373,7 +469,7 @@ namespace Tizen.Multimedia } set { - NativePlayer.SetMute(Handle, value).ThrowIfFailed("Failed to set the mute state of the player"); + NativePlayer.SetMute(Handle, value).ThrowIfFailed(this, "Failed to set the mute state of the player"); } } @@ -387,13 +483,15 @@ namespace Tizen.Multimedia /// -or-
/// is greater than 1.0. /// + /// 3 public float Volume { get { float value = 0.0F; NativePlayer.GetVolume(Handle, out value, out value). - ThrowIfFailed("Failed to get the volume of the player"); + ThrowIfFailed(this, "Failed to get the volume of the player"); + return value; } set @@ -405,7 +503,177 @@ namespace Tizen.Multimedia } NativePlayer.SetVolume(Handle, value, value). - ThrowIfFailed("Failed to set the volume of the player"); + ThrowIfFailed(this, "Failed to set the volume of the player"); + } + } + + /// + /// Gets or sets the audio-only state. + /// + /// true if the playback is audio-only mode; otherwise, false. The default value is false. + /// The must be in the , + /// , or state. + /// The player is not in the valid state. + /// The player has already been disposed of. + /// 5 + public bool IsAudioOnly + { + get + { + ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused); + NativePlayer.IsAudioOnly(Handle, out var value). + ThrowIfFailed(this, "Failed to get the audio-only state of the player"); + return value; + } + set + { + ValidateNotDisposed(); + ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused); + NativePlayer.SetAudioOnly(Handle, value). + ThrowIfFailed(this, "Failed to set the audio-only state of the player"); + } + } + + /// + /// Gets or sets the player's replaygain state. + /// + /// If the replaygain status is true, replaygain is applied (if contents has a replaygain tag); + /// otherwise, the replaygain is not affected by tag and properties. + /// The player has already been disposed of. + /// The player is not in the valid state. + /// 5 + public bool ReplayGain + { + get + { + ValidateNotDisposed(); + NativePlayer.IsReplayGain(Handle, out var value). + ThrowIfFailed(this, "Failed to get the replaygain of the player"); + return value; + } + set + { + ValidateNotDisposed(); + NativePlayer.SetReplayGain(Handle, value). + ThrowIfFailed(this, "Failed to set the replaygain of the player"); + } + } + + /// + /// Gets or sets the audio pitch. + /// + /// The value indicating whether or not AudioPitch is enabled. The default is false. + /// This function is used for audio content only. + /// To set, the player must be in the state. + /// The player is not in the valid state. + /// The player has already been disposed of. + /// + /// 6 + public bool AudioPitchEnabled + { + get + { + ValidateNotDisposed(); + NativePlayer.IsAudioPitchEnabled(Handle, out var value). + ThrowIfFailed(this, "Failed to get whether the audio pitch is enabled or not"); + return value; + } + + set + { + ValidateNotDisposed(); + ValidatePlayerState(PlayerState.Idle); + + NativePlayer.SetAudioPitchEnabled(Handle, value). + ThrowIfFailed(this, "Failed to enable the audio pitch of the player"); + } + } + + /// + /// Gets or sets the audio pitch value. + /// + /// The audio stream pitch value. The default is 1. + /// Enabling pitch control could increase the CPU usage on some devices. + /// This function is used for audio content only. + /// A pitch is not enabled. + /// The player has already been disposed of. + /// + /// value is less than 0.5. + /// -or-
+ /// value is greater than 2.0.
+ ///
+ /// + /// 6 + public float AudioPitch + { + get + { + ValidateNotDisposed(); + + if (AudioPitchEnabled == false) + { + throw new InvalidOperationException("An audio pitch is not enabled."); + } + + NativePlayer.GetAudioPitch(Handle, out var value). + ThrowIfFailed(this, "Failed to get the audio pitch"); + + return value; + } + + set + { + ValidateNotDisposed(); + + if (AudioPitchEnabled == false) + { + throw new InvalidOperationException("An audio pitch is not enabled."); + } + + if (value < 0.5F || 2.0F < value) + { + throw new ArgumentOutOfRangeException(nameof(value), value, "Valid value is 0.5 to 2.0"); + } + + NativePlayer.SetAudioPitch(Handle, value).ThrowIfFailed(this, "Failed to set the audio pitch"); + } + } + + private SphericalVideo _sphericalVideo; + + /// + /// Gets the spherical video settings. + /// + /// 5 + public SphericalVideo SphericalVideo + { + get + { + if (_sphericalVideo == null) + { + _sphericalVideo = new SphericalVideo(this); + } + + return _sphericalVideo; + } + } + + private AdaptiveVariants _adaptiveVariants; + + /// + /// Gets the adaptive variants settings. + /// + /// 5 + public AdaptiveVariants AdaptiveVariants + { + get + { + if (_adaptiveVariants == null) + { + _adaptiveVariants = new AdaptiveVariants(this); + } + + return _adaptiveVariants; } } }