Prefix:4.0.0\r
-Suffix:preview1-00154\r
-Number:154\r
-VCS:102b24e9e33a8399bb482192ea3516b6c02aa447\r
+Suffix:preview1-00161\r
+Number:161\r
+VCS:876669c9641ab6bd821fc6cf27e98f75e0757c4c\r
+++ /dev/null
-<?xml version="1.0"?>\r
-<doc>\r
- <assembly>\r
- <name>Tizen.Multimedia.Recorder</name>\r
- </assembly>\r
- <members>\r
- <member name="T:Tizen.Multimedia.AudioStreamDeliveredEventArgs">\r
- <summary>\r
- An extended EventArgs class containing details of audio stream.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.AudioStreamDeliveredEventArgs.Stream">\r
- <summary>\r
- The audio stream data.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.AudioStreamDeliveredEventArgs.StreamLength">\r
- <summary>\r
- The length of audio stream data.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.AudioStreamDeliveredEventArgs.Type">\r
- <summary>\r
- The audio format type.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.AudioStreamDeliveredEventArgs.Channel">\r
- <summary>\r
- The number of channels.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.AudioStreamDeliveredEventArgs.RecordingTime">\r
- <summary>\r
- The recording time of the stream buffer in milliseconds.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="T:Tizen.Multimedia.MuxedStreamDeliveredEventArgs">\r
- <summary>\r
- An extended EventArgs class containing details of muxed stream(Audio + Video).\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.MuxedStreamDeliveredEventArgs.Stream">\r
- <summary>\r
- The muexed stream data.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.MuxedStreamDeliveredEventArgs.StreamLength">\r
- <summary>\r
- The length of muxed stream data.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.MuxedStreamDeliveredEventArgs.Offset">\r
- <summary>\r
- The offset of the stream data.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="T:Tizen.Multimedia.Recorder">\r
- <summary>\r
- The recorder class provides methods to create audio/video recorder,\r
- to start, stop and save the recorded content. It also provides methods\r
- to get/set various attributes and capabilities of recorder.\r
- </summary>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.#ctor">\r
- <summary>\r
- Audio recorder constructor.\r
- </summary>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.#ctor(Tizen.Multimedia.Camera)">\r
- <summary>\r
- Video recorder constructor.\r
- </summary>\r
- <param name="camera">\r
- The camera object.\r
- </param>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Finalize">\r
- <summary>\r
- Recorder destructor.\r
- </summary>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Dispose(System.Boolean)">\r
- <summary>\r
- Releases the unmanaged resources used by the Recorder.\r
- </summary>\r
- <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Dispose">\r
- <summary>\r
- Releases all resources used by the Recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.ErrorOccurred">\r
- <summary>\r
- Event that occurs when an error occurs during recorder operation.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.Interrupted">\r
- <summary>\r
- Event that occurs when recorder is interrupted.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.StateChanged">\r
- <summary>\r
- This event occurs when recorder state is changed.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.RecordingProgress">\r
- <summary>\r
- Event that occurs when recording information changes.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.AudioStreamDelivered">\r
- <summary>\r
- Event that occurs when audio stream data is being delivered.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.RecordingLimitReached">\r
- <summary>\r
- Event that occurs when recording limit is reached.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="E:Tizen.Multimedia.Recorder.MuxedStreamDelivered">\r
- <summary>\r
- Event that occurs when muxed stream data is being delivered.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.Recorder.Feature">\r
- <summary>\r
- Gets the various recorder features.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.Recorder.Setting">\r
- <summary>\r
- Get/Set the various recorder settings.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.Recorder.State">\r
- <summary>\r
- The current state of the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>A <see cref="T:Tizen.Multimedia.RecorderState"/> that specifies the state of recorder.</value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Prepare">\r
- <summary>\r
- Prepare the media recorder for recording.\r
- The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Created"/> state.\r
- After this method is finished without any exception,\r
- The state of recorder will be changed to <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- Before calling the function, it is required to set AudioEncoder,\r
- videoencoder and fileformat properties of recorder.\r
- </remarks>\r
- <exception cref="T:System.InvalidOperationException">In case of any invalid operations.</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Unprepare">\r
- <summary>\r
- Resets the media recorder.\r
- The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
- After this method is finished without any exception,\r
- The state of recorder will be changed to <see cref="F:Tizen.Multimedia.RecorderState.Created"/> state.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <exception cref="T:System.InvalidOperationException">In case of any invalid operations.</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Start">\r
- <summary>\r
- Starts the recording.\r
- The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
- After this method is finished without any exception,\r
- The state of recorder will be changed to <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- If file path has been set to an existing file, this file is removed automatically and updated by new one.\r
- In the video recorder, some preview format does not support record mode. It will return InvalidOperation error.\r
- You should use default preview format or CameraPixelFormatNv12 in the record mode.\r
- The filename should be set before this function is invoked.\r
- </remarks>\r
- <privilege>\r
- http://tizen.org/privilege/recorder\r
- </privilege>\r
- <exception cref="T:System.InvalidOperationException">In case of any invalid operations.</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- <exception cref="T:System.UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Pause">\r
- <summary>\r
- Pause the recording.\r
- The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state.\r
- After this method is finished without any exception,\r
- The state of recorder will be changed to <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- Recording can be resumed with Start().\r
- </remarks>\r
- <privilege>\r
- http://tizen.org/privilege/recorder\r
- </privilege>\r
- <exception cref="T:System.InvalidOperationException">In case of any invalid operations.</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- <exception cref="T:System.UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Commit">\r
- <summary>\r
- Stops recording and saves the result.\r
- The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> or <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
- After this method is finished without any exception,\r
- The state of recorder will be changed to <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <privilege>\r
- http://tizen.org/privilege/recorder\r
- </privilege>\r
- <exception cref="T:System.InvalidOperationException">In case of any invalid operations.</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- <exception cref="T:System.UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.Cancel">\r
- <summary>\r
- Cancels the recording.\r
- The recording data is discarded and not written in the recording file.\r
- The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> or <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
- After this method is finished without any exception,\r
- The state of recorder will be changed to <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <privilege>\r
- http://tizen.org/privilege/recorder\r
- </privilege>\r
- <exception cref="T:System.InvalidOperationException">In case of any invalid operations.</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- <exception cref="T:System.UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>\r
- </member>\r
- <member name="M:Tizen.Multimedia.Recorder.SetAudioStreamPolicy(Tizen.Multimedia.AudioStreamPolicy)">\r
- <summary>\r
- Sets the audio stream policy.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <param name="policy">Policy.</param>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderAudioCodec">\r
- <summary>\r
- Enumeration for Audio Codec.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioCodec.Disable">\r
- <summary>\r
- Disable Audio track.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioCodec.Amr">\r
- <summary>\r
- AMR codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioCodec.Aac">\r
- <summary>\r
- AAC codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioCodec.Vorbis">\r
- <summary>\r
- Vorbis codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioCodec.Pcm">\r
- <summary>\r
- PCM codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioCodec.Mp3">\r
- <summary>\r
- The mp3 codec.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderAudioDevice">\r
- <summary>\r
- Enumeration for Audio capture devices.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioDevice.Mic">\r
- <summary>\r
- Capture audio from Mic device.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderAudioDevice.Modem">\r
- <summary>\r
- Capture audio from modem.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderFileFormat">\r
- <summary>\r
- Enumeration for the file container format.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.ThreeGp">\r
- <summary>\r
- 3GP file format.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.Mp4">\r
- <summary>\r
- MP4 file format.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.Amr">\r
- <summary>\r
- AMR file format.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.Adts">\r
- <summary>\r
- ADTS file format.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.Wav">\r
- <summary>\r
- WAV file format.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.Ogg">\r
- <summary>\r
- OGG file format.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderFileFormat.M2ts">\r
- <summary>\r
- M2TS file format.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderPolicy">\r
- <summary>\r
- Enumeration for the recorder policy.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderPolicy.None">\r
- <summary>\r
- None.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderPolicy.Security">\r
- <summary>\r
- Security policy.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderPolicy.ResourceConflict">\r
- <summary>\r
- Resource conflict policy.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecordingLimitType">\r
- <summary>\r
- Enumeration for the recording limit.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecordingLimitType.Time">\r
- <summary>\r
- Time limit in seconds of recording file\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecordingLimitType.Size">\r
- <summary>\r
- Size limit in KB(KiloBytes) of recording file.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecordingLimitType.Space">\r
- <summary>\r
- No free space in storage.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderState">\r
- <summary>\r
- Enumeration for recorder states.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderState.None">\r
- <summary>\r
- Recorder is not created.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderState.Created">\r
- <summary>\r
- Recorder is created, but not prepared.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderState.Ready">\r
- <summary>\r
- Recorder is ready to record. In case of video recorder,\r
- preview display will be shown.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderState.Recording">\r
- <summary>\r
- Recorder is recording media.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderState.Paused">\r
- <summary>\r
- Recorder is paused while recording media.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderVideoCodec">\r
- <summary>\r
- Enumeration for video codec.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderVideoCodec.H263">\r
- <summary>\r
- H263 codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderVideoCodec.H264">\r
- <summary>\r
- H264 codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderVideoCodec.Mpeg4">\r
- <summary>\r
- MPEG4 codec.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderVideoCodec.Theora">\r
- <summary>\r
- Theora codec.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderErrorCode">\r
- <summary>\r
- Enumeration for recorder failure error.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderErrorCode.DeviceError">\r
- <summary>\r
- Device Error.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderErrorCode.InvalidOperation">\r
- <summary>\r
- Internal error.\r
- </summary>\r
- </member>\r
- <member name="F:Tizen.Multimedia.RecorderErrorCode.OutOfMemory">\r
- <summary>\r
- Out of memory.\r
- </summary>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderFeatures">\r
- <summary>\r
- The camera setting class provides methods/properties to get and\r
- set basic camera attributes.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderFeatures.SupportedFileFormats">\r
- <summary>\r
- Retrieves all the file formats supported by the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <returns>\r
- It returns a list containing all the supported <see cref="T:Tizen.Multimedia.RecorderFileFormat"/>.\r
- </returns>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderFeatures.SupportedAudioEncodings">\r
- <summary>\r
- Retrieves all the audio encoders supported by the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <returns>\r
- It returns a list containing all the supported <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/>.\r
- </returns>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderFeatures.SupportedVideoEncodings">\r
- <summary>\r
- Retrieves all the video encoders supported by the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <returns>\r
- It returns a list containing all the supported <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/>.\r
- by recorder.\r
- </returns>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderFeatures.SupportedVideoResolutions">\r
- <summary>\r
- Retrieves all the video resolutions supported by the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <returns>\r
- It returns videoresolution list containing the width and height of\r
- different resolutions supported by recorder.\r
- </returns>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderInterruptedEventArgs">\r
- <summary>\r
- An extended Eventargs class which contains interrupted policy details, previous and current\r
- state of the recorder.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderInterruptedEventArgs.Policy">\r
- <summary>\r
- The policy that interrupted the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderInterruptedEventArgs.Previous">\r
- <summary>\r
- The previous state of the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderInterruptedEventArgs.Current">\r
- <summary>\r
- The current state of the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderSettings">\r
- <summary>\r
- The camera setting class provides methods/properties to get and\r
- set basic camera attributes.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.AudioChannel">\r
- <summary>\r
- The number of audio channel.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>\r
- For mono recording, set channel to 1.\r
- For stereo recording, set channel to 2.\r
- </value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.AudioDevice">\r
- <summary>\r
- The audio device for recording.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>A <see cref="T:Tizen.Multimedia.RecorderAudioDevice"/> that specifies the type of audio device.</value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.AudioLevel">\r
- <summary>\r
- Get the peak audio input level in dB\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- 0dB indicates maximum input level, -300dB indicates minimum input level.\r
- </remarks>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.AudioSampleRate">\r
- <summary>\r
- The sampling rate of an audio stream in hertz.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.AudioBitRate">\r
- <summary>\r
- The bitrate of an audio encoder in bits per second.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.VideoBitRate">\r
- <summary>\r
- The bitrate of an video encoder in bits per second.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.AudioCodec">\r
- <summary>\r
- The audio codec for encoding an audio stream.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>A <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/> that specifies the type of audio codec.</value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.VideoCodec">\r
- <summary>\r
- The video codec for encoding video stream.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>A <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/> that specifies the type of video codec.</value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.FileFormat">\r
- <summary>\r
- The file format for recording media stream.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>A <see cref="T:Tizen.Multimedia.RecorderFileFormat"/> that specifies the file format.</value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.FilePath">\r
- <summary>\r
- The file path to record.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- If the same file already exists in the file system, then old file\r
- will be overwritten.\r
- </remarks>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.SizeLimit">\r
- <summary>\r
- The maximum size of a recording file in KB(kilobytes). If 0, means\r
- unlimited recording size.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- After reaching the limitation, the data which is being recorded will\r
- be discarded and not written to the file.\r
- The recorder state must be in 'Ready' or 'Created' state.\r
- </remarks>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.TimeLimit">\r
- <summary>\r
- The time limit of a recording file in Seconds. If 0, means unlimited recording\r
- time.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- After reaching the limitation, the data which is being recorded will\r
- be discarded and not written to the file.\r
- The recorder state must be in 'Ready' or 'Created' state.\r
- </remarks>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.Mute">\r
- <summary>\r
- The mute state of a recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.MotionRate">\r
- <summary>\r
- The video recording motion rate\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <remarks>\r
- The attribute is valid only in a video recorder.\r
- If the rate is in range of 0-1, video is recorded in a slow motion mode.\r
- If the rate is bigger than 1, video is recorded in a fast motion mode.\r
- </remarks>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.OrientationTag">\r
- <summary>\r
- The orientation in a video metadata tag.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <value>A <see cref="T:Tizen.Multimedia.Rotation"/> that specifies the type of orientation.</value>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderSettings.VideoResolution">\r
- <summary>\r
- Resolution of the video.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- <exception cref="T:System.ArgumentException">In case of invalid parameters</exception>\r
- <exception cref="T:System.ObjectDisposedException">The camera already has been disposed.</exception>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecorderStateChangedEventArgs">\r
- <summary>\r
- An extended EventArgs class which contains details about previous and current state\r
- of the recorder when its state is changed.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderStateChangedEventArgs.Previous">\r
- <summary>\r
- Previous state of the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderStateChangedEventArgs.Current">\r
- <summary>\r
- Current state of the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecorderStateChangedEventArgs.IsStateChangedByPolicy">\r
- <summary>\r
- true if the state changed by policy such as Resource Conflict or Security, otherwise false\r
- in normal state change.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecordingErrorOccurredEventArgs">\r
- <summary>\r
- An extended EventArgs class which contains details about error status and\r
- state of the recorder when it failed.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecordingErrorOccurredEventArgs.Error">\r
- <summary>\r
- The error code.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecordingErrorOccurredEventArgs.State">\r
- <summary>\r
- The state of the recorder.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecordingLimitReachedEventArgs">\r
- <summary>\r
- An extended EventArgs class containing details about the recording limit.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecordingLimitReachedEventArgs.Type">\r
- <summary>\r
- The limitation type.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="T:Tizen.Multimedia.RecordingProgressEventArgs">\r
- <summary>\r
- An extened EventArgs class which contain the details of current recording status.\r
- </summary>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecordingProgressEventArgs.ElapsedTime">\r
- <summary>\r
- The time of recording in milliseconds.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- <member name="P:Tizen.Multimedia.RecordingProgressEventArgs.FileSize">\r
- <summary>\r
- The size of the recording file in Kilobyte.\r
- </summary>\r
- <since_tizen> 3 </since_tizen>\r
- </member>\r
- </members>\r
-</doc>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<doc>\r
+ <assembly>\r
+ <name>Tizen.Applications.Shortcut</name>\r
+ </assembly>\r
+ <members>\r
+ <member name="T:Interop.Shortcut.ErrorCode">\r
+ <summary>\r
+ Enumeration for values of shortcut response types.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.None">\r
+ <summary>\r
+ Successful\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.InvalidParameter">\r
+ <summary>\r
+ Invalid function parameter\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.OutOfMemory">\r
+ <summary>\r
+ Out of memory\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.PermissionDenied">\r
+ <summary>\r
+ Permission denied\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.IoError">\r
+ <summary>\r
+ I/O Error\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.NotSupported">\r
+ <summary>\r
+ Not supported\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.ResourceBusy">\r
+ <summary>\r
+ Device or resource busy\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.NoSpace">\r
+ <summary>\r
+ There is no space to add a new shortcut\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.Exist">\r
+ <summary>\r
+ Shortcut is already added\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.Fault">\r
+ <summary>\r
+ Unrecoverable error\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.NotExist">\r
+ <summary>\r
+ Not exist shortcut\r
+ </summary>\r
+ </member>\r
+ <member name="F:Interop.Shortcut.ErrorCode.COMM">\r
+ <summary>\r
+ Connection not established or communication problem\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.HomeShortcutAddedInfo">\r
+ <summary>\r
+ A class that contains shortcut information.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.HomeShortcutAddedInfo.AppId">\r
+ <summary>\r
+ Gets the name of application.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.HomeShortcutAddedInfo.Uri">\r
+ <summary>\r
+ Gets the specific information for creating a new shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutAddedInfo">\r
+ <summary>\r
+ A class for getting information of the Shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutAddedInfo.ShortcutName">\r
+ <summary>\r
+ Gets the name of the created shortcut icon.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutAddedInfo.IconPath">\r
+ <summary>\r
+ Gets the absolute path of an icon file for this shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutAddedInfo.IsAllowDuplicate">\r
+ <summary>\r
+ Gets a value indicating whether to allow or not to allow duplication.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutDeletedInfo">\r
+ <summary>\r
+ A class for getting information of the Shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutDeletedInfo.AppId">\r
+ <summary>\r
+ Gets the name of package.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutDeletedInfo.ShortcutName">\r
+ <summary>\r
+ Gets the name of the created shortcut icon.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutError">\r
+ <summary>\r
+ Enumeration for values of shortcut response types.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.None">\r
+ <summary>\r
+ Successful.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.InvalidParameter">\r
+ <summary>\r
+ Invalid function parameter.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.OutOfMemory">\r
+ <summary>\r
+ Out of memory.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.PermissionDenied">\r
+ <summary>\r
+ Permission denied.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.IoError">\r
+ <summary>\r
+ I/O Error.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.NotSupported">\r
+ <summary>\r
+ Not supported.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.ResourceBusy">\r
+ <summary>\r
+ Device or resource busy.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.NoSpace">\r
+ <summary>\r
+ There is no space to add a new shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.Exist">\r
+ <summary>\r
+ Shortcut is already added.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.Fault">\r
+ <summary>\r
+ Unrecoverable error.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.NotExist">\r
+ <summary>\r
+ Not exist shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutError.COMM">\r
+ <summary>\r
+ Connection not established or communication problem.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutAdded">\r
+ <summary>\r
+ The callback function that is invoked when add request occurred\r
+ </summary>\r
+ <param name="args">Object that contain shortcut info to add.</param>\r
+ <returns>The result of handling a shortcut add request</returns>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutDeleted">\r
+ <summary>\r
+ The callback function that is invoked when delete request occurred\r
+ </summary>\r
+ <param name="args">Object that contain shortcut info to delete.</param>\r
+ <returns>The result of handling a shortcut delete request</returns>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutEventManager">\r
+ <summary>\r
+ This class provides a way to register callback function for shortcut add, delete events.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutEventManager.RegisterEventHandler(Tizen.Applications.Shortcut.ShortcutAdded)">\r
+ <summary>\r
+ Registers a callback function to listen requests from applications.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="addedEvent">The callback function pointer that is invoked when Add() is requested</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <remarks>\r
+ Previous registered delegate function should be unregister.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutEventManager.RegisterEventHandler(Tizen.Applications.Shortcut.ShortcutDeleted)">\r
+ <summary>\r
+ Registers a callback function to listen requests from applications.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="deletedEvent">The callback function pointer that is invoked when Delete() is requested</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <remarks>\r
+ Previous registered delegate function should be unregister.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutEventManager.UnregisterEventHandler(Tizen.Applications.Shortcut.ShortcutAdded)">\r
+ <summary>\r
+ Unregisters a callback for the shortcut request.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="addedEvent">The callback function pointer that used for RegisterCallback</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutEventManager.UnregisterEventHandler(Tizen.Applications.Shortcut.ShortcutDeleted)">\r
+ <summary>\r
+ Unregisters a callback for the shortcut request.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="deletedEvent">The callback function pointer that used for RegisterCallback</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutEventManager.GetTemplateList(System.String)">\r
+ <summary>\r
+ Gets the preset list of shortcut template from the installed package.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="appId">Application ID.</param>\r
+ <returns>The List of ShortcutTemplate.</returns>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutTemplate">\r
+ <summary>\r
+ A class that contains the preset list of shortcut template from the installed package.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutTemplate.AppId">\r
+ <summary>\r
+ Gets the Application ID.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutTemplate.ShortcutName">\r
+ <summary>\r
+ Gets the name of the created shortcut icon.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutTemplate.IconPath">\r
+ <summary>\r
+ Gets the absolute path of an icon file for this shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutTemplate.ExtraKey">\r
+ <summary>\r
+ Gets the user data. A property of shortcut element in manifest file.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutTemplate.ExtraData">\r
+ <summary>\r
+ Gets the user data. A property of shortcut element in manifest file.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.WidgetShortcutAddedInfo">\r
+ <summary>\r
+ A class that contains information about the widget.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.WidgetShortcutAddedInfo.WidgetId">\r
+ <summary>\r
+ Gets the Widget ID.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.WidgetShortcutAddedInfo.WidgetSize">\r
+ <summary>\r
+ Gets the size of widget.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.WidgetShortcutAddedInfo.Period">\r
+ <summary>\r
+ Gets the Update period in seconds.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.HomeShortcutInfo">\r
+ <summary>\r
+ A class that contains shortcut information.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.HomeShortcutInfo.Uri">\r
+ <summary>\r
+ Gets or sets the specific information for delivering to the viewer for creating a shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutWidgetSize">\r
+ <summary>\r
+ Enumeration for sizes of shortcut widget.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.WidgetDefault">\r
+ <summary>\r
+ Type mask for the normal mode widget , don't use this value for specific size.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget1by1">\r
+ <summary>\r
+ 1by1\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget2by1">\r
+ <summary>\r
+ 2by1\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget2by2">\r
+ <summary>\r
+ 2by2\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget4by1">\r
+ <summary>\r
+ 4by1\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget4by2">\r
+ <summary>\r
+ 4by2\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget4by3">\r
+ <summary>\r
+ 4by3\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget4by4">\r
+ <summary>\r
+ 4by4\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget4by5">\r
+ <summary>\r
+ 4by5\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Widget4by6">\r
+ <summary>\r
+ 4by6\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.EasyDefault">\r
+ <summary>\r
+ Type mask for the easy mode widget, don't use this value for specific size.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Easy1by1">\r
+ <summary>\r
+ Easy mode 1by1\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Easy3by1">\r
+ <summary>\r
+ Easy mode 3by2\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutWidgetSize.Easy3by3">\r
+ <summary>\r
+ Easy mode 3by3\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutType">\r
+ <summary>\r
+ Enumeration for shortcut types.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutType.LaunchByApp">\r
+ <summary>\r
+ Launch the application itself.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Applications.Shortcut.ShortcutType.LaunchByUri">\r
+ <summary>\r
+ Launch the application with the given data(URI).\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutInfo">\r
+ <summary>\r
+ A class to get information of the Shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutInfo.ShortcutName">\r
+ <summary>\r
+ Gets or sets the name of the created shortcut icon.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutInfo.IconPath">\r
+ <summary>\r
+ Gets or sets the absolute path of an icon file for this shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.ShortcutInfo.IsAllowDuplicate">\r
+ <summary>\r
+ Gets or sets a value indicating whether to allow or not to allow duplication.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.ShortcutManager">\r
+ <summary>\r
+ This class provides the some functions to add, delete shortcut.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutManager.Add(Tizen.Applications.Shortcut.HomeShortcutInfo)">\r
+ <summary>\r
+ Adds a shortcut on home-screen.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="shortcut">Object that contain shortcut info.</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutManager.Add(Tizen.Applications.Shortcut.WidgetShortcutInfo)">\r
+ <summary>\r
+ Adds a shortcut on home-screen.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="shortcut">Object that contain shortcut info.</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutManager.Delete(System.String)">\r
+ <summary>\r
+ Removes a shortcut from home by ShortcutName.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="shortcutName">Shortcut name string.</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Applications.Shortcut.ShortcutManager.Delete(Tizen.Applications.Shortcut.ShortcutInfo)">\r
+ <summary>\r
+ Removes a shortcut from home by ShortcutInfo.\r
+ </summary>\r
+ <since_tizen> 3 </since_tizen>\r
+ <param name="shortcut">Object that contain shortcut info.</param>\r
+ <feature>http://tizen.org/feature/shortcut </feature>\r
+ <privilege>http://tizen.org/privilege/shortcut</privilege>\r
+ <exception cref="T:System.ArgumentException">Thrown when argument is invalid.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Thrown in case of permission denied.</exception>\r
+ <exception cref="T:System.InvalidOperationException">Thrown in case of any internal error.</exception>\r
+ <exception cref="T:System.NotSupportedException">Thrown when Shortcut is not supported.</exception>\r
+ </member>\r
+ <member name="T:Tizen.Applications.Shortcut.WidgetShortcutInfo">\r
+ <summary>\r
+ A class that contains information about the widget.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.WidgetShortcutInfo.WidgetId">\r
+ <summary>\r
+ Gets or sets the Widget ID.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.WidgetShortcutInfo.WidgetSize">\r
+ <summary>\r
+ Gets or sets the size of widget.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Applications.Shortcut.WidgetShortcutInfo.Period">\r
+ <summary>\r
+ Gets or sets the Update period in seconds.\r
+ </summary>\r
+ </member>\r
+ </members>\r
+</doc>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<doc>\r
+ <assembly>\r
+ <name>Tizen.Multimedia.Recorder</name>\r
+ </assembly>\r
+ <members>\r
+ <member name="T:Tizen.Multimedia.AudioRecorder">\r
+ <summary>\r
+ Provides the ability to control audio recording.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.AudioRecorder.#ctor(Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.AudioRecorder"/> class with the specified audio codec and file format.\r
+ </summary>\r
+ <param name="audioCodec">The codec for audio encoding.</param>\r
+ <param name="fileFormat">The format of result file.</param>\r
+ <feature>http://tizen.org/feature/microphone</feature>\r
+ <exception cref="T:System.InvalidOperationException">An internal error occurred.</exception>\r
+ <exception cref="T:System.NotSupportedException">\r
+ A required feature is not supported.\n\r
+ -or-\n\r
+ <paramref name="audioCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified audio codec.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentException">\r
+ <paramref name="audioCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not valid.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentOutOfRangeException">\r
+ <paramref name="audioCodec"/> is <see cref="F:Tizen.Multimedia.RecorderAudioCodec.None"/>\r
+ </exception>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderAudioCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.AudioRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.AudioRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)">\r
+ <summary>\r
+ Sets the audio codec and the file format for recording.\r
+ </summary>\r
+ <param name="audioCodec">The codec for audio encoding.</param>\r
+ <param name="fileFormat">The format of result file.</param>\r
+ <exception cref="T:System.NotSupportedException">\r
+ <paramref name="audioCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified audio codec.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentException">\r
+ <paramref name="audioCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not valid.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentOutOfRangeException">\r
+ <paramref name="audioCodec"/> is <see cref="F:Tizen.Multimedia.RecorderAudioCodec.None"/>\r
+ </exception>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderAudioCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.Start(System.String)"/>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.AudioStreamStoringEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.AudioStreamStoring"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.AudioStreamStoringEventArgs.Stream">\r
+ <summary>\r
+ Gets the audio stream buffer.\r
+ </summary>\r
+ <remarks>\r
+ If the stream is modified in the event handler, the modified data will be stored.\r
+ \n\r
+ The buffer is only valid in the event.\n\r
+ Any attempt to access to this buffer after the event ends will throw an exception.\r
+ </remarks>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.AudioStreamStoringEventArgs.Type">\r
+ <summary>\r
+ Gets the audio format type.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.AudioStreamStoringEventArgs.Channels">\r
+ <summary>\r
+ Gets the number of channels.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.AudioStreamStoringEventArgs.Timestamp">\r
+ <summary>\r
+ Gets the timestamp(PTS) of stream buffer in milliseconds.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.MuxedStreamDeliveredEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.MuxedStreamDelivered"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.MuxedStreamDeliveredEventArgs.Stream">\r
+ <summary>\r
+ Gets the stream buffer that will be recordered.\r
+ </summary>\r
+ <remarks>\r
+ This buffer is read-only and only valid in the event.\n\r
+ Any attempt to access to this buffer after the event ends will throw an exception.\r
+ </remarks>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.MuxedStreamDeliveredEventArgs.Offset">\r
+ <summary>\r
+ The file offset where the buffer will be written.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.Recorder">\r
+ <summary>\r
+ Recorder is a base class for audio and video recorders that\r
+ provides the ability to control the recording of a multimedia content.\n\r
+ \n\r
+ Simple audio and audio/video are supported.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats">\r
+ <summary>\r
+ Gets the file formats that the current device supports.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs">\r
+ <summary>\r
+ Gets the audio encoders that the current device supports.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Dispose">\r
+ <summary>\r
+ Releases the unmanaged resources used by the Recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Dispose(System.Boolean)">\r
+ <summary>\r
+ Releases the resources used by the Recorder.\r
+ </summary>\r
+ <param name="disposing">\r
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.\r
+ </param>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.State">\r
+ <summary>\r
+ Gets the current state of the recorder.\r
+ </summary>\r
+ <value>A <see cref="T:Tizen.Multimedia.RecorderState"/> that specifies the state of recorder.</value>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Prepare">\r
+ <summary>\r
+ Prepare the media recorder for recording.\r
+ </summary>\r
+ <remarks>\r
+ The recorder should be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> state.\n\r
+ The state of the recorder will be the <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> after this.\n\r
+ It has no effect if the current state is the <see cref="F:Tizen.Multimedia.RecorderState.Ready"/>.\r
+ </remarks>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Unprepare">\r
+ <summary>\r
+ Resets the media recorder.\r
+ </summary>\r
+ <remarks>\r
+ The recorder should be in the <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ The state of recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> after this.\r
+ It has no effect if the current state is the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/>.\r
+ </remarks>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Start(System.String)">\r
+ <summary>\r
+ Starts the recording.\r
+ </summary>\r
+ <remarks>\r
+ The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ The state of recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> after this. \n\r
+ \n\r
+ If the specified path exists, the file is removed automatically and updated by new one.\n\r
+ The mediastorage privilege(http://tizen.org/privilege/mediastorage) is required if the path is relevant to media storage.\n\r
+ The externalstorage privilege(http://tizen.org/privilege/externalstorage) is required if the path is relevant to external storage.\n\r
+ \n\r
+ In the video recorder, some preview format does not support record mode.\r
+ You should use default preview format or <see cref="F:Tizen.Multimedia.CameraPixelFormat.Nv12"/> in the record mode.\r
+ </remarks>\r
+ <param name="savePath">The file path for recording result.</param>\r
+ <privilege>http://tizen.org/privilege/recorder</privilege>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ The preview format of the camera is not supported.\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ <exception cref="T:System.ArgumentNullException"><paramref name="savePath"/> is null.</exception>\r
+ <exception cref="T:System.ArgumentException"><paramref name="savePath"/> is a zero-length string, contains only white space.</exception>\r
+ <exception cref="T:System.UnauthorizedAccessException">Caller does not have required privilege.</exception>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.Commit"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.Cancel"/>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Resume">\r
+ <summary>\r
+ Resumes the recording.\r
+ </summary>\r
+ <remarks>\r
+ The recorder should be in the <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
+ The state of recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> after this.\r
+ It has no effect if the current state is the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/>.\r
+ </remarks>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Pause">\r
+ <summary>\r
+ Pause the recording.\r
+ </summary>\r
+ <remarks>\r
+ The recorder should be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state.\r
+ The state of recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> after this.\r
+ It has no effect if the current state is the <see cref="F:Tizen.Multimedia.RecorderState.Paused"/>.\r
+ </remarks>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Commit">\r
+ <summary>\r
+ Stops recording and saves the result.\r
+ </summary>\r
+ <remarks>\r
+ The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> or <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
+ The state of recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> after the operation.\r
+ </remarks>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ The method is called in <see cref="E:Tizen.Multimedia.Recorder.AudioStreamStoring"/> event.\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.Cancel">\r
+ <summary>\r
+ Cancels the recording.\n\r
+ The recording data is discarded and not written in the recording file.\r
+ </summary>\r
+ <remarks>\r
+ The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> or <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
+ The state of recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> after the operation.\r
+ </remarks>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ The method is called in <see cref="E:Tizen.Multimedia.Recorder.AudioStreamStoring"/> event.\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.ApplyAudioStreamPolicy(Tizen.Multimedia.AudioStreamPolicy)">\r
+ <summary>\r
+ Apply the audio stream policy.\r
+ </summary>\r
+ <remarks>\r
+ The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <param name="policy">The policy to apply.</param>\r
+ <exception cref="T:System.ArgumentNullException"><paramref name="policy"/> is null.</exception>\r
+ <exception cref="T:System.InvalidOperationException">\r
+ The recorder is not in the valid state.\n\r
+ -or-\n\r
+ <paramref name="policy"/> is not supported for the recorder.\r
+ -or-\n\r
+ An internal error occurred.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException">\r
+ The recorder already has been disposed of.\n\r
+ -or-\n\r
+ <paramref name="policy"/> already has been disposed of.\r
+ </exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.GetPeakAudioLevel">\r
+ <summary>\r
+ Returns the peak audio input level in dB since the last call to this method.\r
+ </summary>\r
+ <remarks>\r
+ 0dB indicates maximum input level, -300dB indicates minimum input level.\n\r
+ \n\r
+ The recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> or <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.\r
+ </remarks>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Recorder.GetDeviceState(Tizen.Multimedia.RecorderType)">\r
+ <summary>\r
+ Returns the state of recorder device.\r
+ </summary>\r
+ <exception cref="T:System.ArgumentException"><paramref name="type"/> is invalid.</exception>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.ErrorOccurred">\r
+ <summary>\r
+ Occurs when an error occurs during recorder operation.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.Interrupted">\r
+ <summary>\r
+ Occurs after interrupt handling is completed.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.StateChanged">\r
+ <summary>\r
+ This event occurs when recorder state is changed.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.RecordingStatusChanged">\r
+ <summary>\r
+ Occurs when recording information changes.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.AudioStreamStoring">\r
+ <summary>\r
+ Occurs when audio stream data is being delivered.\r
+ </summary>\r
+ <remarks>\r
+ Do not call <see cref="M:Tizen.Multimedia.Recorder.Commit"/> and <see cref="M:Tizen.Multimedia.Recorder.Cancel"/> in this event.\r
+ </remarks>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.RecordingLimitReached">\r
+ <summary>\r
+ Occurs when recording limit is reached.\r
+ </summary>\r
+ <remarks>\r
+ After this event is raised, recording data is discarded and not written in the recording file.\r
+ </remarks>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.MuxedStreamDelivered">\r
+ <summary>\r
+ Occurs when muxed stream data is being delivered.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.Interrupting">\r
+ <summary>\r
+ Occurs before interrupt handling is started.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Multimedia.Recorder.DeviceStateChanged">\r
+ <summary>\r
+ Occurs when a recorder device state changes.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.AudioCodec">\r
+ <summary>\r
+ Gets the audio codec for encoding an audio stream.\r
+ </summary>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs"/>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.FileFormat">\r
+ <summary>\r
+ Gets the file format of the recording result.\r
+ </summary>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.AudioChannels">\r
+ <summary>\r
+ Gets or sets the number of audio channel.\r
+ </summary>\r
+ <remarks>\r
+ To set, the recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <value>\r
+ For mono recording, set channel to 1.\r
+ For stereo recording, set channel to 2.\r
+ </value>\r
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.AudioDevice">\r
+ <summary>\r
+ Gets or sets the audio device for recording.\r
+ </summary>\r
+ <remarks>\r
+ To set, the recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <value>A <see cref="T:Tizen.Multimedia.RecorderAudioDevice"/> that specifies the type of audio device.</value>\r
+ <exception cref="T:System.ArgumentException"><paramref name="value"/> is not valid.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.AudioSampleRate">\r
+ <summary>\r
+ Gets or sets the sampling rate of an audio stream in hertz.\r
+ </summary>\r
+ <remarks>\r
+ To set, the recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.AudioBitRate">\r
+ <summary>\r
+ Gets or sets the bitrate of an audio encoder in bits per second.\r
+ </summary>\r
+ <remarks>\r
+ To set, the recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.SizeLimit">\r
+ <summary>\r
+ Gets or sets the maximum size of a recording file.\r
+ </summary>\r
+ <value>\r
+ The maximum size of a recording file in kilobytes, or 0 for unlimited size.\r
+ </value>\r
+ <remarks>\r
+ After reaching the limitation, the data which is being recorded will\r
+ be discarded and not written to the file.\n\r
+ \n\r
+ To set, the recorder must be in the<see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref= "F:Tizen.Multimedia.RecorderState.Ready" /> state.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.TimeLimit">\r
+ <summary>\r
+ Gets or sets the time limit of recording.\r
+ </summary>\r
+ <value>\r
+ The time of recording in seconds, or 0 for unlimited time.\r
+ </value>\r
+ <remarks>\r
+ After reaching the limitation, the data which is being recorded will\r
+ be discarded and not written to the file.\n\r
+ \n\r
+ To set, the recorder must be in the<see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref= "F:Tizen.Multimedia.RecorderState.Ready" /> state.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.Recorder.Muted">\r
+ <summary>\r
+ Gets or sets the mute state of a recorder.\r
+ </summary>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderDeviceException">\r
+ <summary>\r
+ The exception that is thrown when a recorder device-related error occurs.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecorderDeviceException.#ctor">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.RecorderDeviceException"/> class.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecorderDeviceException.#ctor(System.String)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.RecorderDeviceException"/> class with a specified error message.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecorderDeviceException.#ctor(System.String,System.Exception)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.RecorderDeviceException"/> class with\r
+ a specified error message and inner exception.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderDeviceStateChangedEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.DeviceStateChanged"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderDeviceStateChangedEventArgs.Type">\r
+ <summary>\r
+ Gets the recorder type.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderDeviceStateChangedEventArgs.DeviceState">\r
+ <summary>\r
+ Gets the device state.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderAudioCodec">\r
+ <summary>\r
+ Specifies audio codecs for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs"/>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioCodec.None">\r
+ <summary>\r
+ Disabled.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioCodec.Amr">\r
+ <summary>\r
+ AMR codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioCodec.Aac">\r
+ <summary>\r
+ AAC codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioCodec.Vorbis">\r
+ <summary>\r
+ Vorbis codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioCodec.Pcm">\r
+ <summary>\r
+ PCM codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioCodec.Mp3">\r
+ <summary>\r
+ The mp3 codec.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderAudioDevice">\r
+ <summary>\r
+ Specifies audio capture devices for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioDevice.Mic">\r
+ <summary>\r
+ Capture audio from Mic device.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderAudioDevice.Modem">\r
+ <summary>\r
+ Capture audio from modem.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderFileFormat">\r
+ <summary>\r
+ Specifies container formats for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.ThreeGp">\r
+ <summary>\r
+ 3GP file format.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.Mp4">\r
+ <summary>\r
+ MP4 file format.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.Amr">\r
+ <summary>\r
+ AMR file format.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.Adts">\r
+ <summary>\r
+ ADTS file format.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.Wav">\r
+ <summary>\r
+ WAV file format.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.Ogg">\r
+ <summary>\r
+ OGG file format.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderFileFormat.M2ts">\r
+ <summary>\r
+ M2TS file format.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderPolicy">\r
+ <summary>\r
+ Specifies recorder policies.\r
+ </summary>\r
+ <seealso cref="E:Tizen.Multimedia.Recorder.StateChanged"/>\r
+ <seealso cref="E:Tizen.Multimedia.Recorder.Interrupting"/>\r
+ <seealso cref="E:Tizen.Multimedia.Recorder.Interrupted"/>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderPolicy.Security">\r
+ <summary>\r
+ Security policy.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderPolicy.ResourceConflict">\r
+ <summary>\r
+ Resource conflict policy.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecordingLimitType">\r
+ <summary>\r
+ Specifies types of the recording limit for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ <seealso cref="P:Tizen.Multimedia.Recorder.SizeLimit"/>\r
+ <seealso cref="P:Tizen.Multimedia.Recorder.TimeLimit"/>\r
+ <seealso cref="E:Tizen.Multimedia.Recorder.RecordingLimitReached"/>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecordingLimitType.Time">\r
+ <summary>\r
+ Time limit in seconds of recording file\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecordingLimitType.Size">\r
+ <summary>\r
+ Size limit in KB(KiloBytes) of recording file.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecordingLimitType.Space">\r
+ <summary>\r
+ No free space in storage.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderState">\r
+ <summary>\r
+ Specifies states for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderState.Idle">\r
+ <summary>\r
+ Recorder is created, but not prepared.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderState.Ready">\r
+ <summary>\r
+ Recorder is ready to record. In case of video recorder,\r
+ preview display will be shown.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderState.Recording">\r
+ <summary>\r
+ Recorder is recording media.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderState.Paused">\r
+ <summary>\r
+ Recorder is paused while recording media.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderVideoCodec">\r
+ <summary>\r
+ Specifies video codecs for <see cref="T:Tizen.Multimedia.VideoRecorder"/>.\r
+ </summary>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoCodecs"/>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderVideoCodec.H263">\r
+ <summary>\r
+ H263 codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderVideoCodec.H264">\r
+ <summary>\r
+ H264 codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderVideoCodec.Mpeg4">\r
+ <summary>\r
+ MPEG4 codec.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderVideoCodec.Theora">\r
+ <summary>\r
+ Theora codec.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderError">\r
+ <summary>\r
+ Specifies errors for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ <seealso cref="E:Tizen.Multimedia.Recorder.ErrorOccurred"/>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderError.Esd">\r
+ <summary>\r
+ ESD situation.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderError.DeviceError">\r
+ <summary>\r
+ Device Error.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderError.InternalError">\r
+ <summary>\r
+ Internal error.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderError.OutOfMemory">\r
+ <summary>\r
+ Out of memory.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderError.OutOfStorage">\r
+ <summary>\r
+ Out of storage or the storage has been removed while recording.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderType">\r
+ <summary>\r
+ Specifies recorder types for <see cref="E:Tizen.Multimedia.Recorder.DeviceStateChanged"/>.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderType.Audio">\r
+ <summary>\r
+ Audio recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderType.Video">\r
+ <summary>\r
+ Video recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderDeviceState">\r
+ <summary>\r
+ Specifies recorder device states for <see cref="E:Tizen.Multimedia.Recorder.DeviceStateChanged"/>.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderDeviceState.Idle">\r
+ <summary>\r
+ No recording in progress.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderDeviceState.Recording">\r
+ <summary>\r
+ Recording in progress.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.RecorderDeviceState.Paused">\r
+ <summary>\r
+ All recordings are paused.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderExtensions">\r
+ <summary>\r
+ Provides extension methods for <see cref="T:Tizen.Multimedia.Recorder"/>.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderVideoCodec)">\r
+ <summary>\r
+ Returns supported file formats for a <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/>.\r
+ </summary>\r
+ <returns>An IEnumerable of <see cref="T:Tizen.Multimedia.RecorderFileFormat"/> representing the supported file formats.</returns>\r
+ <param name="videoCodec">The <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/>.</param>\r
+ <exception cref="T:System.ArgumentException"><paramref name="videoCodec"/> is invalid.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderAudioCodec)">\r
+ <summary>\r
+ Returns supported file formats for a <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/>.\r
+ </summary>\r
+ <returns>An IEnumerable of <see cref="T:Tizen.Multimedia.RecorderFileFormat"/> representing the supported file formats.</returns>\r
+ <param name="audioCodec">The <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/>.</param>\r
+ <exception cref="T:System.ArgumentException"><paramref name="audioCodec"/> is invalid.</exception>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderInterruptedEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.Interrupted"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderInterruptedEventArgs.Reason">\r
+ <summary>\r
+ Gets the policy that interrupted the recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderInterruptedEventArgs.Previous">\r
+ <summary>\r
+ Gets the previous state of the recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderInterruptedEventArgs.Current">\r
+ <summary>\r
+ Gets the current state of the recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderInterruptingEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.Interrupting"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderInterruptingEventArgs.Reason">\r
+ <summary>\r
+ Gets the reason of the interrupt.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderInterruptingEventArgs.State">\r
+ <summary>\r
+ Gets the previous state of the recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecorderStateChangedEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.StateChanged"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderStateChangedEventArgs.PreviousState">\r
+ <summary>\r
+ Gets the previous state of the recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderStateChangedEventArgs.CurrentState">\r
+ <summary>\r
+ Gets the current state of the recorder.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecorderStateChangedEventArgs.IsStateChangedByPolicy">\r
+ <summary>\r
+ Gets the value indicating whether the state is changed by policy.\r
+ </summary>\r
+ <value>true if the state changed by policy such as resource conflict or security, otherwise false.</value>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecordingErrorOccurredEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.ErrorOccurred"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecordingErrorOccurredEventArgs.Error">\r
+ <summary>\r
+ Gets the error.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecordingLimitReachedEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.RecordingLimitReached"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecordingLimitReachedEventArgs.#ctor(Tizen.Multimedia.RecordingLimitType)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.RecordingLimitReachedEventArgs"/> class\r
+ with the specified type.\r
+ </summary>\r
+ <param name="type">The type of the limit.</param>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecordingLimitReachedEventArgs.Type">\r
+ <summary>\r
+ Gets the type of the limit.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.RecordingStatusChangedEventArgs">\r
+ <summary>\r
+ Provides data for the <see cref="E:Tizen.Multimedia.Recorder.RecordingStatusChanged"/> event.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.RecordingStatusChangedEventArgs.#ctor(System.Int64,System.Int64)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.RecordingStatusChangedEventArgs"/> class\r
+ with the specified elapsed time and file size.\r
+ </summary>\r
+ <param name="elapsedTime">The time of the recording in milliseconds.</param>\r
+ <param name="fileSize">The size of the recording in kilobytes.</param>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecordingStatusChangedEventArgs.ElapsedTime">\r
+ <summary>\r
+ Gets the time of the recording in milliseconds.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.RecordingStatusChangedEventArgs.FileSize">\r
+ <summary>\r
+ Gets the size of the recording file in kilobytes.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.VideoRecorder">\r
+ <summary>\r
+ Provides the ability to control video recording.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoResolutions(Tizen.Multimedia.CameraDevice)">\r
+ <summary>\r
+ Gets the video resolutions that the current device supports.\r
+ </summary>\r
+ <feature>http://tizen.org/feature/camera</feature>\r
+ <param name="device">The camera device to retrieve the supported resolutions</param>\r
+ <exception cref="T:System.NotSupportedException">A required feature is not supported.</exception>\r
+ <exception cref="T:System.ArgumentException"><paramref name="device"/> is invalid.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoCodecs">\r
+ <summary>\r
+ Gets the video encoders that the current device supports.\r
+ </summary>\r
+ <feature>http://tizen.org/feature/camera</feature>\r
+ <exception cref="T:System.NotSupportedException">A required feature is not supported.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.VideoRecorder.#ctor(Tizen.Multimedia.Camera,Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderFileFormat)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.VideoRecorder"/> class with the specified camera, video codec and file format.\r
+ </summary>\r
+ <remarks>\r
+ If the state of <see cref="T:Tizen.Multimedia.Camera"/> is <see cref="F:Tizen.Multimedia.CameraState.Created"/>,\r
+ the <see cref="P:Tizen.Multimedia.CameraSettings.PreviewPixelFormat"/> will be changed to the recommended format for recording.\n\r
+ \n\r
+ The initial state of the Recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/>\r
+ if the state of <see cref="T:Tizen.Multimedia.Camera"/> is <see cref="F:Tizen.Multimedia.CameraState.Preview"/> or <see cref="F:Tizen.Multimedia.CameraState.Captured"/>.\r
+ </remarks>\r
+ <param name="camera">The camera object.</param>\r
+ <param name="videoCodec">The codec for video encoding.</param>\r
+ <param name="fileFormat">The format of result file.</param>\r
+ <feature>http://tizen.org/feature/camera</feature>\r
+ <exception cref="T:System.InvalidOperationException">An internal error occurred.</exception>\r
+ <exception cref="T:System.NotSupportedException">\r
+ A required feature is not supported.\n\r
+ -or-\n\r
+ <paramref name="videoCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified video codec.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentException">\r
+ <paramref name="videoCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not valid.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException"><paramref name="camera"/> has been disposed of.</exception>\r
+ <exception cref="T:System.ArgumentNullException"><paramref name="camera"/> is null.</exception>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderVideoCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.VideoRecorder.#ctor(Tizen.Multimedia.Camera,Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.VideoRecorder"/> class with the specified camera, video codec,\r
+ audio codec and file format.\r
+ </summary>\r
+ <remarks>\r
+ If the state of <see cref="T:Tizen.Multimedia.Camera"/> is <see cref="F:Tizen.Multimedia.CameraState.Created"/>,\r
+ the <see cref="P:Tizen.Multimedia.CameraSettings.PreviewPixelFormat"/> will be changed to the recommended format for recording.\n\r
+ \n\r
+ The initial state of the Recorder will be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/>\r
+ if the state of <see cref="T:Tizen.Multimedia.Camera"/> is <see cref="F:Tizen.Multimedia.CameraState.Preview"/> or <see cref="F:Tizen.Multimedia.CameraState.Captured"/>.\r
+ </remarks>\r
+ <param name="camera">The camera object.</param>\r
+ <param name="videoCodec">The codec for video encoding.</param>\r
+ <param name="audioCodec">The codec for audio encoding.</param>\r
+ <param name="fileFormat">The format of result file.</param>\r
+ <feature>http://tizen.org/feature/camera</feature>\r
+ <exception cref="T:System.InvalidOperationException">An internal error occurred.</exception>\r
+ <exception cref="T:System.NotSupportedException">\r
+ A required feature is not supported.\n\r
+ -or-\n\r
+ <paramref name="videoCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="audioCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified video codec.\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified audio codec.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentException">\r
+ <paramref name="videoCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="audioCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not valid.\r
+ </exception>\r
+ <exception cref="T:System.ObjectDisposedException"><paramref name="camera"/> has been disposed of.</exception>\r
+ <exception cref="T:System.ArgumentNullException"><paramref name="camera"/> is null.</exception>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderAudioCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderVideoCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderFileFormat)">\r
+ <summary>\r
+ Sets the video codec and the file format for recording. Audio will not recorded.\r
+ </summary>\r
+ <param name="videoCodec">The codec for video encoding.</param>\r
+ <param name="fileFormat">The format of result file.</param>\r
+ <exception cref="T:System.NotSupportedException">\r
+ <paramref name="videoCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified video codec.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentException">\r
+ <paramref name="videoCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not valid.\r
+ </exception>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderVideoCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.Start(System.String)"/>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderAudioCodec,Tizen.Multimedia.RecorderFileFormat)">\r
+ <summary>\r
+ Sets the video codec, audio codec and the file format for recording.\r
+ </summary>\r
+ <param name="videoCodec">The codec for video encoding.</param>\r
+ <param name="audioCodec">The codec for audio encoding.</param>\r
+ <param name="fileFormat">The format of result file.</param>\r
+ <exception cref="T:System.NotSupportedException">\r
+ <paramref name="videoCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="audioCodec"/> is not supported.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified video codec.\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not supported with the specified audio codec.\r
+ </exception>\r
+ <exception cref="T:System.ArgumentException">\r
+ <paramref name="videoCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="audioCodec"/> is not valid.\n\r
+ -or-\n\r
+ <paramref name="fileFormat"/> is not valid.\r
+ </exception>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedAudioCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.GetSupportedVideoCodecs"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.GetSupportedFileFormats"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderAudioCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.RecorderExtensions.GetSupportedFileFormats(Tizen.Multimedia.RecorderVideoCodec)"/>\r
+ <seealso cref="M:Tizen.Multimedia.VideoRecorder.SetFormatAndCodec(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.RecorderFileFormat)"/>\r
+ <seealso cref="M:Tizen.Multimedia.Recorder.Start(System.String)"/>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.VideoRecorder.VideoCodec">\r
+ <summary>\r
+ Gets the audio codec for encoding an audio stream.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.VideoRecorder.VideoMotionRate">\r
+ <summary>\r
+ Gets or sets the video recording motion rate.\r
+ </summary>\r
+ <remarks>\r
+ The attribute is valid only in a video recorder.\n\r
+ If the rate is in range of 0-1, video is recorded in a slow motion mode.\n\r
+ If the rate is bigger than 1, video is recorded in a fast motion mode.\n\r
+ \n\r
+ To set, the recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="value"/> is less than or equal to 0.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <member name="P:Tizen.Multimedia.VideoRecorder.VideoOrientationTag">\r
+ <summary>\r
+ Gets or sets the orientation in a video metadata tag.\r
+ </summary>\r
+ <value>A <see cref="T:Tizen.Multimedia.Rotation"/> that specifies the type of orientation.</value>\r
+ <exception cref="T:System.ArgumentException"><paramref name="value"/> is not valid.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ <!-- "P:Tizen.Multimedia.VideoRecorder.VideoResolution" 멤버에 대해 잘못된 형식의 XML 주석은 무시됩니다. -->\r
+ <member name="P:Tizen.Multimedia.VideoRecorder.VideoBitRate">\r
+ <summary>\r
+ Gets or sets the bitrate of an video encoder in bits per second.\r
+ </summary>\r
+ <remarks>\r
+ To set, the recorder must be in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> or <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state.\r
+ </remarks>\r
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>\r
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>\r
+ <exception cref="T:System.ObjectDisposedException">The recorder already has been disposed of.</exception>\r
+ </member>\r
+ </members>\r
+</doc>\r
</summary>\r
<since_tizen> 3</since_tizen>\r
</member>\r
- <member name="T:Tizen.Multimedia.Vision.Colorspace">\r
- <summary>\r
- Specifies colorspaces for MediaVision.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Invalid">\r
- <summary>\r
- The colorspace type is invalid.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Y800">\r
- <summary>\r
- The colorspace type is Y800.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.I420">\r
- <summary>\r
- The colorspace type is I420.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.NV12">\r
- <summary>\r
- The colorspace type is NV12.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.YV12">\r
- <summary>\r
- The colorspace type is YV12.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.NV21">\r
- <summary>\r
- The colorspace type is NV21.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Yuyv">\r
- <summary>\r
- The colorspace type is YUYV.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Uyvy">\r
- <summary>\r
- The colorspace type is UYVY.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Yuv422P">\r
- <summary>\r
- The colorspace type is 422P.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Rgb565">\r
- <summary>\r
- The colorspace type is RGB565.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Rgb888">\r
- <summary>\r
- The colorspace type is RGB888.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
- <member name="F:Tizen.Multimedia.Vision.Colorspace.Rgba">\r
- <summary>\r
- The colorspace type is RGBA.\r
- </summary>\r
- <since_tizen> 3</since_tizen>\r
- </member>\r
<member name="T:Tizen.Multimedia.Vision.EngineConfiguration">\r
<summary>\r
A base class for configuration classes.\r
<exception cref="T:System.ObjectDisposedException"><paramref name="mediaPacket"/> has already been disposed of.</exception>\r
<since_tizen> 3</since_tizen>\r
</member>\r
- <member name="M:Tizen.Multimedia.Vision.MediaVisionSource.#ctor(System.Byte[],System.UInt32,System.UInt32,Tizen.Multimedia.Vision.Colorspace)">\r
+ <member name="M:Tizen.Multimedia.Vision.MediaVisionSource.#ctor(System.Byte[],System.UInt32,System.UInt32,Tizen.Multimedia.ColorSpace)">\r
<summary>\r
- Initializes a new instance of the <see cref="T:Tizen.Multimedia.Vision.MediaVisionSource"/> class based on the buffer and <see cref="P:Tizen.Multimedia.Vision.MediaVisionSource.Colorspace"/>.\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.Vision.MediaVisionSource"/> class based on the buffer and <see cref="T:Tizen.Multimedia.ColorSpace"/>.\r
</summary>\r
<param name="buffer">The buffer of image data.</param>\r
<param name="width">The width of image.</param>\r
<param name="height">The height of image.</param>\r
- <param name="colorspace">The image <see cref="P:Tizen.Multimedia.Vision.MediaVisionSource.Colorspace"/>.</param>\r
- <exception cref="T:System.NotSupportedException">The feature is not supported.</exception>\r
+ <param name="colorSpace">The image <see cref="T:Tizen.Multimedia.ColorSpace"/>.</param>\r
+ <exception cref="T:System.NotSupportedException">\r
+ The feature is not supported.\n\r
+ -or-\n\r
+ <paramref name="colorSpace"/> is not supported.\r
+ </exception>\r
<exception cref="T:System.ArgumentNullException"><paramref name="buffer"/> is null.</exception>\r
<exception cref="T:System.ArgumentException">\r
<paramref name="buffer"/> has no element.(The length is zero.)\n\r
-or-\n\r
- <paramref name="colorspace"/> is invalid.\r
+ <paramref name="colorSpace"/> is invalid.\r
</exception>\r
<since_tizen> 3</since_tizen>\r
</member>\r
<exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.Vision.MediaVisionSource"/> has already been disposed of.</exception>\r
<since_tizen> 3</since_tizen>\r
</member>\r
+ <member name="M:Tizen.Multimedia.Vision.MediaVisionSource.IsSupportedColorSpace(Tizen.Multimedia.ColorSpace)">\r
+ <summary>\r
+ Gets MediaVision's supported ColorSpace state.\r
+ true if supported, otherwise false.\r
+ </summary>\r
+ </member>\r
<member name="P:Tizen.Multimedia.Vision.MediaVisionSource.Height">\r
<summary>\r
Gets height of the media source.\r
</member>\r
<member name="P:Tizen.Multimedia.Vision.MediaVisionSource.Colorspace">\r
<summary>\r
- Gets <see cref="P:Tizen.Multimedia.Vision.MediaVisionSource.Colorspace"/> of the media source.\r
+ Gets <see cref="T:Tizen.Multimedia.ColorSpace"/> of the media source.\r
</summary>\r
<exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.Vision.MediaVisionSource"/> has already been disposed of.</exception>\r
<since_tizen> 3</since_tizen>\r
</member>\r
- <member name="M:Tizen.Multimedia.Vision.MediaVisionSource.Dispose">\r
+ <member name="P:Tizen.Multimedia.Vision.MediaVisionSource.SupportedColorSpaces">\r
<summary>\r
- Releases all resources used by the <see cref="T:Tizen.Multimedia.Vision.MediaVisionSource"/> object.\r
+ Gets the supported colorspaces for <see cref="T:Tizen.Multimedia.Vision.MediaVisionSource"/>.\r
</summary>\r
</member>\r
<member name="M:Tizen.Multimedia.Vision.MediaVisionSource.Dispose(System.Boolean)">\r
<seealso cref="M:Tizen.Multimedia.Vision.PersonRecognizer.AddSource(Tizen.Multimedia.Vision.SurveillanceSource,Tizen.Multimedia.Vision.PersonRecognitionConfiguration)"/>\r
<since_tizen> 3</since_tizen>\r
</member>\r
+ <member name="T:Tizen.Multimedia.Vision.VisionColorSpace">\r
+ <summary>\r
+ Specifies colorspaces for MediaVision.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Y800">\r
+ <summary>\r
+ The colorspace type is Y800.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.I420">\r
+ <summary>\r
+ The colorspace type is I420.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.NV12">\r
+ <summary>\r
+ The colorspace type is NV12.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.YV12">\r
+ <summary>\r
+ The colorspace type is YV12.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.NV21">\r
+ <summary>\r
+ The colorspace type is NV21.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Yuyv">\r
+ <summary>\r
+ The colorspace type is YUYV.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Uyvy">\r
+ <summary>\r
+ The colorspace type is UYVY.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Yuv422P">\r
+ <summary>\r
+ The colorspace type is 422P.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Rgb565">\r
+ <summary>\r
+ The colorspace type is RGB565.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Rgb888">\r
+ <summary>\r
+ The colorspace type is RGB888.\r
+ </summary>\r
+ </member>\r
+ <member name="F:Tizen.Multimedia.Vision.VisionColorSpace.Rgba">\r
+ <summary>\r
+ The colorspace type is RGBA.\r
+ </summary>\r
+ </member>\r
</members>\r
</doc>\r
</exception>\r
<exception cref="T:System.UnauthorizedAccessException">Caller does not have required privilege to set volume.</exception>\r
</member>\r
+ <member name="T:Tizen.Multimedia.DependentMediaBuffer">\r
+ <summary>\r
+ Represents a buffer that is dependent on the owner object.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.MediaBufferBase.ValidateRange(System.Int32,System.Int32)">\r
+ <summary>\r
+ Validates the range\r
+ </summary>\r
+ <param name="offset"></param>\r
+ <param name="length"></param>\r
+ <exception cref="T:System.ArgumentOutOfRangeException">\r
+ offset + length is greater than <see cref="P:Tizen.Multimedia.MediaBufferBase.Length"/>.\r
+ <para>-or-</para>\r
+ offset or length is less than zero.\r
+ </exception>\r
+ </member>\r
+ <member name="T:Tizen.Multimedia.ScopedMediaBuffer">\r
+ <summary>\r
+ Represents a scoped buffer which lives shortly such as a callback.\r
+ </summary>\r
+ </member>\r
<member name="T:Tizen.Multimedia.CodecKind">\r
<summary>\r
Specifies whether a codec is audio codec or video codec.\r
</summary>\r
<seealso cref="!:Player"/>\r
<seealso cref="!:Camera"/>\r
- <seealso cref="!:ScreenMirroring"/>\r
+ <seealso cref="!:Tizen.Multimedia.Remoting.ScreenMirroring"/>\r
</member>\r
<member name="M:Tizen.Multimedia.Display.#ctor(Tizen.Multimedia.MediaView)">\r
<summary>\r
Initializes a new instance of the <see cref="T:Tizen.Multimedia.Display"/> class with a <see cref="T:Tizen.Multimedia.MediaView"/> class.\r
</summary>\r
+ <param name="mediaView">A <see cref="T:Tizen.Multimedia.MediaView"/> to display.</param>\r
<feature>http://tizen.org/feature/multimedia.raw_video</feature>\r
<exception cref="T:System.NotSupportedException">The required feature is not supported.</exception>\r
</member>\r
<summary>\r
Initializes a new instance of the <see cref="T:Tizen.Multimedia.Display"/> class with a <see cref="T:ElmSharp.Window"/> class.\r
</summary>\r
+ <param name="window">A <see cref="T:ElmSharp.Window"/> to display.</param>\r
+ </member>\r
+ <member name="M:Tizen.Multimedia.Display.#ctor(Tizen.NUI.Window)">\r
+ <summary>\r
+ Initializes a new instance of the <see cref="T:Tizen.Multimedia.Display"/> class with a <see cref="T:Tizen.NUI.Window"/> class.\r
+ </summary>\r
+ <param name="window">A <see cref="T:Tizen.NUI.Window"/> to display.</param>\r
+ <remarks>\r
+ The <see cref="P:Tizen.NUI.Window.BackgroundColor"/> must be <see cref="F:Tizen.NUI.Color.Transparent"/>\r
+ for the <see cref="T:Tizen.Multimedia.Display"/> to be rendered correctly.\r
+ </remarks>\r
</member>\r
<member name="T:Tizen.Multimedia.FileFormatException">\r
<summary>\r
Flip vertically.\r
</summary>\r
</member>\r
- <member name="T:Tizen.Multimedia.IReadOnlyBuffer">\r
+ <member name="T:Tizen.Multimedia.IMediaBuffer">\r
<summary>\r
- Provides functionality to read a media buffer.\r
+ Provides functionality to read and write a media buffer.\r
</summary>\r
</member>\r
- <member name="P:Tizen.Multimedia.IReadOnlyBuffer.Item(System.Int32)">\r
+ <member name="P:Tizen.Multimedia.IMediaBuffer.Item(System.Int32)">\r
<summary>\r
Gets or sets a value at the specified index.\r
</summary>\r
<exception cref="T:System.ArgumentOutOfRangeException">\r
index is less than zero.\n\r
-or-\n\r
- index is equal to or greater than <see cref="P:Tizen.Multimedia.IReadOnlyBuffer.Length"/>.\r
+ index is equal to or greater than <see cref="P:Tizen.Multimedia.IMediaBuffer.Length"/>.\r
</exception>\r
<exception cref="T:System.ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>\r
<exception cref="T:System.InvalidOperationException">The buffer is not available. i.e. not writable state.</exception>\r
</member>\r
- <member name="P:Tizen.Multimedia.IReadOnlyBuffer.Length">\r
+ <member name="P:Tizen.Multimedia.IMediaBuffer.Length">\r
<summary>\r
Gets the size of the buffer, in bytes.\r
</summary>\r
</member>\r
- <member name="M:Tizen.Multimedia.IReadOnlyBuffer.CopyTo(System.Byte[],System.Int32,System.Int32)">\r
+ <!-- "P:Tizen.Multimedia.IMediaBuffer.IsReadOnly" 멤버에 대해 잘못된 형식의 XML 주석은 무시됩니다. -->\r
+ <member name="M:Tizen.Multimedia.IMediaBuffer.CopyTo(System.Byte[],System.Int32,System.Int32)">\r
<summary>\r
Copies data from a byte array to the buffer.\r
</summary>\r
<exception cref="T:System.ArgumentOutOfRangeException">startIndex or length is not valid.</exception>\r
<exception cref="T:System.ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>\r
</member>\r
- <member name="M:Tizen.Multimedia.IReadOnlyBuffer.CopyTo(System.Byte[],System.Int32,System.Int32,System.Int32)">\r
+ <member name="M:Tizen.Multimedia.IMediaBuffer.CopyTo(System.Byte[],System.Int32,System.Int32,System.Int32)">\r
<summary>\r
Copies data from a byte array to the buffer.\r
</summary>\r
<exception cref="T:System.ArgumentOutOfRangeException">startIndex, offset or length is not valid.</exception>\r
<exception cref="T:System.ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>\r
</member>\r
- <member name="T:Tizen.Multimedia.IMediaBuffer">\r
- <summary>\r
- Provides functionality to read and write a media buffer.\r
- </summary>\r
- </member>\r
<member name="M:Tizen.Multimedia.IMediaBuffer.CopyFrom(System.Byte[],System.Int32,System.Int32)">\r
<summary>\r
Copies data from the buffer to a byte array.\r
<exception cref="T:System.ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>\r
<exception cref="T:System.InvalidOperationException">The buffer is not available. i.e. not writable state.</exception>\r
</member>\r
- <member name="T:Tizen.Multimedia.DependentMediaBuffer">\r
- <summary>\r
- Represents a buffer for a <see cref="T:Tizen.Multimedia.MediaPacket"/>.\r
- </summary>\r
- </member>\r
- <member name="M:Tizen.Multimedia.DependentMediaBuffer.ValidateRange(System.Int32,System.Int32)">\r
- <summary>\r
- Validates the range\r
- </summary>\r
- <param name="offset"></param>\r
- <param name="length"></param>\r
- <exception cref="T:System.ArgumentOutOfRangeException">\r
- offset + length is greater than <see cref="P:Tizen.Multimedia.DependentMediaBuffer.Length"/>.\n\r
- -or-\n\r
- offset or length is less than zero.\r
- </exception>\r
- </member>\r
<member name="T:Tizen.Multimedia.Point">\r
<summary>\r
Represents a point in 2D space.\r
Write requested.\r
</summary>\r
</member>\r
+ <member name="T:Tizen.Network.Bluetooth.BluetoothErrorFactory">\r
+ <summary>\r
+ A class which is used to Throw the Bluetooth Error exceptions.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothErrorFactory.ThrowBluetoothException(System.Int32)">\r
+ <summary>\r
+ Exceptions for Bluetooth Errors.\r
+ </summary>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the Bluetooth Error happens.</exception>\r
+ </member>\r
<member name="T:Tizen.Network.Bluetooth.StateChangedEventArgs">\r
<summary>\r
An extended EventArgs class contains the changed Bluetooth state.\r
Gets a value indicating whether the notification sent is completed.\r
</summary>\r
</member>\r
+ <member name="T:Tizen.Network.Bluetooth.ConnectionRequestedEventArgs">\r
+ <summary>\r
+ An extended EventArgs class which contains the connection state and address of the remote Bluetooth device.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.ConnectionRequestedEventArgs.Address">\r
+ <summary>\r
+ The address.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Network.Bluetooth.TransferProgressEventArgs">\r
+ <summary>\r
+ An extended EventArgs class which contains the file transfer progress state, file transfer progress by percent.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.TransferProgressEventArgs.File">\r
+ <summary>\r
+ The File name.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.TransferProgressEventArgs.Size">\r
+ <summary>\r
+ The File size.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.TransferProgressEventArgs.Percent">\r
+ <summary>\r
+ The File transfer percent.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Network.Bluetooth.TransferFinishedEventArgs">\r
+ <summary>\r
+ An extended EventArgs class which contains the file transfer finished state and file state.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.TransferFinishedEventArgs.File">\r
+ <summary>\r
+ The File name.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.TransferFinishedEventArgs.Size">\r
+ <summary>\r
+ The File size.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.TransferFinishedEventArgs.Result">\r
+ <summary>\r
+ The return value.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Network.Bluetooth.PushRespondedEventArgs">\r
+ <Summary>\r
+ An extended EventArgs class which contains the Push Request respond state\r
+ </Summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushRespondedEventArgs.Result">\r
+ <summary>\r
+ The return value.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushRespondedEventArgs.Address">\r
+ <summary>\r
+ The address.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Network.Bluetooth.PushProgressEventArgs">\r
+ <summary>\r
+ An extended EventArgs class which contains the file push progress state, push progress by percent.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushProgressEventArgs.File">\r
+ <summary>\r
+ The File name.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushProgressEventArgs.Size">\r
+ <summary>\r
+ The File size.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushProgressEventArgs.Percent">\r
+ <summary>\r
+ The File transfer percent.\r
+ </summary>\r
+ </member>\r
+ <member name="T:Tizen.Network.Bluetooth.PushFinishedEventArgs">\r
+ <Summary>\r
+ An extended EventArgs class which contains the Push Request respond state\r
+ </Summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushFinishedEventArgs.Result">\r
+ <summary>\r
+ The return value.\r
+ </summary>\r
+ </member>\r
+ <member name="P:Tizen.Network.Bluetooth.PushFinishedEventArgs.Address">\r
+ <summary>\r
+ The address.\r
+ </summary>\r
+ </member>\r
<member name="T:Tizen.Network.Bluetooth.BluetoothGattServer">\r
<summary>\r
The Bluetooth GATT server.\r
<exception cref="!:System.InvalidOperationException">Thrown when the Bluetooth LE is not enabled\r
or when the clear advertising data procedure fails.</exception>\r
</member>\r
+ <member name="T:Tizen.Network.Bluetooth.BluetoothOppServer">\r
+ <summary>\r
+ A class which is used to handle the connection and send and receive the object over Opp profile.\r
+ </summary>\r
+ <privilege> http://tizen.org/privilege/bluetooth </privilege>\r
+ </member>\r
+ <member name="E:Tizen.Network.Bluetooth.BluetoothOppServer.ConnectionRequested">\r
+ <summary>\r
+ (event) ConnectionRequested is called when OPP client requests for connection.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Network.Bluetooth.BluetoothOppServer.TransferProgress">\r
+ <summary>\r
+ (event) TransferProgress is called when the file transfer state is changed.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Network.Bluetooth.BluetoothOppServer.TransferFinished">\r
+ <summary>\r
+ (event) TransferFinished is called when the file tranfser is completed.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppServer.StartServer(System.String)">\r
+ <summary>\r
+ Register the Opp Server with the Opp service.\r
+ </summary>\r
+ <remarks>\r
+ The device must be bonded with remote device by CreateBond().\r
+ If connection request is received from OPP Client, ConnectionRequested event will be invoked.\r
+ </remarks>\r
+ <param name="FilePath"> Path to store the files.</param>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppServer.StopServer">\r
+ <summary>\r
+ Stops the Opp Server.\r
+ </summary>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppServer.AcceptPush(System.String)">\r
+ <summary>\r
+ Accept File Push request.\r
+ </summary>\r
+ <param name="FileName"> File name to accept.</param>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppServer.RejectPush">\r
+ <summary>\r
+ Reject File Push request.\r
+ </summary>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppServer.CancelTransfer(System.Int32)">\r
+ <summary>\r
+ Cancel the ongoing transfer session.\r
+ </summary>\r
+ <param name="TransferId"> tranfer ID.</param>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppServer.SetDestinationPath(System.String)">\r
+ <summary>\r
+ Cancel the ongoing transfer session.\r
+ </summary>\r
+ <param name="FilePath"> Path to store the files.</param>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="T:Tizen.Network.Bluetooth.BluetoothOppClient">\r
+ <summary>\r
+ A class which is used to handle the connection and send and receive the object over Opp profile.\r
+ </summary>\r
+ <privilege> http://tizen.org/privilege/bluetooth </privilege>\r
+ </member>\r
+ <member name="E:Tizen.Network.Bluetooth.BluetoothOppClient.PushResponded">\r
+ <summary>\r
+ (event) PushResponded is called when remote OPP Server responds to a File push request.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Network.Bluetooth.BluetoothOppClient.PushProgress">\r
+ <summary>\r
+ (event) PushProgress is called when the file transfer state is changed.\r
+ </summary>\r
+ </member>\r
+ <member name="E:Tizen.Network.Bluetooth.BluetoothOppClient.PushFinished">\r
+ <summary>\r
+ (event) PushFinished is called when the file tranfser is completed.\r
+ </summary>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppClient.AddFile(System.String)">\r
+ <summary>\r
+ Add File path to be pushed.\r
+ </summary>\r
+ <param name="FilePath"> file for sending.</param>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppClient.ClearFiles">\r
+ <summary>\r
+ Clears all the File paths.\r
+ </summary>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppClient.CancelPush">\r
+ <summary>\r
+ Cancels the ongoing push session.\r
+ </summary>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
+ <member name="M:Tizen.Network.Bluetooth.BluetoothOppClient.PushFile(System.String)">\r
+ <summary>\r
+ Pushes the file set through AddFile.\r
+ </summary>\r
+ <param name="Destination"> destination device address.</param>\r
+ <feature>http://tizen.org/feature/network.bluetooth.opp</feature>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the required feature is not Supported.</exception>\r
+ <exception cref="!:System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>\r
+ <exception cref="!:System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>\r
+ </member>\r
<!-- "T:Tizen.Network.Bluetooth.BluetoothProfile" 멤버에 대해 잘못된 형식의 XML 주석은 무시됩니다. -->\r
<member name="T:Tizen.Network.Bluetooth.BluetoothServerSocket">\r
<summary>\r
<members>\r
<member name="T:Tizen.Tracer">\r
<summary>\r
- Provides functions for writing trace message to the system trace buffer.\r
+ Provides functions for writing a trace message to the system trace buffer.\r
</summary>\r
</member>\r
<member name="M:Tizen.Tracer.Begin(System.String)">\r
<remarks>\r
The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.\r
</remarks>\r
- <param name="name">The name of event (optionally containing format specifiers)</param>\r
+ <param name="name">The name of an event (optionally containing format specifiers).</param>\r
<seealso cref="M:Tizen.Tracer.End"/>\r
</member>\r
<member name="M:Tizen.Tracer.End">\r
<summary>\r
- Writes a trace event to indicate that the synchronous event has ended.\r
+ Writes a trace event to indicate that a synchronous event has ended.\r
</summary>\r
<remarks>\r
Tizen.Tracer.End() ends the most recently called Tizen.Tracer.Begin().\r
<remarks>\r
The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.\r
</remarks>\r
- <param name="cookie">An unique identifier for distinguishing simultaneous events</param>\r
- <param name="name">The name of event (optionally containing format specifiers)</param>\r
+ <param name="cookie">An unique identifier for distinguishing simultaneous events.</param>\r
+ <param name="name">The name of an event (optionally containing format specifiers).</param>\r
<seealso cref="!:Tizen.Tracer.AsyncEnd()"/>\r
</member>\r
<member name="M:Tizen.Tracer.AsyncEnd(System.Int32,System.String)">\r
<summary>\r
- Writes a trace event to indicate that the asynchronous event has ended.\r
+ Writes a trace event to indicate that an asynchronous event has ended.\r
</summary>\r
<remarks>\r
- Tizen.Tracer.AsyncEnd() ends matched Tizen.Tracer.AsyncBegin() which has same cookie and name.\r
+ Tizen.Tracer.AsyncEnd() ends matched Tizen.Tracer.AsyncBegin() which has the same cookie and name.\r
The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.\r
</remarks>\r
- <param name="cookie">An unique identifier for distinguishing simultaneous events</param>\r
- <param name="name">The name of event (optionally containing format specifiers)</param>\r
+ <param name="cookie">An unique identifier for distinguishing simultaneous events.</param>\r
+ <param name="name">The name of an event (optionally containing format specifiers).</param>\r
<seealso cref="!:Tizen.Tracer.AsyncBegin()"/>\r
</member>\r
<member name="M:Tizen.Tracer.TraceValue(System.Int32,System.String)">\r
<summary>\r
- Writes a trace event to track change of integer value.\r
+ Writes a trace event to track change of an integer value.\r
</summary>\r
<remarks>\r
The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.\r
</remarks>\r
- <param name="value">The integer variable to trace</param>\r
- <param name="name">The name of event (optionally containing format specifiers)</param>\r
+ <param name="value">The integer variable to trace.</param>\r
+ <param name="name">The name of an event (optionally containing format specifiers).</param>\r
</member>\r
</members>\r
</doc>\r
# Properties
OUTDIR=$SCRIPT_DIR/Artifacts
+
NUGET_CMD="mono $SCRIPT_DIR/tools/NuGet.exe"
+MSBUILD_CMD="dotnet msbuild"
+
+RUN_BUILD="$MSBUILD_CMD $SCRIPT_DIR/build/build.proj"
usage() {
echo "Usage: $0 [options] [args]"
echo " -c, --clean Clean all artifacts"
}
-dotnet_build() {
- if [ -d /nuget ]; then
- NUGET_SOURCE_OPT="--source /nuget"
- fi
- PROJ=$1; shift
- dotnet restore $PROJ $NUGET_SOURCE_OPT
- dotnet build $PROJ --no-restore --configuration=Release $@
-}
-
cmd_clean() {
- rm -fr $OUTDIR
- LIST=$(find $SCRIPT_DIR -type d -a -name bin -o -name obj)
- for d in $LIST; do
- rm -fr $d
- done
+ $RUN_BUILD /t:clean
}
cmd_build() {
echo "No module specified."
exit 1
fi
- dotnet_build $SCRIPT_DIR/src/$1 --output=$OUTDIR/bin
+ if [ -d /nuget ]; then
+ NUGET_SOURCE_OPT="/p:RestoreSources=/nuget"
+ fi
+ $RUN_BUILD /t:build /p:Project=$1 $NUGET_SOURCE_OPT
}
cmd_full_build() {
- dotnet_build $SCRIPT_DIR/pkg/Tizen.NET.Private.sln --output=$OUTDIR/bin
+ if [ -d /nuget ]; then
+ NUGET_SOURCE_OPT="/p:RestoreSources=/nuget"
+ fi
+ $RUN_BUILD /t:build $NUGET_SOURCE_OPT
}
cmd_pack() {
}
cmd_dummy_build() {
- dotnet_build $SCRIPT_DIR/pkg/Tizen.NET.Dummy.csproj
+ if [ -d /nuget ]; then
+ NUGET_SOURCE_OPT="/p:RestoreSources=/nuget"
+ fi
+ $RUN_BUILD /t:builddummy $NUGET_SOURCE_OPT
}
OPTS=`getopt -o hcbfpd --long help,clean,build,full,pack,dummy -n 'build' -- "$@"`
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
+ <Import Project="$(MSBuildThisFileDirectory)directories.props" />
+ <Import Project="$(MSBuildThisFileDirectory)version.props" />
+
<PropertyGroup>
<TargetFramework>netstandard1.6</TargetFramework>
<GenerateDependencyFile>false</GenerateDependencyFile>
- <DummyAssemblyVersion>99.0.0</DummyAssemblyVersion>
+ <DummyAssemblyVersion>$(VersionPrefix)</DummyAssemblyVersion>
+ <BaseIntermediateOutputPath>$(OutputBaseDir)obj\</BaseIntermediateOutputPath>
</PropertyGroup>
<!-- Properties for directories -->
<PropertyGroup>
- <ToolsDir>$(MSBuildThisFileDirectory)..\tools\GenAPI\</ToolsDir>
- <GenAPISourceDir>$(MSBuildThisFileDirectory)\..\Artifacts\bin\</GenAPISourceDir>
- <GenAPILibDir>$(MSBuildThisFileDirectory)obj\_ref_lib\</GenAPILibDir>
- <GenAPITargetDir>$(MSBuildThisFileDirectory)obj\_ref_api\</GenAPITargetDir>
- <DummyOutputPath>$(MSBuildThisFileDirectory)\..\Artifacts\bin_dummy</DummyOutputPath>
+ <IntermediateLibDir>$(BaseIntermediateOutputPath)_ref_lib\</IntermediateLibDir>
+ <IntermediateAPIDir>$(BaseIntermediateOutputPath)_ref_api\</IntermediateAPIDir>
</PropertyGroup>
<!-- Properties for GenAPI tool -->
<PropertyGroup>
- <GenAPIPath>$(ToolsDir)GenAPI.exe</GenAPIPath>
- <GenAPICommand>dotnet $(GenAPIPath)</GenAPICommand>
+ <GenAPICommand>dotnet $(GenAPIDir)GenAPI.exe</GenAPICommand>
</PropertyGroup>
<!-- Source assemblies -->
<ItemGroup>
- <TizenAssemblies Include="$(GenAPISourceDir)*.dll" />
+ <TizenAssemblies Include="$(OutputPublicDir)\*.dll" />
+ <TizenAssemblies Include="$(OutputPlatformDir)\*.dll" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<ItemGroup>
<ReferencePath Include="@(TizenAssemblies)" />
</ItemGroup>
- <MakeDir Directories="$(GenAPILibDir);$(GenAPITargetDir)" />
- <Copy SourceFiles="@(ReferencePath)" DestinationFolder="$(GenAPILibDir)" />
+ <MakeDir Directories="$(IntermediateLibDir);$(IntermediateAPIDir)" />
+ <Copy SourceFiles="@(ReferencePath)" DestinationFolder="$(IntermediateLibDir)" />
+ <RemoveDir Directories="$(OutputDummyDir)" />
+ <MakeDir Directories="$(OutputDummyDir)" />
</Target>
<!-- Target for generating *.AssemblyInfo.cs files -->
<Target Name="GenerateAsmInfo"
- Inputs="@(TizenAssemblies)" Outputs="$(GenAPITargetDir)%(Filename).AssemblyInfo.cs">
+ Inputs="@(TizenAssemblies)" Outputs="$(IntermediateAPIDir)%(Filename).AssemblyInfo.cs">
<PropertyGroup>
- <GeneratedAssemblyInfoSource>$(GenAPITargetDir)%(TizenAssemblies.Filename).AssemblyInfo.cs</GeneratedAssemblyInfoSource>
+ <GeneratedAssemblyInfoSource>$(IntermediateAPIDir)%(TizenAssemblies.Filename).AssemblyInfo.cs</GeneratedAssemblyInfoSource>
</PropertyGroup>
<ItemGroup>
<!-- Target for generating reference source files using GenAPI -->
<Target Name="GenerateAPI"
- Inputs="@(TizenAssemblies)" Outputs="$(GenAPITargetDir)%(Filename).cs">
+ Inputs="@(TizenAssemblies)" Outputs="$(IntermediateAPIDir)%(Filename).cs">
<PropertyGroup>
- <GeneratedReferenceAssemblySource>$(GenAPITargetDir)%(TizenAssemblies.Filename).cs</GeneratedReferenceAssemblySource>
+ <GeneratedReferenceAssemblySource>$(IntermediateAPIDir)%(TizenAssemblies.Filename).cs</GeneratedReferenceAssemblySource>
</PropertyGroup>
<Message Text="[GenAPI] %(TizenAssemblies.Filename) -> $(GeneratedReferenceAssemblySource)" Importance="High" />
- <Exec Command='$(GenAPICommand) -assembly:"%(TizenAssemblies.Identity)" -libPath:"$(GenAPILibDir)" -out:"$(GeneratedReferenceAssemblySource)" -throw:"Not Supported Feature" -global' />
+ <Exec Command='$(GenAPICommand) -assembly:"%(TizenAssemblies.Identity)" -libPath:"$(IntermediateLibDir)" -out:"$(GeneratedReferenceAssemblySource)" -throw:"Not Supported Feature" -global' />
</Target>
<Target Name="GenerateDummy"
DependsOnTargets="GenerateAsmInfo;GenerateAPI"
- Inputs="@(TizenAssemblies)" Outputs="$(OutputPath)%(TizenAssemblies.Filename).dll">
+ Inputs="@(TizenAssemblies)" Outputs="$(OutputDummyDir)%(TizenAssemblies.Filename).dll">
<PropertyGroup>
<ThisAssemblyFilename>%(TizenAssemblies.Filename)</ThisAssemblyFilename>
- <GeneratedAssemblyInfoSource>$(GenAPITargetDir)%(TizenAssemblies.Filename).AssemblyInfo.cs</GeneratedAssemblyInfoSource>
- <GeneratedReferenceAssemblySource>$(GenAPITargetDir)%(TizenAssemblies.Filename).cs</GeneratedReferenceAssemblySource>
- <GeneratedReferenceAssembly>$(OutputPath)%(TizenAssemblies.Filename).dll</GeneratedReferenceAssembly>
+ <GeneratedAssemblyInfoSource>$(IntermediateAPIDir)%(TizenAssemblies.Filename).AssemblyInfo.cs</GeneratedAssemblyInfoSource>
+ <GeneratedReferenceAssemblySource>$(IntermediateAPIDir)%(TizenAssemblies.Filename).cs</GeneratedReferenceAssemblySource>
+ <GeneratedReferenceAssembly>$(OutputDummyDir)%(TizenAssemblies.Filename).dll</GeneratedReferenceAssembly>
</PropertyGroup>
<Message Text="[Compile] %(TizenAssemblies.Filename) -> $(GeneratedReferenceAssembly)" Importance="High" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="Prepare;GenerateDummy">
- <RemoveDir Directories="$(DummyOutputPath)" />
- <MakeDir Directories="$(DummyOutputPath)" />
-
- <ItemGroup>
- <TizenRefAssemblies Include="$(OutDir)/*.dll" />
- </ItemGroup>
-
- <Copy SourceFiles="@(TizenRefAssemblies)" DestinationFolder="$(DummyOutputPath)" />
</Target>
</Project>
--- /dev/null
+<Project DefaultTargets="Build">
+
+ <Import Project="$(MSBuildThisFileDirectory)directories.props" />
+
+ <!-- Common Properties -->
+ <PropertyGroup>
+ <PublicModuleListFile>$(PackageSrcDir)PublicModuleList.txt</PublicModuleListFile>
+ </PropertyGroup>
+
+ <!-- Build Properties -->
+ <PropertyGroup>
+ <Configuration>Release</Configuration>
+ </PropertyGroup>
+
+ <!-- Projects to build -->
+ <ItemGroup>
+ <ProjectToBuild Include="$(ProjectSrcDir)\$(Project)\$(Project).csproj" Condition="'$(Project)' != ''" />
+ <ProjectToBuild Include="$(ProjectSrcDir)**\*.csproj" Condition="'$(Project)' == ''" />
+ </ItemGroup>
+
+ <!--
+ Target : Clean
+ ==============
+ Delete all artifacts,
+ including the Artifacts/ directory and the obj/ directories for all projects.
+ -->
+ <Target Name="Clean">
+
+ <ItemGroup>
+ <ProjectIntermediateAllFiles Include="$(ProjectSrcDir)**\obj\*" />
+ <ProjectIntermediateDir Include="@(ProjectIntermediateAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <DirToRemove Include="$(OutputBaseDir)" />
+ <DirToRemove Include="@(ProjectIntermediateDir)" />
+ </ItemGroup>
+
+ <RemoveDir Directories="@(DirToRemove)" />
+
+ </Target>
+
+
+ <!--
+ Target : Build
+ ==============
+ Build all projects in src/ directory.
+ The output(.dll, .pdb, .xml) of the project specfied in
+ pkg/PublicModuleList.txt is copied to Artifacts/bin/public,
+ and the rest are copied to Artifacts/bin/platform.
+ -->
+ <Target Name="Build" DependsOnTargets="Clean">
+
+ <MSBuild Projects="@(ProjectToBuild)"
+ Properties="Configuration=$(Configuration);OutDir=$(OutputPlatformDir);RestoreSources=$(RestoreSources)"
+ BuildInParallel="true"
+ UseResultsCache="true"
+ Targets="Restore;Rebuild" />
+
+ <ReadLinesFromFile File="$(PublicModuleListFile)">
+ <Output TaskParameter="Lines" ItemName="PublicProject" />
+ </ReadLinesFromFile>
+
+ <ItemGroup>
+ <PlatformFiles Include="$(OutputPlatformDir)*" />
+ <_PublicFilesToMove Include="$(OutputPlatformDir)%(PublicProject.Identity).dll" />
+ <_PublicFilesToMove Include="$(OutputPlatformDir)%(PublicProject.Identity).pdb" />
+ <_PublicFilesToMove Include="$(OutputPlatformDir)%(PublicProject.Identity).xml" />
+ <PublicFilesToMove Include="@(_PublicFilesToMove)" Condition="'@(PlatformFiles)' == '@(_PublicFilesToMove)' and '%(Identity)' != '' " />
+ </ItemGroup>
+
+ <MakeDir Directories="$(OutputPublicDir)" />
+ <Move SourceFiles="@(PublicFilesToMove)" DestinationFolder="$(OutputPublicDir)" />
+
+ <Message Text="Moved %(PublicFilesToMove.Filename)%(PublicFilesToMove.Extension) -> $(OutputPublicDir)%(PublicFilesToMove.Filename)%(PublicFilesToMove.Extension)" Importance="High" />
+
+ </Target>
+
+ <!--
+ Target : BuildDummy
+ ===================
+ Build dummy assemblies using GenAPI
+ -->
+ <Target Name="BuildDummy">
+
+ <MSBuild Projects="$(MSBuildThisFileDirectory)build.dummy.csproj"
+ Properties="Configuration=$(Configuration);OutDir=$(OutputBaseDir)\obj\bin;RestoreSources=$(RestoreSources)"
+ BuildInParallel="true"
+ UseResultsCache="true"
+ Targets="Restore;Rebuild" />
+
+ </Target>
+
+</Project>
--- /dev/null
+<Project>
+
+ <PropertyGroup>
+
+ <ProjectRootDir>$(MSBuildThisFileDirectory)..\</ProjectRootDir>
+
+ <ProjectSrcDir>$(ProjectRootDir)src\</ProjectSrcDir>
+ <PackageSrcDir>$(ProjectRootDir)pkg\</PackageSrcDir>
+
+ <ToolsDir>$(ProjectRootDir)tools\</ToolsDir>
+ <GenAPIDir>$(ToolsDir)GenAPI\</GenAPIDir>
+
+ <OutputBaseDir>$(ProjectRootDir)Artifacts\</OutputBaseDir>
+ <OutputPublicDir>$(OutputBaseDir)bin\public\</OutputPublicDir>
+ <OutputPlatformDir>$(OutputBaseDir)bin\platform\</OutputPlatformDir>
+ <OutputDummyDir>$(OutputBaseDir)bin\dummy\</OutputDummyDir>
+
+ </PropertyGroup>
+
+</Project>
\ No newline at end of file
Name: csapi-tizenfx
Summary: Assemblies of Tizen .NET
-Version: 4.0.0.154
+Version: 4.0.0.161
Release: 1
Group: Development/Libraries
License: Apache-2.0
mkdir -p %{buildroot}%{DOTNET_ASSEMBLY_RES_PATH}
mkdir -p %{buildroot}%{DOTNET_NUGET_SOURCE}
-install -p -m 644 %{_tizenfx_bin_path}/bin/*.dll %{buildroot}%{DOTNET_ASSEMBLY_PATH}
-install -p -m 644 %{_tizenfx_bin_path}/bin/*.pdb %{buildroot}%{DOTNET_ASSEMBLY_PATH}
-install -p -m 644 %{_tizenfx_bin_path}/bin/res/* %{buildroot}%{DOTNET_ASSEMBLY_RES_PATH}
-install -p -m 644 %{_tizenfx_bin_path}/bin_dummy/*.dll %{buildroot}%{DOTNET_ASSEMBLY_DUMMY_PATH}
+install -p -m 644 %{_tizenfx_bin_path}/bin/public/*.dll %{buildroot}%{DOTNET_ASSEMBLY_PATH}
+install -p -m 644 %{_tizenfx_bin_path}/bin/public/*.pdb %{buildroot}%{DOTNET_ASSEMBLY_PATH}
+install -p -m 644 %{_tizenfx_bin_path}/bin/platform/*.dll %{buildroot}%{DOTNET_ASSEMBLY_PATH}
+install -p -m 644 %{_tizenfx_bin_path}/bin/platform/*.pdb %{buildroot}%{DOTNET_ASSEMBLY_PATH}
+install -p -m 644 %{_tizenfx_bin_path}/bin/platform/res/* %{buildroot}%{DOTNET_ASSEMBLY_RES_PATH}
+install -p -m 644 %{_tizenfx_bin_path}/bin/dummy/*.dll %{buildroot}%{DOTNET_ASSEMBLY_DUMMY_PATH}
install -p -m 644 %{_tizenfx_bin_path}/*.nupkg %{buildroot}%{DOTNET_NUGET_SOURCE}
%files nuget
--- /dev/null
+ElmSharp
+ElmSharp.Wearable
+Tizen
+Tizen.Account.AccountManager
+Tizen.Account.FidoClient
+Tizen.Account.OAuth2
+Tizen.Account.SyncManager
+Tizen.Applications.Alarm
+Tizen.Applications.AttachPanel
+Tizen.Applications.Badge
+Tizen.Applications.Common
+Tizen.Applications.DataControl
+Tizen.Applications.MessagePort
+Tizen.Applications.Notification
+Tizen.Applications.NotificationEventListener
+Tizen.Applications.PackageManager
+Tizen.Applications.Preference
+Tizen.Applications.RemoteView
+Tizen.Applications.Service
+Tizen.Applications.ToastMessage
+Tizen.Applications.UI
+Tizen.Applications.WatchApplication
+Tizen.Applications.WidgetApplication
+Tizen.Applications.WidgetControl
+Tizen.Content.Download
+Tizen.Content.MediaContent
+Tizen.Content.MimeType
+Tizen.Context
+Tizen.Convergence
+Tizen.Location
+Tizen.Location.Geofence
+Tizen.Log
+Tizen.Maps
+Tizen.Messaging
+Tizen.Messaging.Push
+Tizen.Multimedia
+Tizen.Multimedia.AudioIO
+Tizen.Multimedia.Camera
+Tizen.Multimedia.MediaCodec
+Tizen.Multimedia.MediaPlayer
+Tizen.Multimedia.Metadata
+Tizen.Multimedia.Radio
+Tizen.Multimedia.Recorder
+Tizen.Multimedia.Remoting
+Tizen.Multimedia.StreamRecorder
+Tizen.Multimedia.Util
+Tizen.Multimedia.Vision
+Tizen.Network.Bluetooth
+Tizen.Network.Connection
+Tizen.Network.IoTConnectivity
+Tizen.Network.Nfc
+Tizen.Network.Nsd
+Tizen.Network.Smartcard
+Tizen.Network.WiFi
+Tizen.Network.WiFiDirect
+Tizen.NUI
+Tizen.PhonenumberUtils
+Tizen.Pims.Calendar
+Tizen.Pims.Contacts
+Tizen.Security
+Tizen.Security.SecureRepository
+Tizen.Security.TEEC
+Tizen.Sensor
+Tizen.System
+Tizen.System.Feedback
+Tizen.System.Information
+Tizen.System.MediaKey
+Tizen.System.PlatformConfig
+Tizen.System.Storage
+Tizen.System.SystemSettings
+Tizen.Telephony
+Tizen.Tracer
+Tizen.Uix.InputMethod
+Tizen.Uix.InputMethodManager
+Tizen.Uix.Stt
+Tizen.Uix.Tts
+Tizen.Uix.VoiceControl
+Tizen.WebView
<copyright>© Samsung Electronics Co., Ltd All Rights Reserved</copyright>
</metadata>
<files>
+
<file src="pkg\build\**" target="build" />
- <file src="Artifacts\bin\*.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\*.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\*.xml" target="lib\netstandard1.6" />
+
+ <file src="Artifacts\bin\public\*.dll" target="lib\netstandard1.6" />
+ <file src="Artifacts\bin\public\*.pdb" target="lib\netstandard1.6" />
+ <file src="Artifacts\bin\public\*.xml" target="lib\netstandard1.6" />
+
+ <file src="Artifacts\bin\platform\*.dll" target="lib\netstandard1.6" />
+ <file src="Artifacts\bin\platform\*.pdb" target="lib\netstandard1.6" />
+ <file src="Artifacts\bin\platform\*.xml" target="lib\netstandard1.6" />
+
</files>
</package>
+++ /dev/null
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26124.0
-MinimumVisualStudioVersion = 15.0.26124.0
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElmSharp", "..\src\ElmSharp\ElmSharp.csproj", "{0D605E7E-16C9-4712-B552-8E12A7E5DC1F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElmSharp.Wearable", "..\src\ElmSharp.Wearable\ElmSharp.Wearable.csproj", "{4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Account.AccountManager", "..\src\Tizen.Account.AccountManager\Tizen.Account.AccountManager.csproj", "{9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Account.FidoClient", "..\src\Tizen.Account.FidoClient\Tizen.Account.FidoClient.csproj", "{1DC41002-4450-41E3-BC10-DFC6CBCD79D7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Account.OAuth2", "..\src\Tizen.Account.OAuth2\Tizen.Account.OAuth2.csproj", "{CDBB2633-FE0B-485E-B864-DCA9240E6F7D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Account.SyncManager", "..\src\Tizen.Account.SyncManager\Tizen.Account.SyncManager.csproj", "{219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.Alarm", "..\src\Tizen.Applications.Alarm\Tizen.Applications.Alarm.csproj", "{6B8722E8-94A4-4739-B0E3-14F1B158BC81}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.AttachPanel", "..\src\Tizen.Applications.AttachPanel\Tizen.Applications.AttachPanel.csproj", "{3BACD1BC-613C-4A68-87F2-789B5937FBF6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.Badge", "..\src\Tizen.Applications.Badge\Tizen.Applications.Badge.csproj", "{0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.Common", "..\src\Tizen.Applications.Common\Tizen.Applications.Common.csproj", "{A4B36D9E-EB03-474E-B806-F6DE49391C13}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.DataControl", "..\src\Tizen.Applications.DataControl\Tizen.Applications.DataControl.csproj", "{51AA2490-864E-44E3-A5DF-ED27501EF572}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.MessagePort", "..\src\Tizen.Applications.MessagePort\Tizen.Applications.MessagePort.csproj", "{77F493B8-C41A-45A8-87F4-C07400070118}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.NotificationEventListener", "..\src\Tizen.Applications.NotificationEventListener\Tizen.Applications.NotificationEventListener.csproj", "{B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.Notification", "..\src\Tizen.Applications.Notification\Tizen.Applications.Notification.csproj", "{B459C1AE-938F-48BC-8720-7621DDB794A1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.PackageManager", "..\src\Tizen.Applications.PackageManager\Tizen.Applications.PackageManager.csproj", "{8AB5E861-FCBA-4A03-98A4-A99276167C9A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.Preference", "..\src\Tizen.Applications.Preference\Tizen.Applications.Preference.csproj", "{38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.RemoteView", "..\src\Tizen.Applications.RemoteView\Tizen.Applications.RemoteView.csproj", "{DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.Service", "..\src\Tizen.Applications.Service\Tizen.Applications.Service.csproj", "{F8FE708E-3840-4A50-970B-8633CDAB4B27}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.ToastMessage", "..\src\Tizen.Applications.ToastMessage\Tizen.Applications.ToastMessage.csproj", "{80548ED6-43AB-4849-9AD9-0C4CCB474E8D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.UI", "..\src\Tizen.Applications.UI\Tizen.Applications.UI.csproj", "{68FF3769-AE67-4B4E-A70B-5317A7079A26}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.WatchApplication", "..\src\Tizen.Applications.WatchApplication\Tizen.Applications.WatchApplication.csproj", "{1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.WidgetApplication", "..\src\Tizen.Applications.WidgetApplication\Tizen.Applications.WidgetApplication.csproj", "{9669CF47-ACDD-4827-9A3B-B794723274DC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Applications.WidgetControl", "..\src\Tizen.Applications.WidgetControl\Tizen.Applications.WidgetControl.csproj", "{26B1B984-955F-4576-B916-636DF40FB266}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Content.Download", "..\src\Tizen.Content.Download\Tizen.Content.Download.csproj", "{117CFB40-0142-4691-95F3-12898C5151F4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Content.MediaContent", "..\src\Tizen.Content.MediaContent\Tizen.Content.MediaContent.csproj", "{A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Content.MimeType", "..\src\Tizen.Content.MimeType\Tizen.Content.MimeType.csproj", "{ADD58969-549B-4D81-BEA4-63E53E945346}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Context", "..\src\Tizen.Context\Tizen.Context.csproj", "{6CF16C69-D77E-4206-B341-627B79055EEE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Convergence", "..\src\Tizen.Convergence\Tizen.Convergence.csproj", "{0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Location.Geofence", "..\src\Tizen.Location.Geofence\Tizen.Location.Geofence.csproj", "{C3F485D7-68AC-4984-8B33-722EF662CF76}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Location", "..\src\Tizen.Location\Tizen.Location.csproj", "{F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Log", "..\src\Tizen.Log\Tizen.Log.csproj", "{DC7B1462-603C-4A7C-A508-7CDDFAD522FD}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Maps", "..\src\Tizen.Maps\Tizen.Maps.csproj", "{A549B415-38F0-43D2-B849-169AEADB4546}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Messaging.Push", "..\src\Tizen.Messaging.Push\Tizen.Messaging.Push.csproj", "{4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Messaging", "..\src\Tizen.Messaging\Tizen.Messaging.csproj", "{4D00FBBA-C166-468F-9E01-7F2CE7170D94}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.AudioIO", "..\src\Tizen.Multimedia.AudioIO\Tizen.Multimedia.AudioIO.csproj", "{43B3461B-D18E-4171-8408-D5CF57C62CA3}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Camera", "..\src\Tizen.Multimedia.Camera\Tizen.Multimedia.Camera.csproj", "{6E85CF59-EFBB-4A3A-829D-0548C4F8055B}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.MediaCodec", "..\src\Tizen.Multimedia.MediaCodec\Tizen.Multimedia.MediaCodec.csproj", "{4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.MediaPlayer", "..\src\Tizen.Multimedia.MediaPlayer\Tizen.Multimedia.MediaPlayer.csproj", "{F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Metadata", "..\src\Tizen.Multimedia.Metadata\Tizen.Multimedia.Metadata.csproj", "{4490279B-E22A-445D-97C2-A0F9D842DAB1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Radio", "..\src\Tizen.Multimedia.Radio\Tizen.Multimedia.Radio.csproj", "{388EBC74-C8BF-487A-866B-8A000927FD54}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Recorder", "..\src\Tizen.Multimedia.Recorder\Tizen.Multimedia.Recorder.csproj", "{D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Remoting", "..\src\Tizen.Multimedia.Remoting\Tizen.Multimedia.Remoting.csproj", "{24BB2C29-5581-4A81-9CB8-4B9C5958F191}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.StreamRecorder", "..\src\Tizen.Multimedia.StreamRecorder\Tizen.Multimedia.StreamRecorder.csproj", "{84B1AADF-A0FE-4A7F-A949-B09E09876D3C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia", "..\src\Tizen.Multimedia\Tizen.Multimedia.csproj", "{332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Util", "..\src\Tizen.Multimedia.Util\Tizen.Multimedia.Util.csproj", "{DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Multimedia.Vision", "..\src\Tizen.Multimedia.Vision\Tizen.Multimedia.Vision.csproj", "{3FF44973-5B72-4B9F-83E7-58E4C316E1E7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.Bluetooth", "..\src\Tizen.Network.Bluetooth\Tizen.Network.Bluetooth.csproj", "{0C6E767F-18A4-4CDD-B088-F7C6138F0565}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.Connection", "..\src\Tizen.Network.Connection\Tizen.Network.Connection.csproj", "{2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.IoTConnectivity", "..\src\Tizen.Network.IoTConnectivity\Tizen.Network.IoTConnectivity.csproj", "{DECDDA97-C90D-40C4-9D9A-A5A125D052AC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.Mtp", "..\src\Tizen.Network.Mtp\Tizen.Network.Mtp.csproj", "{5CC05A2D-2779-4880-A28C-6800A85B5D9C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.Nfc", "..\src\Tizen.Network.Nfc\Tizen.Network.Nfc.csproj", "{D9DC78AA-A9D1-4232-837C-0CF20846B3D6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.Nsd", "..\src\Tizen.Network.Nsd\Tizen.Network.Nsd.csproj", "{393B4BDE-A451-41A7-A789-4473782BDF2D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.Smartcard", "..\src\Tizen.Network.Smartcard\Tizen.Network.Smartcard.csproj", "{28634B14-E0AD-423D-9A49-3650E0D15FC0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.WiFiDirect", "..\src\Tizen.Network.WiFiDirect\Tizen.Network.WiFiDirect.csproj", "{BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Network.WiFi", "..\src\Tizen.Network.WiFi\Tizen.Network.WiFi.csproj", "{99AFD4A2-9246-4077-8412-AB7DFACEDC8F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.NUI", "..\src\Tizen.NUI\Tizen.NUI.csproj", "{15153B43-717A-4EC7-811F-4F710837E52F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.PhonenumberUtils", "..\src\Tizen.PhonenumberUtils\Tizen.PhonenumberUtils.csproj", "{A4C62F2A-DFF0-43FA-9515-F12EB3756601}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Pims.Calendar", "..\src\Tizen.Pims.Calendar\Tizen.Pims.Calendar.csproj", "{2DCF26D7-98A5-4656-954E-3406CFB08686}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Pims.Contacts", "..\src\Tizen.Pims.Contacts\Tizen.Pims.Contacts.csproj", "{B7F19C82-AD09-41CF-AE9E-AFF27688DB68}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Security.SecureRepository", "..\src\Tizen.Security.SecureRepository\Tizen.Security.SecureRepository.csproj", "{8575483D-B37F-4C5A-B922-6A73787A6CF0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Security.TEEC", "..\src\Tizen.Security.TEEC\Tizen.Security.TEEC.csproj", "{D627334B-835C-4190-BF4A-9459C50D04D3}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Security", "..\src\Tizen.Security\Tizen.Security.csproj", "{8144C3F4-95D2-4179-A7AA-839699EBF374}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Sensor", "..\src\Tizen.Sensor\Tizen.Sensor.csproj", "{6D5251AE-1567-444C-B5D9-D00C54104A1D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.Feedback", "..\src\Tizen.System.Feedback\Tizen.System.Feedback.csproj", "{94768F01-A559-439F-96A6-F6970116A36F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.Information", "..\src\Tizen.System.Information\Tizen.System.Information.csproj", "{01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.MediaKey", "..\src\Tizen.System.MediaKey\Tizen.System.MediaKey.csproj", "{2477737B-DD06-4635-B508-1CB7EE01E805}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.PlatformConfig", "..\src\Tizen.System.PlatformConfig\Tizen.System.PlatformConfig.csproj", "{B2B0B253-1090-44B4-86EC-361D956E88D8}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.Storage", "..\src\Tizen.System.Storage\Tizen.System.Storage.csproj", "{30568DC1-552D-4967-A819-2E2086D9A37E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.SystemSettings", "..\src\Tizen.System.SystemSettings\Tizen.System.SystemSettings.csproj", "{E79C72F5-176F-4935-91F5-79A5C84B0DD5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System", "..\src\Tizen.System\Tizen.System.csproj", "{CD30D882-6FEE-46F2-A004-AB136BAA97AC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Tapi", "..\src\Tizen.Tapi\Tizen.Tapi.csproj", "{471CBB4B-E6E7-430C-96DD-514CE60FB472}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Telephony", "..\src\Tizen.Telephony\Tizen.Telephony.csproj", "{1DD172EF-123C-415B-B278-F67579C2B3CC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen", "..\src\Tizen\Tizen.csproj", "{C8124B80-00A6-44EF-A828-7068AB09975A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Tracer", "..\src\Tizen.Tracer\Tizen.Tracer.csproj", "{9ABC91A3-9B8E-46C8-A580-34E1DF79E872}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.InputMethodManager", "..\src\Tizen.Uix.InputMethodManager\Tizen.Uix.InputMethodManager.csproj", "{BA0A7D4D-2689-4B6D-8F14-1532112E225C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.InputMethod", "..\src\Tizen.Uix.InputMethod\Tizen.Uix.InputMethod.csproj", "{CC8D1830-ECDB-4083-8D60-A83B2876FA62}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.SttEngine", "..\src\Tizen.Uix.SttEngine\Tizen.Uix.SttEngine.csproj", "{712DF299-955A-4321-8320-0FD8A1988FF4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.Stt", "..\src\Tizen.Uix.Stt\Tizen.Uix.Stt.csproj", "{C7810220-7BC8-4C4B-8613-9575E1C48AA5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.TtsEngine", "..\src\Tizen.Uix.TtsEngine\Tizen.Uix.TtsEngine.csproj", "{9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.Tts", "..\src\Tizen.Uix.Tts\Tizen.Uix.Tts.csproj", "{4D0771DE-46FB-481E-B3F9-42980EED680C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.Uix.VoiceControl", "..\src\Tizen.Uix.VoiceControl\Tizen.Uix.VoiceControl.csproj", "{34484E72-8CEF-4784-81F5-041754B21BB1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.WebView", "..\src\Tizen.WebView\Tizen.WebView.csproj", "{8D3289A5-591B-421D-A79C-776B9AC74B95}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.CallManager", "..\src\Tizen.CallManager\Tizen.CallManager.csproj", "{05DD16B8-2027-4728-AEB6-6296E7457533}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Debug|x64.ActiveCfg = Debug|x64
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Debug|x64.Build.0 = Debug|x64
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Debug|x86.ActiveCfg = Debug|x86
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Debug|x86.Build.0 = Debug|x86
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Release|Any CPU.Build.0 = Release|Any CPU
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Release|x64.ActiveCfg = Release|x64
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Release|x64.Build.0 = Release|x64
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Release|x86.ActiveCfg = Release|x86
- {0D605E7E-16C9-4712-B552-8E12A7E5DC1F}.Release|x86.Build.0 = Release|x86
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Debug|x64.ActiveCfg = Debug|x64
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Debug|x64.Build.0 = Debug|x64
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Debug|x86.ActiveCfg = Debug|x86
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Debug|x86.Build.0 = Debug|x86
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Release|Any CPU.Build.0 = Release|Any CPU
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Release|x64.ActiveCfg = Release|x64
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Release|x64.Build.0 = Release|x64
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Release|x86.ActiveCfg = Release|x86
- {4E8F5601-3178-46E6-9BCC-D3A6CE81FDB1}.Release|x86.Build.0 = Release|x86
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Debug|x64.ActiveCfg = Debug|x64
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Debug|x64.Build.0 = Debug|x64
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Debug|x86.ActiveCfg = Debug|x86
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Debug|x86.Build.0 = Debug|x86
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Release|x64.ActiveCfg = Release|x64
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Release|x64.Build.0 = Release|x64
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Release|x86.ActiveCfg = Release|x86
- {9B861D1E-6556-4061-9D0A-EFAFDA6D28ED}.Release|x86.Build.0 = Release|x86
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Debug|x64.ActiveCfg = Debug|x64
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Debug|x64.Build.0 = Debug|x64
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Debug|x86.ActiveCfg = Debug|x86
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Debug|x86.Build.0 = Debug|x86
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Release|Any CPU.Build.0 = Release|Any CPU
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Release|x64.ActiveCfg = Release|x64
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Release|x64.Build.0 = Release|x64
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Release|x86.ActiveCfg = Release|x86
- {1DC41002-4450-41E3-BC10-DFC6CBCD79D7}.Release|x86.Build.0 = Release|x86
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Debug|x64.ActiveCfg = Debug|x64
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Debug|x64.Build.0 = Debug|x64
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Debug|x86.ActiveCfg = Debug|x86
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Debug|x86.Build.0 = Debug|x86
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Release|Any CPU.Build.0 = Release|Any CPU
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Release|x64.ActiveCfg = Release|x64
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Release|x64.Build.0 = Release|x64
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Release|x86.ActiveCfg = Release|x86
- {CDBB2633-FE0B-485E-B864-DCA9240E6F7D}.Release|x86.Build.0 = Release|x86
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Debug|x64.ActiveCfg = Debug|x64
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Debug|x64.Build.0 = Debug|x64
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Debug|x86.ActiveCfg = Debug|x86
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Debug|x86.Build.0 = Debug|x86
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Release|Any CPU.Build.0 = Release|Any CPU
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Release|x64.ActiveCfg = Release|x64
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Release|x64.Build.0 = Release|x64
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Release|x86.ActiveCfg = Release|x86
- {219B1BF6-E17C-42BC-82A3-7B0C81E23AA6}.Release|x86.Build.0 = Release|x86
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Debug|x64.ActiveCfg = Debug|x64
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Debug|x64.Build.0 = Debug|x64
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Debug|x86.ActiveCfg = Debug|x86
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Debug|x86.Build.0 = Debug|x86
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Release|Any CPU.Build.0 = Release|Any CPU
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Release|x64.ActiveCfg = Release|x64
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Release|x64.Build.0 = Release|x64
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Release|x86.ActiveCfg = Release|x86
- {6B8722E8-94A4-4739-B0E3-14F1B158BC81}.Release|x86.Build.0 = Release|x86
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Debug|x64.ActiveCfg = Debug|x64
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Debug|x64.Build.0 = Debug|x64
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Debug|x86.ActiveCfg = Debug|x86
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Debug|x86.Build.0 = Debug|x86
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Release|Any CPU.Build.0 = Release|Any CPU
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Release|x64.ActiveCfg = Release|x64
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Release|x64.Build.0 = Release|x64
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Release|x86.ActiveCfg = Release|x86
- {3BACD1BC-613C-4A68-87F2-789B5937FBF6}.Release|x86.Build.0 = Release|x86
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Debug|x64.ActiveCfg = Debug|x64
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Debug|x64.Build.0 = Debug|x64
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Debug|x86.ActiveCfg = Debug|x86
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Debug|x86.Build.0 = Debug|x86
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Release|Any CPU.Build.0 = Release|Any CPU
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Release|x64.ActiveCfg = Release|x64
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Release|x64.Build.0 = Release|x64
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Release|x86.ActiveCfg = Release|x86
- {0E1B996F-1ADA-44EA-B2E4-A32050BF5E9C}.Release|x86.Build.0 = Release|x86
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Debug|x64.ActiveCfg = Debug|x64
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Debug|x64.Build.0 = Debug|x64
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Debug|x86.ActiveCfg = Debug|x86
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Debug|x86.Build.0 = Debug|x86
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Release|Any CPU.Build.0 = Release|Any CPU
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Release|x64.ActiveCfg = Release|x64
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Release|x64.Build.0 = Release|x64
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Release|x86.ActiveCfg = Release|x86
- {A4B36D9E-EB03-474E-B806-F6DE49391C13}.Release|x86.Build.0 = Release|x86
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Debug|x64.ActiveCfg = Debug|x64
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Debug|x64.Build.0 = Debug|x64
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Debug|x86.ActiveCfg = Debug|x86
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Debug|x86.Build.0 = Debug|x86
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Release|Any CPU.Build.0 = Release|Any CPU
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Release|x64.ActiveCfg = Release|x64
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Release|x64.Build.0 = Release|x64
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Release|x86.ActiveCfg = Release|x86
- {51AA2490-864E-44E3-A5DF-ED27501EF572}.Release|x86.Build.0 = Release|x86
- {77F493B8-C41A-45A8-87F4-C07400070118}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {77F493B8-C41A-45A8-87F4-C07400070118}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {77F493B8-C41A-45A8-87F4-C07400070118}.Debug|x64.ActiveCfg = Debug|x64
- {77F493B8-C41A-45A8-87F4-C07400070118}.Debug|x64.Build.0 = Debug|x64
- {77F493B8-C41A-45A8-87F4-C07400070118}.Debug|x86.ActiveCfg = Debug|x86
- {77F493B8-C41A-45A8-87F4-C07400070118}.Debug|x86.Build.0 = Debug|x86
- {77F493B8-C41A-45A8-87F4-C07400070118}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {77F493B8-C41A-45A8-87F4-C07400070118}.Release|Any CPU.Build.0 = Release|Any CPU
- {77F493B8-C41A-45A8-87F4-C07400070118}.Release|x64.ActiveCfg = Release|x64
- {77F493B8-C41A-45A8-87F4-C07400070118}.Release|x64.Build.0 = Release|x64
- {77F493B8-C41A-45A8-87F4-C07400070118}.Release|x86.ActiveCfg = Release|x86
- {77F493B8-C41A-45A8-87F4-C07400070118}.Release|x86.Build.0 = Release|x86
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Debug|x64.ActiveCfg = Debug|x64
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Debug|x64.Build.0 = Debug|x64
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Debug|x86.ActiveCfg = Debug|x86
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Debug|x86.Build.0 = Debug|x86
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Release|Any CPU.Build.0 = Release|Any CPU
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Release|x64.ActiveCfg = Release|x64
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Release|x64.Build.0 = Release|x64
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Release|x86.ActiveCfg = Release|x86
- {B740FCEA-A2BF-4F0E-B4C0-C1F1ACBEA680}.Release|x86.Build.0 = Release|x86
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Debug|x64.ActiveCfg = Debug|x64
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Debug|x64.Build.0 = Debug|x64
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Debug|x86.ActiveCfg = Debug|x86
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Debug|x86.Build.0 = Debug|x86
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Release|Any CPU.Build.0 = Release|Any CPU
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Release|x64.ActiveCfg = Release|x64
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Release|x64.Build.0 = Release|x64
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Release|x86.ActiveCfg = Release|x86
- {B459C1AE-938F-48BC-8720-7621DDB794A1}.Release|x86.Build.0 = Release|x86
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Debug|x64.ActiveCfg = Debug|x64
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Debug|x64.Build.0 = Debug|x64
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Debug|x86.ActiveCfg = Debug|x86
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Debug|x86.Build.0 = Debug|x86
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Release|Any CPU.Build.0 = Release|Any CPU
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Release|x64.ActiveCfg = Release|x64
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Release|x64.Build.0 = Release|x64
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Release|x86.ActiveCfg = Release|x86
- {8AB5E861-FCBA-4A03-98A4-A99276167C9A}.Release|x86.Build.0 = Release|x86
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Debug|x64.ActiveCfg = Debug|x64
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Debug|x64.Build.0 = Debug|x64
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Debug|x86.ActiveCfg = Debug|x86
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Debug|x86.Build.0 = Debug|x86
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Release|Any CPU.Build.0 = Release|Any CPU
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Release|x64.ActiveCfg = Release|x64
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Release|x64.Build.0 = Release|x64
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Release|x86.ActiveCfg = Release|x86
- {38CFEE4D-1272-41EF-ABC8-C2AB7A6BAE34}.Release|x86.Build.0 = Release|x86
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Debug|x64.ActiveCfg = Debug|x64
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Debug|x64.Build.0 = Debug|x64
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Debug|x86.ActiveCfg = Debug|x86
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Debug|x86.Build.0 = Debug|x86
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Release|Any CPU.Build.0 = Release|Any CPU
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Release|x64.ActiveCfg = Release|x64
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Release|x64.Build.0 = Release|x64
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Release|x86.ActiveCfg = Release|x86
- {DE8F9D90-02EB-44B1-9C64-038EB1D21E8D}.Release|x86.Build.0 = Release|x86
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Debug|x64.ActiveCfg = Debug|x64
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Debug|x64.Build.0 = Debug|x64
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Debug|x86.ActiveCfg = Debug|x86
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Debug|x86.Build.0 = Debug|x86
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Release|Any CPU.Build.0 = Release|Any CPU
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Release|x64.ActiveCfg = Release|x64
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Release|x64.Build.0 = Release|x64
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Release|x86.ActiveCfg = Release|x86
- {F8FE708E-3840-4A50-970B-8633CDAB4B27}.Release|x86.Build.0 = Release|x86
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Debug|x64.ActiveCfg = Debug|x64
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Debug|x64.Build.0 = Debug|x64
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Debug|x86.ActiveCfg = Debug|x86
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Debug|x86.Build.0 = Debug|x86
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Release|Any CPU.Build.0 = Release|Any CPU
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Release|x64.ActiveCfg = Release|x64
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Release|x64.Build.0 = Release|x64
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Release|x86.ActiveCfg = Release|x86
- {80548ED6-43AB-4849-9AD9-0C4CCB474E8D}.Release|x86.Build.0 = Release|x86
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Debug|x64.ActiveCfg = Debug|x64
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Debug|x64.Build.0 = Debug|x64
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Debug|x86.ActiveCfg = Debug|x86
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Debug|x86.Build.0 = Debug|x86
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Release|Any CPU.Build.0 = Release|Any CPU
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Release|x64.ActiveCfg = Release|x64
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Release|x64.Build.0 = Release|x64
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Release|x86.ActiveCfg = Release|x86
- {68FF3769-AE67-4B4E-A70B-5317A7079A26}.Release|x86.Build.0 = Release|x86
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Debug|x64.ActiveCfg = Debug|x64
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Debug|x64.Build.0 = Debug|x64
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Debug|x86.ActiveCfg = Debug|x86
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Debug|x86.Build.0 = Debug|x86
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Release|Any CPU.Build.0 = Release|Any CPU
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Release|x64.ActiveCfg = Release|x64
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Release|x64.Build.0 = Release|x64
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Release|x86.ActiveCfg = Release|x86
- {1E2CC8BB-6C8E-4A03-B25C-D08F5502E24D}.Release|x86.Build.0 = Release|x86
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Debug|x64.ActiveCfg = Debug|x64
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Debug|x64.Build.0 = Debug|x64
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Debug|x86.ActiveCfg = Debug|x86
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Debug|x86.Build.0 = Debug|x86
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Release|Any CPU.Build.0 = Release|Any CPU
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Release|x64.ActiveCfg = Release|x64
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Release|x64.Build.0 = Release|x64
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Release|x86.ActiveCfg = Release|x86
- {9669CF47-ACDD-4827-9A3B-B794723274DC}.Release|x86.Build.0 = Release|x86
- {26B1B984-955F-4576-B916-636DF40FB266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {26B1B984-955F-4576-B916-636DF40FB266}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {26B1B984-955F-4576-B916-636DF40FB266}.Debug|x64.ActiveCfg = Debug|x64
- {26B1B984-955F-4576-B916-636DF40FB266}.Debug|x64.Build.0 = Debug|x64
- {26B1B984-955F-4576-B916-636DF40FB266}.Debug|x86.ActiveCfg = Debug|x86
- {26B1B984-955F-4576-B916-636DF40FB266}.Debug|x86.Build.0 = Debug|x86
- {26B1B984-955F-4576-B916-636DF40FB266}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {26B1B984-955F-4576-B916-636DF40FB266}.Release|Any CPU.Build.0 = Release|Any CPU
- {26B1B984-955F-4576-B916-636DF40FB266}.Release|x64.ActiveCfg = Release|x64
- {26B1B984-955F-4576-B916-636DF40FB266}.Release|x64.Build.0 = Release|x64
- {26B1B984-955F-4576-B916-636DF40FB266}.Release|x86.ActiveCfg = Release|x86
- {26B1B984-955F-4576-B916-636DF40FB266}.Release|x86.Build.0 = Release|x86
- {117CFB40-0142-4691-95F3-12898C5151F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {117CFB40-0142-4691-95F3-12898C5151F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {117CFB40-0142-4691-95F3-12898C5151F4}.Debug|x64.ActiveCfg = Debug|x64
- {117CFB40-0142-4691-95F3-12898C5151F4}.Debug|x64.Build.0 = Debug|x64
- {117CFB40-0142-4691-95F3-12898C5151F4}.Debug|x86.ActiveCfg = Debug|x86
- {117CFB40-0142-4691-95F3-12898C5151F4}.Debug|x86.Build.0 = Debug|x86
- {117CFB40-0142-4691-95F3-12898C5151F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {117CFB40-0142-4691-95F3-12898C5151F4}.Release|Any CPU.Build.0 = Release|Any CPU
- {117CFB40-0142-4691-95F3-12898C5151F4}.Release|x64.ActiveCfg = Release|x64
- {117CFB40-0142-4691-95F3-12898C5151F4}.Release|x64.Build.0 = Release|x64
- {117CFB40-0142-4691-95F3-12898C5151F4}.Release|x86.ActiveCfg = Release|x86
- {117CFB40-0142-4691-95F3-12898C5151F4}.Release|x86.Build.0 = Release|x86
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Debug|x64.ActiveCfg = Debug|x64
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Debug|x64.Build.0 = Debug|x64
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Debug|x86.ActiveCfg = Debug|x86
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Debug|x86.Build.0 = Debug|x86
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Release|Any CPU.Build.0 = Release|Any CPU
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Release|x64.ActiveCfg = Release|x64
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Release|x64.Build.0 = Release|x64
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Release|x86.ActiveCfg = Release|x86
- {A88B9C02-02C5-42CE-8D77-369EB5E6D3E4}.Release|x86.Build.0 = Release|x86
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Debug|x64.ActiveCfg = Debug|x64
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Debug|x64.Build.0 = Debug|x64
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Debug|x86.ActiveCfg = Debug|x86
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Debug|x86.Build.0 = Debug|x86
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Release|Any CPU.Build.0 = Release|Any CPU
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Release|x64.ActiveCfg = Release|x64
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Release|x64.Build.0 = Release|x64
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Release|x86.ActiveCfg = Release|x86
- {ADD58969-549B-4D81-BEA4-63E53E945346}.Release|x86.Build.0 = Release|x86
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Debug|x64.ActiveCfg = Debug|x64
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Debug|x64.Build.0 = Debug|x64
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Debug|x86.ActiveCfg = Debug|x86
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Debug|x86.Build.0 = Debug|x86
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Release|Any CPU.Build.0 = Release|Any CPU
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Release|x64.ActiveCfg = Release|x64
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Release|x64.Build.0 = Release|x64
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Release|x86.ActiveCfg = Release|x86
- {6CF16C69-D77E-4206-B341-627B79055EEE}.Release|x86.Build.0 = Release|x86
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Debug|x64.ActiveCfg = Debug|x64
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Debug|x64.Build.0 = Debug|x64
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Debug|x86.ActiveCfg = Debug|x86
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Debug|x86.Build.0 = Debug|x86
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Release|Any CPU.Build.0 = Release|Any CPU
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Release|x64.ActiveCfg = Release|x64
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Release|x64.Build.0 = Release|x64
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Release|x86.ActiveCfg = Release|x86
- {0EA2DB94-3A00-4F43-B4AE-0F58A2FE13A6}.Release|x86.Build.0 = Release|x86
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Debug|x64.ActiveCfg = Debug|x64
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Debug|x64.Build.0 = Debug|x64
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Debug|x86.ActiveCfg = Debug|x86
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Debug|x86.Build.0 = Debug|x86
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Release|Any CPU.Build.0 = Release|Any CPU
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Release|x64.ActiveCfg = Release|x64
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Release|x64.Build.0 = Release|x64
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Release|x86.ActiveCfg = Release|x86
- {C3F485D7-68AC-4984-8B33-722EF662CF76}.Release|x86.Build.0 = Release|x86
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Debug|x64.ActiveCfg = Debug|x64
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Debug|x64.Build.0 = Debug|x64
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Debug|x86.ActiveCfg = Debug|x86
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Debug|x86.Build.0 = Debug|x86
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Release|Any CPU.Build.0 = Release|Any CPU
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Release|x64.ActiveCfg = Release|x64
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Release|x64.Build.0 = Release|x64
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Release|x86.ActiveCfg = Release|x86
- {F9C442C8-DD85-498C-9D7A-4848B4DBBAF2}.Release|x86.Build.0 = Release|x86
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Debug|x64.ActiveCfg = Debug|x64
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Debug|x64.Build.0 = Debug|x64
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Debug|x86.ActiveCfg = Debug|x86
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Debug|x86.Build.0 = Debug|x86
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Release|Any CPU.Build.0 = Release|Any CPU
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Release|x64.ActiveCfg = Release|x64
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Release|x64.Build.0 = Release|x64
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Release|x86.ActiveCfg = Release|x86
- {DC7B1462-603C-4A7C-A508-7CDDFAD522FD}.Release|x86.Build.0 = Release|x86
- {A549B415-38F0-43D2-B849-169AEADB4546}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A549B415-38F0-43D2-B849-169AEADB4546}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A549B415-38F0-43D2-B849-169AEADB4546}.Debug|x64.ActiveCfg = Debug|x64
- {A549B415-38F0-43D2-B849-169AEADB4546}.Debug|x64.Build.0 = Debug|x64
- {A549B415-38F0-43D2-B849-169AEADB4546}.Debug|x86.ActiveCfg = Debug|x86
- {A549B415-38F0-43D2-B849-169AEADB4546}.Debug|x86.Build.0 = Debug|x86
- {A549B415-38F0-43D2-B849-169AEADB4546}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A549B415-38F0-43D2-B849-169AEADB4546}.Release|Any CPU.Build.0 = Release|Any CPU
- {A549B415-38F0-43D2-B849-169AEADB4546}.Release|x64.ActiveCfg = Release|x64
- {A549B415-38F0-43D2-B849-169AEADB4546}.Release|x64.Build.0 = Release|x64
- {A549B415-38F0-43D2-B849-169AEADB4546}.Release|x86.ActiveCfg = Release|x86
- {A549B415-38F0-43D2-B849-169AEADB4546}.Release|x86.Build.0 = Release|x86
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Debug|x64.ActiveCfg = Debug|x64
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Debug|x64.Build.0 = Debug|x64
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Debug|x86.ActiveCfg = Debug|x86
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Debug|x86.Build.0 = Debug|x86
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Release|Any CPU.Build.0 = Release|Any CPU
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Release|x64.ActiveCfg = Release|x64
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Release|x64.Build.0 = Release|x64
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Release|x86.ActiveCfg = Release|x86
- {4C3EB42E-FAA5-4F05-AAD5-24D5DEFA2CD3}.Release|x86.Build.0 = Release|x86
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Debug|x64.ActiveCfg = Debug|x64
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Debug|x64.Build.0 = Debug|x64
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Debug|x86.ActiveCfg = Debug|x86
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Debug|x86.Build.0 = Debug|x86
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Release|Any CPU.Build.0 = Release|Any CPU
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Release|x64.ActiveCfg = Release|x64
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Release|x64.Build.0 = Release|x64
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Release|x86.ActiveCfg = Release|x86
- {4D00FBBA-C166-468F-9E01-7F2CE7170D94}.Release|x86.Build.0 = Release|x86
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Debug|x64.ActiveCfg = Debug|x64
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Debug|x64.Build.0 = Debug|x64
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Debug|x86.ActiveCfg = Debug|x86
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Debug|x86.Build.0 = Debug|x86
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Release|Any CPU.Build.0 = Release|Any CPU
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Release|x64.ActiveCfg = Release|x64
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Release|x64.Build.0 = Release|x64
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Release|x86.ActiveCfg = Release|x86
- {43B3461B-D18E-4171-8408-D5CF57C62CA3}.Release|x86.Build.0 = Release|x86
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Debug|x64.ActiveCfg = Debug|x64
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Debug|x64.Build.0 = Debug|x64
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Debug|x86.ActiveCfg = Debug|x86
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Debug|x86.Build.0 = Debug|x86
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Release|Any CPU.Build.0 = Release|Any CPU
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Release|x64.ActiveCfg = Release|x64
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Release|x64.Build.0 = Release|x64
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Release|x86.ActiveCfg = Release|x86
- {6E85CF59-EFBB-4A3A-829D-0548C4F8055B}.Release|x86.Build.0 = Release|x86
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Debug|x64.ActiveCfg = Debug|x64
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Debug|x64.Build.0 = Debug|x64
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Debug|x86.ActiveCfg = Debug|x86
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Debug|x86.Build.0 = Debug|x86
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Release|Any CPU.Build.0 = Release|Any CPU
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Release|x64.ActiveCfg = Release|x64
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Release|x64.Build.0 = Release|x64
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Release|x86.ActiveCfg = Release|x86
- {4FF30C99-1F45-470D-BDE4-AA38A75B6AD4}.Release|x86.Build.0 = Release|x86
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Debug|x64.ActiveCfg = Debug|x64
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Debug|x64.Build.0 = Debug|x64
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Debug|x86.ActiveCfg = Debug|x86
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Debug|x86.Build.0 = Debug|x86
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Release|Any CPU.Build.0 = Release|Any CPU
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Release|x64.ActiveCfg = Release|x64
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Release|x64.Build.0 = Release|x64
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Release|x86.ActiveCfg = Release|x86
- {F795D2B1-6471-4C3F-82DB-AC8F27DEEFE7}.Release|x86.Build.0 = Release|x86
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Debug|x64.ActiveCfg = Debug|x64
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Debug|x64.Build.0 = Debug|x64
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Debug|x86.ActiveCfg = Debug|x86
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Debug|x86.Build.0 = Debug|x86
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Release|Any CPU.Build.0 = Release|Any CPU
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Release|x64.ActiveCfg = Release|x64
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Release|x64.Build.0 = Release|x64
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Release|x86.ActiveCfg = Release|x86
- {4490279B-E22A-445D-97C2-A0F9D842DAB1}.Release|x86.Build.0 = Release|x86
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Debug|x64.ActiveCfg = Debug|x64
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Debug|x64.Build.0 = Debug|x64
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Debug|x86.ActiveCfg = Debug|x86
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Debug|x86.Build.0 = Debug|x86
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Release|Any CPU.Build.0 = Release|Any CPU
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Release|x64.ActiveCfg = Release|x64
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Release|x64.Build.0 = Release|x64
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Release|x86.ActiveCfg = Release|x86
- {388EBC74-C8BF-487A-866B-8A000927FD54}.Release|x86.Build.0 = Release|x86
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Debug|x64.ActiveCfg = Debug|x64
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Debug|x64.Build.0 = Debug|x64
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Debug|x86.ActiveCfg = Debug|x86
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Debug|x86.Build.0 = Debug|x86
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Release|Any CPU.Build.0 = Release|Any CPU
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Release|x64.ActiveCfg = Release|x64
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Release|x64.Build.0 = Release|x64
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Release|x86.ActiveCfg = Release|x86
- {D9AF6F5C-65A5-4C44-A3F6-3B6509E6065E}.Release|x86.Build.0 = Release|x86
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Debug|x64.ActiveCfg = Debug|x64
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Debug|x64.Build.0 = Debug|x64
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Debug|x86.ActiveCfg = Debug|x86
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Debug|x86.Build.0 = Debug|x86
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Release|Any CPU.Build.0 = Release|Any CPU
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Release|x64.ActiveCfg = Release|x64
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Release|x64.Build.0 = Release|x64
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Release|x86.ActiveCfg = Release|x86
- {24BB2C29-5581-4A81-9CB8-4B9C5958F191}.Release|x86.Build.0 = Release|x86
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Debug|x64.ActiveCfg = Debug|x64
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Debug|x64.Build.0 = Debug|x64
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Debug|x86.ActiveCfg = Debug|x86
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Debug|x86.Build.0 = Debug|x86
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Release|Any CPU.Build.0 = Release|Any CPU
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Release|x64.ActiveCfg = Release|x64
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Release|x64.Build.0 = Release|x64
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Release|x86.ActiveCfg = Release|x86
- {84B1AADF-A0FE-4A7F-A949-B09E09876D3C}.Release|x86.Build.0 = Release|x86
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Debug|x64.ActiveCfg = Debug|x64
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Debug|x64.Build.0 = Debug|x64
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Debug|x86.ActiveCfg = Debug|x86
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Debug|x86.Build.0 = Debug|x86
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Release|Any CPU.Build.0 = Release|Any CPU
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Release|x64.ActiveCfg = Release|x64
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Release|x64.Build.0 = Release|x64
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Release|x86.ActiveCfg = Release|x86
- {332D8741-D321-4CFE-A5DB-6DFE6F08A7A6}.Release|x86.Build.0 = Release|x86
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Debug|x64.ActiveCfg = Debug|x64
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Debug|x64.Build.0 = Debug|x64
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Debug|x86.ActiveCfg = Debug|x86
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Debug|x86.Build.0 = Debug|x86
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Release|Any CPU.Build.0 = Release|Any CPU
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Release|x64.ActiveCfg = Release|x64
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Release|x64.Build.0 = Release|x64
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Release|x86.ActiveCfg = Release|x86
- {DFC3C500-66EB-45B2-BBC2-BBFE7E8466A4}.Release|x86.Build.0 = Release|x86
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Debug|x64.ActiveCfg = Debug|x64
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Debug|x64.Build.0 = Debug|x64
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Debug|x86.ActiveCfg = Debug|x86
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Debug|x86.Build.0 = Debug|x86
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Release|Any CPU.Build.0 = Release|Any CPU
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Release|x64.ActiveCfg = Release|x64
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Release|x64.Build.0 = Release|x64
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Release|x86.ActiveCfg = Release|x86
- {3FF44973-5B72-4B9F-83E7-58E4C316E1E7}.Release|x86.Build.0 = Release|x86
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Debug|x64.ActiveCfg = Debug|x64
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Debug|x64.Build.0 = Debug|x64
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Debug|x86.ActiveCfg = Debug|x86
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Debug|x86.Build.0 = Debug|x86
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Release|Any CPU.Build.0 = Release|Any CPU
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Release|x64.ActiveCfg = Release|x64
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Release|x64.Build.0 = Release|x64
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Release|x86.ActiveCfg = Release|x86
- {0C6E767F-18A4-4CDD-B088-F7C6138F0565}.Release|x86.Build.0 = Release|x86
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Debug|x64.ActiveCfg = Debug|x64
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Debug|x64.Build.0 = Debug|x64
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Debug|x86.ActiveCfg = Debug|x86
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Debug|x86.Build.0 = Debug|x86
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Release|Any CPU.Build.0 = Release|Any CPU
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Release|x64.ActiveCfg = Release|x64
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Release|x64.Build.0 = Release|x64
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Release|x86.ActiveCfg = Release|x86
- {2B3432AC-1D3C-4EC0-94CE-6D14D515A3E0}.Release|x86.Build.0 = Release|x86
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Debug|x64.ActiveCfg = Debug|x64
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Debug|x64.Build.0 = Debug|x64
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Debug|x86.ActiveCfg = Debug|x86
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Debug|x86.Build.0 = Debug|x86
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Release|Any CPU.Build.0 = Release|Any CPU
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Release|x64.ActiveCfg = Release|x64
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Release|x64.Build.0 = Release|x64
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Release|x86.ActiveCfg = Release|x86
- {DECDDA97-C90D-40C4-9D9A-A5A125D052AC}.Release|x86.Build.0 = Release|x86
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Debug|x64.ActiveCfg = Debug|x64
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Debug|x64.Build.0 = Debug|x64
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Debug|x86.ActiveCfg = Debug|x86
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Debug|x86.Build.0 = Debug|x86
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Release|Any CPU.Build.0 = Release|Any CPU
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Release|x64.ActiveCfg = Release|x64
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Release|x64.Build.0 = Release|x64
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Release|x86.ActiveCfg = Release|x86
- {5CC05A2D-2779-4880-A28C-6800A85B5D9C}.Release|x86.Build.0 = Release|x86
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Debug|x64.ActiveCfg = Debug|x64
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Debug|x64.Build.0 = Debug|x64
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Debug|x86.ActiveCfg = Debug|x86
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Debug|x86.Build.0 = Debug|x86
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Release|Any CPU.Build.0 = Release|Any CPU
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Release|x64.ActiveCfg = Release|x64
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Release|x64.Build.0 = Release|x64
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Release|x86.ActiveCfg = Release|x86
- {D9DC78AA-A9D1-4232-837C-0CF20846B3D6}.Release|x86.Build.0 = Release|x86
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Debug|x64.ActiveCfg = Debug|x64
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Debug|x64.Build.0 = Debug|x64
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Debug|x86.ActiveCfg = Debug|x86
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Debug|x86.Build.0 = Debug|x86
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Release|Any CPU.Build.0 = Release|Any CPU
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Release|x64.ActiveCfg = Release|x64
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Release|x64.Build.0 = Release|x64
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Release|x86.ActiveCfg = Release|x86
- {393B4BDE-A451-41A7-A789-4473782BDF2D}.Release|x86.Build.0 = Release|x86
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Debug|x64.ActiveCfg = Debug|x64
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Debug|x64.Build.0 = Debug|x64
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Debug|x86.ActiveCfg = Debug|x86
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Debug|x86.Build.0 = Debug|x86
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Release|Any CPU.Build.0 = Release|Any CPU
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Release|x64.ActiveCfg = Release|x64
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Release|x64.Build.0 = Release|x64
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Release|x86.ActiveCfg = Release|x86
- {28634B14-E0AD-423D-9A49-3650E0D15FC0}.Release|x86.Build.0 = Release|x86
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Debug|x64.ActiveCfg = Debug|x64
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Debug|x64.Build.0 = Debug|x64
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Debug|x86.ActiveCfg = Debug|x86
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Debug|x86.Build.0 = Debug|x86
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Release|Any CPU.Build.0 = Release|Any CPU
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Release|x64.ActiveCfg = Release|x64
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Release|x64.Build.0 = Release|x64
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Release|x86.ActiveCfg = Release|x86
- {BC7F3F8C-2997-455C-9D98-4B45F0CDF2C8}.Release|x86.Build.0 = Release|x86
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Debug|x64.ActiveCfg = Debug|x64
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Debug|x64.Build.0 = Debug|x64
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Debug|x86.ActiveCfg = Debug|x86
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Debug|x86.Build.0 = Debug|x86
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Release|Any CPU.Build.0 = Release|Any CPU
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Release|x64.ActiveCfg = Release|x64
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Release|x64.Build.0 = Release|x64
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Release|x86.ActiveCfg = Release|x86
- {99AFD4A2-9246-4077-8412-AB7DFACEDC8F}.Release|x86.Build.0 = Release|x86
- {15153B43-717A-4EC7-811F-4F710837E52F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {15153B43-717A-4EC7-811F-4F710837E52F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {15153B43-717A-4EC7-811F-4F710837E52F}.Debug|x64.ActiveCfg = Debug|x64
- {15153B43-717A-4EC7-811F-4F710837E52F}.Debug|x64.Build.0 = Debug|x64
- {15153B43-717A-4EC7-811F-4F710837E52F}.Debug|x86.ActiveCfg = Debug|x86
- {15153B43-717A-4EC7-811F-4F710837E52F}.Debug|x86.Build.0 = Debug|x86
- {15153B43-717A-4EC7-811F-4F710837E52F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {15153B43-717A-4EC7-811F-4F710837E52F}.Release|Any CPU.Build.0 = Release|Any CPU
- {15153B43-717A-4EC7-811F-4F710837E52F}.Release|x64.ActiveCfg = Release|x64
- {15153B43-717A-4EC7-811F-4F710837E52F}.Release|x64.Build.0 = Release|x64
- {15153B43-717A-4EC7-811F-4F710837E52F}.Release|x86.ActiveCfg = Release|x86
- {15153B43-717A-4EC7-811F-4F710837E52F}.Release|x86.Build.0 = Release|x86
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Debug|x64.ActiveCfg = Debug|x64
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Debug|x64.Build.0 = Debug|x64
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Debug|x86.ActiveCfg = Debug|x86
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Debug|x86.Build.0 = Debug|x86
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Release|Any CPU.Build.0 = Release|Any CPU
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Release|x64.ActiveCfg = Release|x64
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Release|x64.Build.0 = Release|x64
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Release|x86.ActiveCfg = Release|x86
- {A4C62F2A-DFF0-43FA-9515-F12EB3756601}.Release|x86.Build.0 = Release|x86
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Debug|x64.ActiveCfg = Debug|x64
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Debug|x64.Build.0 = Debug|x64
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Debug|x86.ActiveCfg = Debug|x86
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Debug|x86.Build.0 = Debug|x86
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Release|Any CPU.Build.0 = Release|Any CPU
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Release|x64.ActiveCfg = Release|x64
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Release|x64.Build.0 = Release|x64
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Release|x86.ActiveCfg = Release|x86
- {2DCF26D7-98A5-4656-954E-3406CFB08686}.Release|x86.Build.0 = Release|x86
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Debug|x64.ActiveCfg = Debug|x64
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Debug|x64.Build.0 = Debug|x64
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Debug|x86.ActiveCfg = Debug|x86
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Debug|x86.Build.0 = Debug|x86
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Release|Any CPU.Build.0 = Release|Any CPU
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Release|x64.ActiveCfg = Release|x64
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Release|x64.Build.0 = Release|x64
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Release|x86.ActiveCfg = Release|x86
- {B7F19C82-AD09-41CF-AE9E-AFF27688DB68}.Release|x86.Build.0 = Release|x86
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Debug|x64.ActiveCfg = Debug|x64
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Debug|x64.Build.0 = Debug|x64
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Debug|x86.ActiveCfg = Debug|x86
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Debug|x86.Build.0 = Debug|x86
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Release|Any CPU.Build.0 = Release|Any CPU
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Release|x64.ActiveCfg = Release|x64
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Release|x64.Build.0 = Release|x64
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Release|x86.ActiveCfg = Release|x86
- {8575483D-B37F-4C5A-B922-6A73787A6CF0}.Release|x86.Build.0 = Release|x86
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Debug|x64.ActiveCfg = Debug|x64
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Debug|x64.Build.0 = Debug|x64
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Debug|x86.ActiveCfg = Debug|x86
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Debug|x86.Build.0 = Debug|x86
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Release|Any CPU.Build.0 = Release|Any CPU
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Release|x64.ActiveCfg = Release|x64
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Release|x64.Build.0 = Release|x64
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Release|x86.ActiveCfg = Release|x86
- {D627334B-835C-4190-BF4A-9459C50D04D3}.Release|x86.Build.0 = Release|x86
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Debug|x64.ActiveCfg = Debug|x64
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Debug|x64.Build.0 = Debug|x64
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Debug|x86.ActiveCfg = Debug|x86
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Debug|x86.Build.0 = Debug|x86
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Release|Any CPU.Build.0 = Release|Any CPU
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Release|x64.ActiveCfg = Release|x64
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Release|x64.Build.0 = Release|x64
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Release|x86.ActiveCfg = Release|x86
- {8144C3F4-95D2-4179-A7AA-839699EBF374}.Release|x86.Build.0 = Release|x86
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Debug|x64.ActiveCfg = Debug|x64
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Debug|x64.Build.0 = Debug|x64
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Debug|x86.ActiveCfg = Debug|x86
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Debug|x86.Build.0 = Debug|x86
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Release|Any CPU.Build.0 = Release|Any CPU
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Release|x64.ActiveCfg = Release|x64
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Release|x64.Build.0 = Release|x64
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Release|x86.ActiveCfg = Release|x86
- {6D5251AE-1567-444C-B5D9-D00C54104A1D}.Release|x86.Build.0 = Release|x86
- {94768F01-A559-439F-96A6-F6970116A36F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {94768F01-A559-439F-96A6-F6970116A36F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {94768F01-A559-439F-96A6-F6970116A36F}.Debug|x64.ActiveCfg = Debug|x64
- {94768F01-A559-439F-96A6-F6970116A36F}.Debug|x64.Build.0 = Debug|x64
- {94768F01-A559-439F-96A6-F6970116A36F}.Debug|x86.ActiveCfg = Debug|x86
- {94768F01-A559-439F-96A6-F6970116A36F}.Debug|x86.Build.0 = Debug|x86
- {94768F01-A559-439F-96A6-F6970116A36F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {94768F01-A559-439F-96A6-F6970116A36F}.Release|Any CPU.Build.0 = Release|Any CPU
- {94768F01-A559-439F-96A6-F6970116A36F}.Release|x64.ActiveCfg = Release|x64
- {94768F01-A559-439F-96A6-F6970116A36F}.Release|x64.Build.0 = Release|x64
- {94768F01-A559-439F-96A6-F6970116A36F}.Release|x86.ActiveCfg = Release|x86
- {94768F01-A559-439F-96A6-F6970116A36F}.Release|x86.Build.0 = Release|x86
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Debug|x64.ActiveCfg = Debug|x64
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Debug|x64.Build.0 = Debug|x64
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Debug|x86.ActiveCfg = Debug|x86
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Debug|x86.Build.0 = Debug|x86
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Release|Any CPU.Build.0 = Release|Any CPU
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Release|x64.ActiveCfg = Release|x64
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Release|x64.Build.0 = Release|x64
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Release|x86.ActiveCfg = Release|x86
- {01BAA4A0-81BF-4C3B-9074-F3D17E4BDB2C}.Release|x86.Build.0 = Release|x86
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Debug|x64.ActiveCfg = Debug|x64
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Debug|x64.Build.0 = Debug|x64
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Debug|x86.ActiveCfg = Debug|x86
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Debug|x86.Build.0 = Debug|x86
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Release|Any CPU.Build.0 = Release|Any CPU
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Release|x64.ActiveCfg = Release|x64
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Release|x64.Build.0 = Release|x64
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Release|x86.ActiveCfg = Release|x86
- {2477737B-DD06-4635-B508-1CB7EE01E805}.Release|x86.Build.0 = Release|x86
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Debug|x64.ActiveCfg = Debug|x64
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Debug|x64.Build.0 = Debug|x64
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Debug|x86.ActiveCfg = Debug|x86
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Debug|x86.Build.0 = Debug|x86
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Release|Any CPU.Build.0 = Release|Any CPU
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Release|x64.ActiveCfg = Release|x64
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Release|x64.Build.0 = Release|x64
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Release|x86.ActiveCfg = Release|x86
- {B2B0B253-1090-44B4-86EC-361D956E88D8}.Release|x86.Build.0 = Release|x86
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Debug|x64.ActiveCfg = Debug|x64
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Debug|x64.Build.0 = Debug|x64
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Debug|x86.ActiveCfg = Debug|x86
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Debug|x86.Build.0 = Debug|x86
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Release|Any CPU.Build.0 = Release|Any CPU
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Release|x64.ActiveCfg = Release|x64
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Release|x64.Build.0 = Release|x64
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Release|x86.ActiveCfg = Release|x86
- {30568DC1-552D-4967-A819-2E2086D9A37E}.Release|x86.Build.0 = Release|x86
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Debug|x64.ActiveCfg = Debug|x64
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Debug|x64.Build.0 = Debug|x64
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Debug|x86.ActiveCfg = Debug|x86
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Debug|x86.Build.0 = Debug|x86
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Release|Any CPU.Build.0 = Release|Any CPU
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Release|x64.ActiveCfg = Release|x64
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Release|x64.Build.0 = Release|x64
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Release|x86.ActiveCfg = Release|x86
- {E79C72F5-176F-4935-91F5-79A5C84B0DD5}.Release|x86.Build.0 = Release|x86
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Debug|x64.ActiveCfg = Debug|x64
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Debug|x64.Build.0 = Debug|x64
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Debug|x86.ActiveCfg = Debug|x86
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Debug|x86.Build.0 = Debug|x86
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Release|Any CPU.Build.0 = Release|Any CPU
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Release|x64.ActiveCfg = Release|x64
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Release|x64.Build.0 = Release|x64
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Release|x86.ActiveCfg = Release|x86
- {CD30D882-6FEE-46F2-A004-AB136BAA97AC}.Release|x86.Build.0 = Release|x86
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Debug|x64.ActiveCfg = Debug|x64
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Debug|x64.Build.0 = Debug|x64
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Debug|x86.ActiveCfg = Debug|x86
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Debug|x86.Build.0 = Debug|x86
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Release|Any CPU.Build.0 = Release|Any CPU
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Release|x64.ActiveCfg = Release|x64
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Release|x64.Build.0 = Release|x64
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Release|x86.ActiveCfg = Release|x86
- {471CBB4B-E6E7-430C-96DD-514CE60FB472}.Release|x86.Build.0 = Release|x86
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Debug|x64.ActiveCfg = Debug|x64
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Debug|x64.Build.0 = Debug|x64
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Debug|x86.ActiveCfg = Debug|x86
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Debug|x86.Build.0 = Debug|x86
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Release|Any CPU.Build.0 = Release|Any CPU
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Release|x64.ActiveCfg = Release|x64
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Release|x64.Build.0 = Release|x64
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Release|x86.ActiveCfg = Release|x86
- {1DD172EF-123C-415B-B278-F67579C2B3CC}.Release|x86.Build.0 = Release|x86
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Debug|x64.ActiveCfg = Debug|x64
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Debug|x64.Build.0 = Debug|x64
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Debug|x86.ActiveCfg = Debug|x86
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Debug|x86.Build.0 = Debug|x86
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Release|Any CPU.Build.0 = Release|Any CPU
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Release|x64.ActiveCfg = Release|x64
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Release|x64.Build.0 = Release|x64
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Release|x86.ActiveCfg = Release|x86
- {C8124B80-00A6-44EF-A828-7068AB09975A}.Release|x86.Build.0 = Release|x86
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Debug|x64.ActiveCfg = Debug|x64
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Debug|x64.Build.0 = Debug|x64
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Debug|x86.ActiveCfg = Debug|x86
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Debug|x86.Build.0 = Debug|x86
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Release|Any CPU.Build.0 = Release|Any CPU
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Release|x64.ActiveCfg = Release|x64
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Release|x64.Build.0 = Release|x64
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Release|x86.ActiveCfg = Release|x86
- {9ABC91A3-9B8E-46C8-A580-34E1DF79E872}.Release|x86.Build.0 = Release|x86
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Debug|x64.ActiveCfg = Debug|x64
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Debug|x64.Build.0 = Debug|x64
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Debug|x86.ActiveCfg = Debug|x86
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Debug|x86.Build.0 = Debug|x86
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Release|Any CPU.Build.0 = Release|Any CPU
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Release|x64.ActiveCfg = Release|x64
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Release|x64.Build.0 = Release|x64
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Release|x86.ActiveCfg = Release|x86
- {BA0A7D4D-2689-4B6D-8F14-1532112E225C}.Release|x86.Build.0 = Release|x86
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Debug|x64.ActiveCfg = Debug|x64
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Debug|x64.Build.0 = Debug|x64
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Debug|x86.ActiveCfg = Debug|x86
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Debug|x86.Build.0 = Debug|x86
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Release|Any CPU.Build.0 = Release|Any CPU
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Release|x64.ActiveCfg = Release|x64
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Release|x64.Build.0 = Release|x64
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Release|x86.ActiveCfg = Release|x86
- {CC8D1830-ECDB-4083-8D60-A83B2876FA62}.Release|x86.Build.0 = Release|x86
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Debug|x64.ActiveCfg = Debug|x64
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Debug|x64.Build.0 = Debug|x64
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Debug|x86.ActiveCfg = Debug|x86
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Debug|x86.Build.0 = Debug|x86
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Release|Any CPU.Build.0 = Release|Any CPU
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Release|x64.ActiveCfg = Release|x64
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Release|x64.Build.0 = Release|x64
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Release|x86.ActiveCfg = Release|x86
- {712DF299-955A-4321-8320-0FD8A1988FF4}.Release|x86.Build.0 = Release|x86
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Debug|x64.ActiveCfg = Debug|x64
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Debug|x64.Build.0 = Debug|x64
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Debug|x86.ActiveCfg = Debug|x86
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Debug|x86.Build.0 = Debug|x86
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Release|Any CPU.Build.0 = Release|Any CPU
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Release|x64.ActiveCfg = Release|x64
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Release|x64.Build.0 = Release|x64
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Release|x86.ActiveCfg = Release|x86
- {C7810220-7BC8-4C4B-8613-9575E1C48AA5}.Release|x86.Build.0 = Release|x86
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Debug|x64.ActiveCfg = Debug|x64
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Debug|x64.Build.0 = Debug|x64
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Debug|x86.ActiveCfg = Debug|x86
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Debug|x86.Build.0 = Debug|x86
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Release|Any CPU.Build.0 = Release|Any CPU
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Release|x64.ActiveCfg = Release|x64
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Release|x64.Build.0 = Release|x64
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Release|x86.ActiveCfg = Release|x86
- {9334A6A6-5ED6-454F-ADCB-53BFE9AB065D}.Release|x86.Build.0 = Release|x86
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Debug|x64.ActiveCfg = Debug|x64
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Debug|x64.Build.0 = Debug|x64
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Debug|x86.ActiveCfg = Debug|x86
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Debug|x86.Build.0 = Debug|x86
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Release|Any CPU.Build.0 = Release|Any CPU
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Release|x64.ActiveCfg = Release|x64
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Release|x64.Build.0 = Release|x64
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Release|x86.ActiveCfg = Release|x86
- {4D0771DE-46FB-481E-B3F9-42980EED680C}.Release|x86.Build.0 = Release|x86
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Debug|x64.ActiveCfg = Debug|x64
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Debug|x64.Build.0 = Debug|x64
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Debug|x86.ActiveCfg = Debug|x86
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Debug|x86.Build.0 = Debug|x86
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Release|Any CPU.Build.0 = Release|Any CPU
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Release|x64.ActiveCfg = Release|x64
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Release|x64.Build.0 = Release|x64
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Release|x86.ActiveCfg = Release|x86
- {34484E72-8CEF-4784-81F5-041754B21BB1}.Release|x86.Build.0 = Release|x86
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Debug|x64.ActiveCfg = Debug|x64
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Debug|x64.Build.0 = Debug|x64
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Debug|x86.ActiveCfg = Debug|x86
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Debug|x86.Build.0 = Debug|x86
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Release|Any CPU.Build.0 = Release|Any CPU
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Release|x64.ActiveCfg = Release|x64
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Release|x64.Build.0 = Release|x64
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Release|x86.ActiveCfg = Release|x86
- {8D3289A5-591B-421D-A79C-776B9AC74B95}.Release|x86.Build.0 = Release|x86
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Debug|x64.ActiveCfg = Debug|x64
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Debug|x64.Build.0 = Debug|x64
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Debug|x86.ActiveCfg = Debug|x86
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Debug|x86.Build.0 = Debug|x86
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Release|Any CPU.Build.0 = Release|Any CPU
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Release|x64.ActiveCfg = Release|x64
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Release|x64.Build.0 = Release|x64
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Release|x86.ActiveCfg = Release|x86
- {05DD16B8-2027-4728-AEB6-6296E7457533}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
-EndGlobal
<copyright>© Samsung Electronics Co., Ltd All Rights Reserved</copyright>
</metadata>
<files>
+
<file src="pkg\build\**" target="build" />
- <file src="Artifacts\bin\ElmSharp.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\ElmSharp.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\ElmSharp.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\ElmSharp.Wearable.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\ElmSharp.Wearable.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\ElmSharp.Wearable.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.AccountManager.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.AccountManager.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.AccountManager.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.SyncManager.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.SyncManager.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.SyncManager.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.FidoClient.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.FidoClient.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.FidoClient.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.OAuth2.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.OAuth2.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Account.OAuth2.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Alarm.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Alarm.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Alarm.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.AttachPanel.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.AttachPanel.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.AttachPanel.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Badge.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Badge.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Badge.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Common.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Common.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Common.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.DataControl.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.DataControl.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.DataControl.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.MessagePort.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.MessagePort.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.MessagePort.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Notification.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Notification.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Notification.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.NotificationEventListener.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.NotificationEventListener.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.NotificationEventListener.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.PackageManager.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.PackageManager.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.PackageManager.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Preference.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Preference.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Preference.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.RemoteView.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.RemoteView.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.RemoteView.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Service.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Service.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.Service.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.ToastMessage.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.ToastMessage.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.ToastMessage.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.UI.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.UI.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.UI.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WatchApplication.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WatchApplication.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WatchApplication.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WidgetApplication.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WidgetApplication.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WidgetApplication.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WidgetControl.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WidgetControl.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Applications.WidgetControl.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.Download.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.Download.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.Download.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.MediaContent.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.MediaContent.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.MediaContent.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.MimeType.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.MimeType.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Content.MimeType.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Context.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Context.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Context.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Location.Geofence.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Location.Geofence.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Location.Geofence.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Location.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Location.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Location.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Log.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Log.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Log.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Maps.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Maps.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Maps.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Messaging.Push.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Messaging.Push.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Messaging.Push.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Messaging.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Messaging.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Messaging.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.AudioIO.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.AudioIO.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.AudioIO.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Camera.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Camera.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Camera.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.MediaCodec.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.MediaCodec.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.MediaCodec.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.MediaPlayer.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.MediaPlayer.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.MediaPlayer.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Metadata.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Metadata.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Metadata.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Radio.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Radio.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Radio.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Recorder.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Recorder.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Recorder.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Remoting.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Remoting.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Remoting.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.StreamRecorder.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.StreamRecorder.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.StreamRecorder.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Util.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Util.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Util.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Vision.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Vision.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.Vision.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Multimedia.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.NUI.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.NUI.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.NUI.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Bluetooth.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Bluetooth.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Bluetooth.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Connection.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Connection.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Connection.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.IoTConnectivity.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.IoTConnectivity.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.IoTConnectivity.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Nfc.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Nfc.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Nfc.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Nsd.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Nsd.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Nsd.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Smartcard.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Smartcard.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.Smartcard.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.WiFi.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.WiFi.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.WiFi.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.WiFiDirect.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.WiFiDirect.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Network.WiFiDirect.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.PhonenumberUtils.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.PhonenumberUtils.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.PhonenumberUtils.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Pims.Calendar.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Pims.Calendar.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Pims.Calendar.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Pims.Contacts.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Pims.Contacts.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Pims.Contacts.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.SecureRepository.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.SecureRepository.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.SecureRepository.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.TEEC.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.TEEC.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.TEEC.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Security.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Sensor.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Sensor.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Sensor.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Feedback.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Feedback.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Feedback.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Information.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Information.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Information.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.MediaKey.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.MediaKey.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.MediaKey.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.PlatformConfig.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.PlatformConfig.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.PlatformConfig.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Storage.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Storage.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.Storage.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.SystemSettings.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.SystemSettings.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.SystemSettings.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.System.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Telephony.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Telephony.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Telephony.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Tracer.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Tracer.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Tracer.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.InputMethod.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.InputMethod.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.InputMethod.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.InputMethodManager.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.InputMethodManager.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.InputMethodManager.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.Stt.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.Stt.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.Stt.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.Tts.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.Tts.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.Tts.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.VoiceControl.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.VoiceControl.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.Uix.VoiceControl.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.WebView.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.WebView.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.WebView.xml" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.dll" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.pdb" target="lib\netstandard1.6" />
- <file src="Artifacts\bin\Tizen.xml" target="lib\netstandard1.6" />
+
+ <!--
+ Please edit pkg/PublicModuleList.txt,
+ if want to add modules to Tizen.NET package.
+ -->
+ <file src="Artifacts\bin\public\*.dll" target="lib\netstandard1.6" />
+ <file src="Artifacts\bin\public\*.pdb" target="lib\netstandard1.6" />
+ <file src="Artifacts\bin\public\*.xml" target="lib\netstandard1.6" />
+
</files>
</package>
--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>netstandard1.6</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\Tizen\Tizen.csproj" />
+ <ProjectReference Include="..\Tizen.Log\Tizen.Log.csproj" />
+ </ItemGroup>
+
+</Project>
--- /dev/null
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26430.6
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.Shortcut", "Tizen.Applications.Shortcut.csproj", "{002C0868-E774-4ACA-B033-83B91C3B2C57}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {002C0868-E774-4ACA-B033-83B91C3B2C57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {002C0868-E774-4ACA-B033-83B91C3B2C57}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {002C0868-E774-4ACA-B033-83B91C3B2C57}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {002C0868-E774-4ACA-B033-83B91C3B2C57}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class that contains shortcut information.
+ /// </summary>
+ public class HomeShortcutInfo : ShortcutInfo
+ {
+ /// <summary>
+ /// Gets or sets the specific information for delivering to the viewer for creating a shortcut.
+ /// </summary>
+ public string Uri { get; set; } = string.Empty;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// Enumeration for sizes of shortcut widget.
+ /// </summary>
+ public enum ShortcutWidgetSize
+ {
+ /// <summary>
+ /// Type mask for the normal mode widget , don't use this value for specific size.
+ /// </summary>
+ WidgetDefault = 0x10000000,
+
+ /// <summary>
+ /// 1by1
+ /// </summary>
+ Widget1by1 = 0x10010000,
+
+ /// <summary>
+ /// 2by1
+ /// </summary>
+ Widget2by1 = 0x10020000,
+
+ /// <summary>
+ /// 2by2
+ /// </summary>
+ Widget2by2 = 0x10040000,
+
+ /// <summary>
+ /// 4by1
+ /// </summary>
+ Widget4by1 = 0x10080000,
+
+ /// <summary>
+ /// 4by2
+ /// </summary>
+ Widget4by2 = 0x10100000,
+
+ /// <summary>
+ /// 4by3
+ /// </summary>
+ Widget4by3 = 0x10200000,
+
+ /// <summary>
+ /// 4by4
+ /// </summary>
+ Widget4by4 = 0x10400000,
+
+ /// <summary>
+ /// 4by5
+ /// </summary>
+ Widget4by5 = 0x11000000,
+
+ /// <summary>
+ /// 4by6
+ /// </summary>
+ Widget4by6 = 0x12000000,
+
+ /// <summary>
+ /// Type mask for the easy mode widget, don't use this value for specific size.
+ /// </summary>
+ EasyDefault = 0x30000000,
+
+ /// <summary>
+ /// Easy mode 1by1
+ /// </summary>
+ Easy1by1 = 0x30010000,
+
+ /// <summary>
+ /// Easy mode 3by2
+ /// </summary>
+ Easy3by1 = 0x30020000,
+
+ /// <summary>
+ /// Easy mode 3by3
+ /// </summary>
+ Easy3by3 = 0x30040000,
+ }
+
+ /// <summary>
+ /// Enumeration for shortcut types.
+ /// </summary>
+ internal enum ShortcutType
+ {
+ /// <summary>
+ /// Launch the application itself.
+ /// </summary>
+ LaunchByApp = 0x00000000,
+
+ /// <summary>
+ /// Launch the application with the given data(URI).
+ /// </summary>
+ LaunchByUri = 0x00000001,
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ using System;
+
+ internal static class ShortcutErrorFactory
+ {
+ private const string LogTag = "Tizen.Applications.Shortcut";
+
+ internal static Exception GetException(Interop.Shortcut.ErrorCode err, string msg)
+ {
+ switch (err)
+ {
+ case Interop.Shortcut.ErrorCode.InvalidParameter:
+ return new ArgumentException(err + " error occurred.");
+ case Interop.Shortcut.ErrorCode.PermissionDenied:
+ return new UnauthorizedAccessException(err + " Permission denied (http://tizen.org/privilege/shortcut)");
+ case Interop.Shortcut.ErrorCode.NotSupported:
+ return new NotSupportedException(err + " Not Supported (http://tizen.org/feature/shortcut)");
+ default:
+ Log.Error(LogTag, msg);
+ return new InvalidOperationException(err + " error occurred.");
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class to get information of the Shortcut.
+ /// </summary>
+ public class ShortcutInfo
+ {
+ /// <summary>
+ /// Gets or sets the name of the created shortcut icon.
+ /// </summary>
+ public string ShortcutName { get; set; } = string.Empty;
+
+ /// <summary>
+ /// Gets or sets the absolute path of an icon file for this shortcut.
+ /// </summary>
+ public string IconPath { get; set; } = string.Empty;
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to allow or not to allow duplication.
+ /// </summary>
+ public bool IsAllowDuplicate { get; set; }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ using System;
+ using System.Threading.Tasks;
+
+ /// <summary>
+ /// This class provides the some functions to add, delete shortcut.
+ /// </summary>
+ public static class ShortcutManager
+ {
+ private const string LogTag = "Tizen.Applications.Shortcut";
+
+ private static Interop.Shortcut.ResultCallback shortcutAddResult = null;
+
+ private static Interop.Shortcut.ResultCallback widgetAddResult = null;
+
+ private static Interop.Shortcut.ResultCallback shortcutDeleteResult = null;
+
+ /// <summary>
+ /// Adds a shortcut on home-screen.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="shortcut">Object that contain shortcut info.</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void Add(HomeShortcutInfo shortcut)
+ {
+ Interop.Shortcut.ErrorCode err = Interop.Shortcut.ErrorCode.None;
+
+ try
+ {
+ int type;
+
+ if (shortcut.Uri == null || shortcut.Uri == String.Empty)
+ {
+ type = 0;
+ }
+ else
+ {
+ type = 1;
+ }
+
+ if (shortcutAddResult == null)
+ {
+ shortcutAddResult = new Interop.Shortcut.ResultCallback(ShortcutAddResultCallback);
+ }
+
+ err = Interop.Shortcut.AddToHome(shortcut.ShortcutName, type, shortcut.Uri, shortcut.IconPath, Convert.ToInt32(shortcut.IsAllowDuplicate), shortcutAddResult, IntPtr.Zero);
+ if (err != Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException(err, "unable to add shortcut");
+ }
+ }
+ catch (Exception e)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.IoError, e.Message);
+ }
+ }
+
+ /// <summary>
+ /// Adds a shortcut on home-screen.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="shortcut">Object that contain shortcut info.</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void Add(WidgetShortcutInfo shortcut)
+ {
+ Interop.Shortcut.ErrorCode err = Interop.Shortcut.ErrorCode.None;
+
+ if (shortcut.Period < 0.0)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.InvalidParameter, "Invalid parameter");
+ }
+
+ try
+ {
+ if (widgetAddResult == null)
+ {
+ widgetAddResult = new Interop.Shortcut.ResultCallback(WidgetAddResultCallback);
+ }
+
+ err = Interop.Shortcut.AddToWidget(shortcut.ShortcutName, shortcut.WidgetSize, shortcut.WidgetId, shortcut.IconPath, shortcut.Period, Convert.ToInt32(shortcut.IsAllowDuplicate), null, IntPtr.Zero);
+ if (err != Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException(err, "unable to add shortcut");
+ }
+ }
+ catch (Exception e)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.IoError, e.Message);
+ }
+ }
+
+ /// <summary>
+ /// Removes a shortcut from home by ShortcutName.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="shortcutName">Shortcut name string.</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void Delete(string shortcutName)
+ {
+ Interop.Shortcut.ErrorCode err = Interop.Shortcut.ErrorCode.None;
+
+ if (shortcutName == null)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.InvalidParameter, "Invalid parameter");
+ }
+
+ try
+ {
+ if (shortcutDeleteResult == null)
+ {
+ shortcutDeleteResult = new Interop.Shortcut.ResultCallback(DeleteResultCallback);
+ }
+
+ err = Interop.Shortcut.Delete(shortcutName, shortcutDeleteResult, IntPtr.Zero);
+ if (err != Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException(err, "unable to delete shortcut");
+ }
+ }
+ catch (Exception e)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.IoError, e.Message);
+ }
+ }
+
+ /// <summary>
+ /// Removes a shortcut from home by ShortcutInfo.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="shortcut">Object that contain shortcut info.</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void Delete(ShortcutInfo shortcut)
+ {
+ if (shortcut == null)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.InvalidParameter, "Invalid parameter");
+ }
+
+ try
+ {
+ Delete(shortcut.ShortcutName);
+ }
+ catch (Exception e)
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.IoError, e.Message);
+ }
+ }
+
+ private static int ShortcutAddResultCallback(int ret, IntPtr data)
+ {
+ if (ret != (int)Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException((Interop.Shortcut.ErrorCode)ret, "unable to add shortcut");
+ }
+
+ return 0;
+ }
+
+ private static int WidgetAddResultCallback(int ret, IntPtr data)
+ {
+ if (ret != (int)Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException((Interop.Shortcut.ErrorCode)ret, "unable to add widget");
+ }
+
+ return 0;
+ }
+
+ private static int DeleteResultCallback(int ret, IntPtr data)
+ {
+ if (ret != (int)Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException((Interop.Shortcut.ErrorCode)ret, "unable to delete shortcut");
+ }
+
+ return 0;
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class that contains information about the widget.
+ /// </summary>
+ public class WidgetShortcutInfo : ShortcutInfo
+ {
+ /// <summary>
+ /// Gets or sets the Widget ID.
+ /// </summary>
+ public string WidgetId { get; set; } = string.Empty;
+
+ /// <summary>
+ /// Gets or sets the size of widget.
+ /// </summary>
+ public ShortcutWidgetSize WidgetSize { get; set; }
+
+ /// <summary>
+ /// Gets or sets the Update period in seconds.
+ /// </summary>
+ public double Period { get; set; }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class that contains shortcut information.
+ /// </summary>
+ public class HomeShortcutAddedInfo : ShortcutAddedInfo
+ {
+ /// <summary>
+ /// Gets the name of application.
+ /// </summary>
+ public string AppId { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the specific information for creating a new shortcut.
+ /// </summary>
+ public string Uri { get; internal set; } = string.Empty;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class for getting information of the Shortcut.
+ /// </summary>
+ public class ShortcutAddedInfo
+ {
+ /// <summary>
+ /// Gets the name of the created shortcut icon.
+ /// </summary>
+ public string ShortcutName { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the absolute path of an icon file for this shortcut.
+ /// </summary>
+ public string IconPath { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets a value indicating whether to allow or not to allow duplication.
+ /// </summary>
+ public bool IsAllowDuplicate { get; internal set; }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class for getting information of the Shortcut.
+ /// </summary>
+ public class ShortcutDeletedInfo
+ {
+ /// <summary>
+ /// Gets the name of package.
+ /// </summary>
+ public string AppId { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the name of the created shortcut icon.
+ /// </summary>
+ public string ShortcutName { get; internal set; } = string.Empty;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// Enumeration for values of shortcut response types.
+ /// </summary>
+ public enum ShortcutError
+ {
+ /// <summary>
+ /// Successful.
+ /// </summary>
+ None = Tizen.Internals.Errors.ErrorCode.None,
+
+ /// <summary>
+ /// Invalid function parameter.
+ /// </summary>
+ InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
+
+ /// <summary>
+ /// Out of memory.
+ /// </summary>
+ OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,
+
+ /// <summary>
+ /// Permission denied.
+ /// </summary>
+ PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
+
+ /// <summary>
+ /// I/O Error.
+ /// </summary>
+ IoError = Tizen.Internals.Errors.ErrorCode.IoError,
+
+ /// <summary>
+ /// Not supported.
+ /// </summary>
+ NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported,
+
+ /// <summary>
+ /// Device or resource busy.
+ /// </summary>
+ ResourceBusy = Tizen.Internals.Errors.ErrorCode.ResourceBusy,
+
+ /// <summary>
+ /// There is no space to add a new shortcut.
+ /// </summary>
+ NoSpace = -0x01160000 | 0x01,
+
+ /// <summary>
+ /// Shortcut is already added.
+ /// </summary>
+ Exist = -0x01160000 | 0x02,
+
+ /// <summary>
+ /// Unrecoverable error.
+ /// </summary>
+ Fault = -0x01160000 | 0x04,
+
+ /// <summary>
+ /// Not exist shortcut.
+ /// </summary>
+ NotExist = -0x01160000 | 0x08,
+
+ /// <summary>
+ /// Connection not established or communication problem.
+ /// </summary>
+ COMM = -0x01160000 | 0x40
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ using System;
+ using System.Collections.Generic;
+
+ /// <summary>
+ /// The callback function that is invoked when add request occurred
+ /// </summary>
+ /// <param name="args">Object that contain shortcut info to add.</param>
+ /// <returns>The result of handling a shortcut add request</returns>
+ public delegate ShortcutError ShortcutAdded(ShortcutAddedInfo args);
+
+ /// <summary>
+ /// The callback function that is invoked when delete request occurred
+ /// </summary>
+ /// <param name="args">Object that contain shortcut info to delete.</param>
+ /// <returns>The result of handling a shortcut delete request</returns>
+ public delegate ShortcutError ShortcutDeleted(ShortcutDeletedInfo args);
+
+ /// <summary>
+ /// This class provides a way to register callback function for shortcut add, delete events.
+ /// </summary>
+ public static class ShortcutEventManager
+ {
+ private static Interop.Shortcut.AddCallback shortcutAddCallback;
+
+ private static Interop.Shortcut.DeleteCallback shortcutDeleteCallback;
+
+ private static IList<ShortcutTemplate> shortcutTemplates = new List<ShortcutTemplate>();
+
+ private static ShortcutAdded shortcutAdded = null;
+
+ private static ShortcutDeleted shortcutDeleted = null;
+
+ /// <summary>
+ /// Registers a callback function to listen requests from applications.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="addedEvent">The callback function pointer that is invoked when Add() is requested</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <remarks>
+ /// Previous registered delegate function should be unregister.
+ /// </remarks>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void RegisterEventHandler(ShortcutAdded addedEvent)
+ {
+ shortcutAdded = addedEvent;
+
+ if (shortcutAddCallback == null)
+ {
+ shortcutAddCallback = new Interop.Shortcut.AddCallback(AddCallback);
+
+ Interop.Shortcut.ErrorCode err = Interop.Shortcut.SetShortcutAddCallback(shortcutAddCallback, IntPtr.Zero);
+ if (err != Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException(err, "unable to register callback");
+ }
+ }
+ }
+
+ /// <summary>
+ /// Registers a callback function to listen requests from applications.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="deletedEvent">The callback function pointer that is invoked when Delete() is requested</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <remarks>
+ /// Previous registered delegate function should be unregister.
+ /// </remarks>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void RegisterEventHandler(ShortcutDeleted deletedEvent)
+ {
+ shortcutDeleted = deletedEvent;
+
+ if (shortcutDeleteCallback == null)
+ {
+ shortcutDeleteCallback = new Interop.Shortcut.DeleteCallback(DeleteCallback);
+
+ Interop.Shortcut.ErrorCode err = Interop.Shortcut.SetShortcutDeleteCallback(shortcutDeleteCallback, IntPtr.Zero);
+ if (err != Interop.Shortcut.ErrorCode.None)
+ {
+ throw ShortcutErrorFactory.GetException(err, "unable to register callback");
+ }
+ }
+ }
+
+ /// <summary>
+ /// Unregisters a callback for the shortcut request.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="addedEvent">The callback function pointer that used for RegisterCallback</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void UnregisterEventHandler(ShortcutAdded addedEvent)
+ {
+ if (shortcutAdded.Equals(addedEvent))
+ {
+ shortcutAdded = null;
+
+ if (shortcutAddCallback != null)
+ {
+ Interop.Shortcut.UnsetShortcutAddCallback();
+ shortcutAddCallback = null;
+ }
+ }
+ else
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.InvalidParameter, null);
+ }
+ }
+
+ /// <summary>
+ /// Unregisters a callback for the shortcut request.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="deletedEvent">The callback function pointer that used for RegisterCallback</param>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static void UnregisterEventHandler(ShortcutDeleted deletedEvent)
+ {
+ if (shortcutDeleted.Equals(deletedEvent))
+ {
+ shortcutDeleted = null;
+
+ if (shortcutDeleteCallback != null)
+ {
+ Interop.Shortcut.UnsetShortcutDeleteCallback();
+ shortcutDeleteCallback = null;
+ }
+ }
+ else
+ {
+ throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.InvalidParameter, null);
+ }
+ }
+
+ /// <summary>
+ /// Gets the preset list of shortcut template from the installed package.
+ /// </summary>
+ /// <since_tizen> 3 </since_tizen>
+ /// <param name="appId">Application ID.</param>
+ /// <returns>The List of ShortcutTemplate.</returns>
+ /// <feature>http://tizen.org/feature/shortcut </feature>
+ /// <privilege>http://tizen.org/privilege/shortcut</privilege>
+ /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
+ /// <exception cref="UnauthorizedAccessException">Thrown in case of permission denied.</exception>
+ /// <exception cref="InvalidOperationException">Thrown in case of any internal error.</exception>
+ /// <exception cref="NotSupportedException">Thrown when Shortcut is not supported.</exception>
+ public static IEnumerable<ShortcutTemplate> GetTemplateList(string appId)
+ {
+ shortcutTemplates.Clear();
+
+ Interop.Shortcut.ListCallback callback = (appName, iconPath, shortcutName, extrakey, extraData, user_data) =>
+ {
+ ShortcutTemplate template = new ShortcutTemplate
+ {
+ AppId = appName,
+ ShortcutName = shortcutName,
+ IconPath = iconPath,
+ ExtraKey = extrakey,
+ ExtraData = extraData,
+ };
+
+ shortcutTemplates.Add(template);
+
+ return 0;
+ };
+
+ Interop.Shortcut.GetList(appId, callback, IntPtr.Zero);
+
+ return shortcutTemplates;
+ }
+
+ private static int AddCallback(string appId, string shortcutName, int type, string contentInfo, string iconPath, int processId, double period, bool isAllowDuplicate, IntPtr data)
+ {
+ ShortcutError err;
+
+ if (type == (int)ShortcutType.LaunchByApp || type == (int)ShortcutType.LaunchByUri)
+ {
+ HomeShortcutAddedInfo shortcutInfo = new HomeShortcutAddedInfo
+ {
+ ShortcutName = shortcutName,
+ IconPath = iconPath,
+ IsAllowDuplicate = isAllowDuplicate,
+ AppId = appId,
+ };
+
+ if (contentInfo != null && contentInfo != String.Empty)
+ {
+ shortcutInfo.Uri = contentInfo;
+ }
+
+ if (shortcutAdded != null)
+ {
+ err = shortcutAdded(shortcutInfo);
+ }
+ else
+ {
+ err = ShortcutError.IoError;
+ }
+ }
+ else
+ {
+ WidgetShortcutAddedInfo shortcutInfo = new WidgetShortcutAddedInfo
+ {
+ ShortcutName = shortcutName,
+ IconPath = iconPath,
+ IsAllowDuplicate = isAllowDuplicate,
+ WidgetId = appId,
+ WidgetSize = (ShortcutWidgetSize)type,
+ Period = period,
+ };
+
+ if (shortcutAdded != null)
+ {
+ err = shortcutAdded(shortcutInfo);
+ }
+ else
+ {
+ err = ShortcutError.IoError;
+ }
+ }
+
+ return (int)err;
+ }
+
+ private static int DeleteCallback(string appId, string shortcutName, int processId, IntPtr data)
+ {
+ ShortcutError err = ShortcutError.None;
+
+ ShortcutDeletedInfo deletedInfo = new ShortcutDeletedInfo
+ {
+ AppId = appId,
+ ShortcutName = shortcutName,
+ };
+
+ if (shortcutDeleted != null)
+ {
+ err = shortcutDeleted(deletedInfo);
+ }
+ else
+ {
+ err = ShortcutError.IoError;
+ }
+
+ return (int)err;
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class that contains the preset list of shortcut template from the installed package.
+ /// </summary>
+ public class ShortcutTemplate
+ {
+ /// <summary>
+ /// Gets the Application ID.
+ /// </summary>
+ public string AppId { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the name of the created shortcut icon.
+ /// </summary>
+ public string ShortcutName { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the absolute path of an icon file for this shortcut.
+ /// </summary>
+ public string IconPath { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the user data. A property of shortcut element in manifest file.
+ /// </summary>
+ public string ExtraKey { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the user data. A property of shortcut element in manifest file.
+ /// </summary>
+ public string ExtraData { get; internal set; } = string.Empty;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Applications.Shortcut
+{
+ /// <summary>
+ /// A class that contains information about the widget.
+ /// </summary>
+ public class WidgetShortcutAddedInfo : ShortcutAddedInfo
+ {
+ /// <summary>
+ /// Gets the Widget ID.
+ /// </summary>
+ public string WidgetId { get; internal set; } = string.Empty;
+
+ /// <summary>
+ /// Gets the size of widget.
+ /// </summary>
+ public ShortcutWidgetSize WidgetSize { get; internal set; }
+
+ /// <summary>
+ /// Gets the Update period in seconds.
+ /// </summary>
+ public double Period { get; internal set; }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+internal static partial class Interop
+{
+ internal static partial class Libraries
+ {
+ public const string Shortcut = "libshortcut.so.0";
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+using Tizen.Applications.Shortcut;
+
+internal static partial class Interop
+{
+ internal static partial class Shortcut
+ {
+ internal delegate int AddCallback(string appId, string shortcutName, int type, string contentInfo, string iconPath, int processId, double period, bool isAllowDuplicate, IntPtr data);
+
+ internal delegate int DeleteCallback(string appId, string shortcutName, int processId, IntPtr data);
+
+ internal delegate int ResultCallback(int ret, IntPtr data);
+
+ internal delegate int ListCallback(string package_name, string icon, string name, string extra_key, string extra_data, IntPtr user_data);
+
+ /// <summary>
+ /// Enumeration for values of shortcut response types.
+ /// </summary>
+ internal enum ErrorCode : int
+ {
+ /// <summary>
+ /// Successful
+ /// </summary>
+ None = Tizen.Internals.Errors.ErrorCode.None,
+
+ /// <summary>
+ /// Invalid function parameter
+ /// </summary>
+ InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
+
+ /// <summary>
+ /// Out of memory
+ /// </summary>
+ OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,
+
+ /// <summary>
+ /// Permission denied
+ /// </summary>
+ PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
+
+ /// <summary>
+ /// I/O Error
+ /// </summary>
+ IoError = Tizen.Internals.Errors.ErrorCode.IoError,
+
+ /// <summary>
+ /// Not supported
+ /// </summary>
+ NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported,
+
+ /// <summary>
+ /// Device or resource busy
+ /// </summary>
+ ResourceBusy = Tizen.Internals.Errors.ErrorCode.ResourceBusy,
+
+ /// <summary>
+ /// There is no space to add a new shortcut
+ /// </summary>
+ NoSpace = -0x01160000 | 0x01,
+
+ /// <summary>
+ /// Shortcut is already added
+ /// </summary>
+ Exist = -0x01160000 | 0x02,
+
+ /// <summary>
+ /// Unrecoverable error
+ /// </summary>
+ Fault = -0x01160000 | 0x04,
+
+ /// <summary>
+ /// Not exist shortcut
+ /// </summary>
+ NotExist = -0x01160000 | 0x08,
+
+ /// <summary>
+ /// Connection not established or communication problem
+ /// </summary>
+ COMM = -0x01160000 | 0x40
+ }
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_add_to_home")]
+ internal static extern ErrorCode AddToHome(string name, int type, string uri, string icon, int dubplicate, ResultCallback result, IntPtr data);
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_add_to_home_widget")]
+ internal static extern ErrorCode AddToWidget(string name, ShortcutWidgetSize size, string widgetId, string icon, double period, int dubplicate, ResultCallback result, IntPtr data);
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_remove_from_home")]
+ internal static extern ErrorCode Delete(string name, ResultCallback result, IntPtr data);
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_get_list")]
+ internal static extern ErrorCode GetList(string name, ListCallback list, IntPtr data);
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_set_request_cb")]
+ internal static extern ErrorCode SetShortcutAddCallback(AddCallback cb, IntPtr data);
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_unset_request_cb")]
+ internal static extern ErrorCode UnsetShortcutAddCallback();
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_set_remove_cb")]
+ internal static extern ErrorCode SetShortcutDeleteCallback(DeleteCallback cb, IntPtr data);
+
+ [DllImport(Libraries.Shortcut, EntryPoint = "shortcut_unset_remove_cb")]
+ internal static extern ErrorCode UnsetShortcutDeleteCallback();
+ }
+}
/// Get/set various camera display properties.
/// </summary>
/// <since_tizen> 3 </since_tizen>
- public CameraDisplaySettings DisplaySettings{ get; }
+ public CameraDisplaySettings DisplaySettings { get; }
private Display _display;
return CameraDisplay.SetTarget(GetHandle(), type, evasObject);
}
+ CameraError IDisplayable<CameraError>.ApplyEcoreWindow(IntPtr windowHandle)
+ {
+ throw new NotSupportedException("Camera does not support NUI.Window display.");
+ }
+
/// <summary>
/// Gets the state of the camera.
/// </summary>
[DllImport(Libraries.Player, EntryPoint = "player_set_display_roi_area")]
internal static extern PlayerErrorCode SetRoi(IntPtr player, int x, int y, int width, int height);
+
+ [DllImport(Libraries.Player, EntryPoint = "player_set_display")]
+ internal static extern PlayerErrorCode SetDisplay(IntPtr player, PlayerDisplayType type, IntPtr display);
+
+ [DllImport(Libraries.Player, EntryPoint = "player_set_ecore_wl_display")]
+ internal static extern PlayerErrorCode SetEcoreDisplay(IntPtr player, PlayerDisplayType type, IntPtr
+ ecoreWindow, int x = 0, int y = 0, int width = 1920, int height = 1080);
+
}
}
[DllImport(Libraries.Player, EntryPoint = "player_set_uri")]
internal static extern PlayerErrorCode SetUri(IntPtr player, string uri);
- [DllImport(Libraries.Player, EntryPoint = "player_set_display")]
- internal static extern PlayerErrorCode SetDisplay(IntPtr player, PlayerDisplayType type, IntPtr display);
-
[DllImport(Libraries.Player, EntryPoint = "player_start")]
internal static extern PlayerErrorCode Start(IntPtr player);
using System.Diagnostics;
using System.IO;
using System.Threading;
+using NativeDisplay = Interop.Display;
using static Interop;
namespace Tizen.Multimedia
{
if (display == null)
{
- Log.Info(PlayerLog.Tag, "set display to none");
- return NativePlayer.SetDisplay(Handle, PlayerDisplayType.None, IntPtr.Zero);
+ return NativeDisplay.SetDisplay(Handle, PlayerDisplayType.None, IntPtr.Zero);
}
return display.ApplyTo(this);
Debug.Assert(Enum.IsDefined(typeof(DisplayType), type));
Debug.Assert(type != DisplayType.None);
- return NativePlayer.SetDisplay(Handle,
+ return NativeDisplay.SetDisplay(Handle,
type == DisplayType.Overlay ? PlayerDisplayType.Overlay : PlayerDisplayType.Evas, evasObject);
}
+
+ PlayerErrorCode IDisplayable<PlayerErrorCode>.ApplyEcoreWindow(IntPtr windowHandle)
+ {
+ Debug.Assert(IsDisposed == false);
+
+ return NativeDisplay.SetEcoreDisplay(Handle, PlayerDisplayType.Overlay, windowHandle);
+ }
#endregion
private PlayerTrackInfo _audioTrack;
internal static partial class Interop
{
- internal static partial class RecorderFeatures
+ internal static partial class Recorder
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate bool VideoResolutionCallback(int width, int height, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool FileFormatCallback(RecorderFileFormat format, IntPtr userData);
+ internal delegate bool VideoEncoderCallback(RecorderVideoCodec value, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool AudioEncoderCallback(RecorderAudioCodec codec, IntPtr userData);
+ internal delegate bool AudioEncoderCallback(RecorderAudioCodec value, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool VideoEncoderCallback(RecorderVideoCodec codec, IntPtr userData);
+ internal delegate bool FileFormatCallback(RecorderFileFormat value, IntPtr userData);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_foreach_supported_file_format")]
- internal static extern RecorderError FileFormats(IntPtr handle, FileFormatCallback callback, IntPtr userData);
+ internal static extern RecorderErrorCode GetFileFormats(RecorderHandle handle,
+ FileFormatCallback callback, IntPtr userData = default(IntPtr));
[DllImport(Libraries.Recorder, EntryPoint = "recorder_foreach_supported_audio_encoder")]
- internal static extern RecorderError AudioEncoders(IntPtr handle, AudioEncoderCallback callback, IntPtr userData);
+ internal static extern RecorderErrorCode GetAudioEncoders(RecorderHandle handle,
+ AudioEncoderCallback callback, IntPtr userData = default(IntPtr));
[DllImport(Libraries.Recorder, EntryPoint = "recorder_foreach_supported_video_encoder")]
- internal static extern RecorderError VideoEncoders(IntPtr handle, VideoEncoderCallback callback, IntPtr userData);
+ internal static extern RecorderErrorCode GetVideoEncoders(RecorderHandle handle,
+ VideoEncoderCallback callback, IntPtr userData = default(IntPtr));
[DllImport(Libraries.Recorder, EntryPoint = "recorder_foreach_supported_video_resolution")]
- internal static extern RecorderError VideoResolution(IntPtr handle, VideoResolutionCallback callback, IntPtr userData);
+ public static extern RecorderErrorCode GetVideoResolutions(RecorderHandle handle,
+ VideoResolutionCallback callback, IntPtr userData = default(IntPtr));
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+
+ internal static partial class Recorder
+ {
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void RecorderErrorCallback(RecorderError error, RecorderState current, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void RecordingLimitReachedCallback(RecordingLimitType type, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void RecordingProgressCallback(ulong elapsedTime, ulong fileSize, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void AudioStreamCallback(IntPtr stream, int size, AudioSampleType type, int channel,
+ uint timeStamp, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void StatechangedCallback(RecorderState previous, RecorderState current, bool byPolicy, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_error_cb")]
+ internal static extern RecorderErrorCode SetErrorCallback(RecorderHandle handle, RecorderErrorCallback callback,
+ IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_error_cb")]
+ internal static extern RecorderErrorCode UnsetErrorCallback(RecorderHandle handle);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_state_changed_cb")]
+ internal static extern RecorderErrorCode SetStateChangedCallback(RecorderHandle handle,
+ StatechangedCallback callback, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_state_changed_cb")]
+ internal static extern RecorderErrorCode UnsetStateChangedCallback(RecorderHandle handle);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_recording_status_cb")]
+ internal static extern RecorderErrorCode SetRecordingProgressCallback(RecorderHandle handle,
+ RecordingProgressCallback callback, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_recording_status_cb")]
+ internal static extern RecorderErrorCode UnsetRecordingProgressCallback(RecorderHandle handle);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_audio_stream_cb")]
+ internal static extern RecorderErrorCode SetAudioStreamCallback(RecorderHandle handle,
+ AudioStreamCallback callback, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_audio_stream_cb")]
+ internal static extern RecorderErrorCode UnsetAudioStreamCallback(RecorderHandle handle);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_recording_limit_reached_cb")]
+ internal static extern RecorderErrorCode SetLimitReachedCallback(RecorderHandle handle,
+ RecordingLimitReachedCallback callback, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_recording_limit_reached_cb")]
+ internal static extern RecorderErrorCode UnsetLimitReachedCallback(RecorderHandle handle);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void MuxedStreamCallback(IntPtr stream, int size, ulong offset, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_muxed_stream_cb")]
+ internal static extern RecorderErrorCode SetMuxedStreamCallback(RecorderHandle handle,
+ MuxedStreamCallback callback, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_muxed_stream_cb")]
+ internal static extern RecorderErrorCode UnsetMuxedStreamCallback(RecorderHandle handle);
+
+
+ #region InterruptCallback
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void InterruptedCallback(RecorderPolicy policy, RecorderState previous,
+ RecorderState current, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_interrupted_cb")]
+ internal static extern RecorderErrorCode SetInterruptedCallback(RecorderHandle handle,
+ InterruptedCallback callback, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_interrupted_cb")]
+ internal static extern RecorderErrorCode UnsetInterruptedCallback(RecorderHandle handle);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void InterruptStartedCallback(RecorderPolicy policy, RecorderState state,
+ IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_interrupt_started_cb")]
+ internal static extern RecorderErrorCode SetInterruptStartedCallback(RecorderHandle handle,
+ InterruptStartedCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_interrupt_started_cb")]
+ internal static extern RecorderErrorCode UnsetInterruptStartedCallback(RecorderHandle handle);
+
+ #endregion
+
+
+ #region DeviceStateChangedCallback
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void DeviceStateChangedCallback(RecorderType type, RecorderDeviceState state, IntPtr userData);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_add_device_state_changed_cb")]
+ internal static extern RecorderErrorCode AddDeviceStateChangedCallback(DeviceStateChangedCallback callback,
+ IntPtr userData, out int id);
+
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_remove_device_state_changed_cb")]
+ internal static extern RecorderErrorCode RemoveDeviceStateChangedCallback(int id);
+ #endregion
+ }
+}
\ No newline at end of file
internal static partial class Interop
{
- internal static partial class RecorderSettings
+ internal static partial class Recorder
{
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_audio_channel")]
- internal static extern RecorderError GetAudioChannel(IntPtr handle, out int channelCount);
+ internal static extern RecorderErrorCode GetAudioChannel(RecorderHandle handle, out int channelCount);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_audio_channel")]
- internal static extern RecorderError SetAudioChannel(IntPtr handle, int channelCount);
+ internal static extern RecorderErrorCode SetAudioChannel(RecorderHandle handle, int channelCount);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_audio_device")]
- internal static extern RecorderError GetAudioDevice(IntPtr handle, out RecorderAudioDevice device);
+ internal static extern RecorderErrorCode GetAudioDevice(RecorderHandle handle, out RecorderAudioDevice device);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_audio_device")]
- internal static extern RecorderError SetAudioDevice(IntPtr handle, RecorderAudioDevice device);
+ internal static extern RecorderErrorCode SetAudioDevice(RecorderHandle handle, RecorderAudioDevice device);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_audio_level")]
- internal static extern RecorderError GetAudioLevel(IntPtr handle, out double dB);
+ internal static extern RecorderErrorCode GetAudioLevel(RecorderHandle handle, out double dB);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_audio_samplerate")]
- internal static extern RecorderError GetAudioSampleRate(IntPtr handle, out int sampleRate);
+ internal static extern RecorderErrorCode GetAudioSampleRate(RecorderHandle handle, out int sampleRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_audio_samplerate")]
- internal static extern RecorderError SetAudioSampleRate(IntPtr handle, int sampleRate);
+ internal static extern RecorderErrorCode SetAudioSampleRate(RecorderHandle handle, int sampleRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_audio_encoder_bitrate")]
- internal static extern RecorderError GetAudioEncoderBitrate(IntPtr handle, out int bitRate);
+ internal static extern RecorderErrorCode GetAudioEncoderBitrate(RecorderHandle handle, out int bitRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_audio_encoder_bitrate")]
- internal static extern RecorderError SetAudioEncoderBitrate(IntPtr handle, int bitRate);
+ internal static extern RecorderErrorCode SetAudioEncoderBitrate(RecorderHandle handle, int bitRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_video_encoder_bitrate")]
- internal static extern RecorderError GetVideoEncoderBitrate(IntPtr handle, out int bitRate);
+ internal static extern RecorderErrorCode GetVideoEncoderBitrate(RecorderHandle handle, out int bitRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_video_encoder_bitrate")]
- internal static extern RecorderError SetVideoEncoderBitrate(IntPtr handle, int bitRate);
+ internal static extern RecorderErrorCode SetVideoEncoderBitrate(RecorderHandle handle, int bitRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_audio_encoder")]
- internal static extern RecorderError GetAudioEncoder(IntPtr handle, out RecorderAudioCodec codec);
+ internal static extern RecorderErrorCode GetAudioEncoder(RecorderHandle handle, out RecorderAudioCodec codec);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_set_audio_encoder")]
- internal static extern RecorderError SetAudioEncoder(IntPtr handle, RecorderAudioCodec codec);
+ internal static extern RecorderErrorCode SetAudioEncoder(RecorderHandle handle, RecorderAudioCodec codec);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_video_encoder")]
- internal static extern RecorderError GetVideoEncoder(IntPtr handle, out RecorderVideoCodec codec);
+ internal static extern RecorderErrorCode GetVideoEncoder(RecorderHandle handle, out RecorderVideoCodec codec);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_set_video_encoder")]
- internal static extern RecorderError SetVideoEncoder(IntPtr handle, RecorderVideoCodec codec);
+ internal static extern RecorderErrorCode SetVideoEncoder(RecorderHandle handle, RecorderVideoCodec codec);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_file_format")]
- internal static extern RecorderError GetFileFormat(IntPtr handle, out RecorderFileFormat format);
+ internal static extern RecorderErrorCode GetFileFormat(RecorderHandle handle, out RecorderFileFormat format);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_set_file_format")]
- internal static extern RecorderError SetFileFormat(IntPtr handle, RecorderFileFormat format);
+ internal static extern RecorderErrorCode SetFileFormat(RecorderHandle handle, RecorderFileFormat format);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_filename")]
- internal static extern RecorderError GetFileName(IntPtr handle, out IntPtr path);
+ internal static extern RecorderErrorCode GetFileName(RecorderHandle handle, out IntPtr path);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_set_filename")]
- internal static extern RecorderError SetFileName(IntPtr handle, string path);
+ internal static extern RecorderErrorCode SetFileName(RecorderHandle handle, string path);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_size_limit")]
- internal static extern RecorderError GetSizeLimit(IntPtr handle, out int kbyte);
+ internal static extern RecorderErrorCode GetSizeLimit(RecorderHandle handle, out int kbyte);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_size_limit")]
- internal static extern RecorderError SetSizeLimit(IntPtr handle, int kbyte);
+ internal static extern RecorderErrorCode SetSizeLimit(RecorderHandle handle, int kbyte);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_time_limit")]
- internal static extern RecorderError GetTimeLimit(IntPtr handle, out int second);
+ internal static extern RecorderErrorCode GetTimeLimit(RecorderHandle handle, out int second);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_time_limit")]
- internal static extern RecorderError SetTimeLimit(IntPtr handle, int second);
+ internal static extern RecorderErrorCode SetTimeLimit(RecorderHandle handle, int second);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_is_muted")]
[return: MarshalAs(UnmanagedType.I1)]
- internal static extern bool GetMute(IntPtr handle);
+ internal static extern bool GetMute(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_mute")]
- internal static extern RecorderError SetMute(IntPtr handle, bool enable);
+ internal static extern RecorderErrorCode SetMute(RecorderHandle handle, bool enable);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_recording_motion_rate")]
- internal static extern RecorderError GetMotionRate(IntPtr handle, out double motionRate);
+ internal static extern RecorderErrorCode GetMotionRate(RecorderHandle handle, out double motionRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_recording_motion_rate")]
- internal static extern RecorderError SetMotionRate(IntPtr handle, double motionRate);
+ internal static extern RecorderErrorCode SetMotionRate(RecorderHandle handle, double motionRate);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_get_orientation_tag")]
- internal static extern RecorderError GetOrientationTag(IntPtr handle, out Rotation orientation);
+ internal static extern RecorderErrorCode GetOrientationTag(RecorderHandle handle, out Rotation orientation);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_attr_set_orientation_tag")]
- internal static extern RecorderError SetOrientationTag(IntPtr handle, Rotation orientation);
+ internal static extern RecorderErrorCode SetOrientationTag(RecorderHandle handle, Rotation orientation);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_video_resolution")]
- internal static extern RecorderError GetVideoResolution(IntPtr handle, out int width, out int height);
+ internal static extern RecorderErrorCode GetVideoResolution(RecorderHandle handle, out int width, out int height);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_set_video_resolution")]
- internal static extern RecorderError SetVideoResolution(IntPtr handle, int width, int height);
+ internal static extern RecorderErrorCode SetVideoResolution(RecorderHandle handle, int width, int height);
}
}
internal static partial class Interop
{
+
internal static partial class Recorder
{
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void RecorderErrorCallback(RecorderErrorCode error, RecorderState current, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void InterruptedCallback(RecorderPolicy policy, RecorderState previous, RecorderState current, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void RecordingLimitReachedCallback(RecordingLimitType type, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void RecordingProgressCallback(ulong elapsedTime, ulong fileSize, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void AudioStreamCallback(IntPtr stream, int size, AudioSampleType type, int channel, uint timeStamp, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void StatechangedCallback(RecorderState previous, RecorderState current, bool byPolicy, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void MuxedStreamCallback(IntPtr stream, int size, ulong offset, IntPtr userData);
-
[DllImport(Libraries.Recorder, EntryPoint = "recorder_create_audiorecorder")]
- internal static extern RecorderError Create(out IntPtr handle);
+ internal static extern RecorderErrorCode Create(out RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_create_videorecorder")]
- internal static extern RecorderError CreateVideo(IntPtr cameraHandle, out IntPtr handle);
-
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_destroy")]
- internal static extern RecorderError Destroy(IntPtr handle);
+ internal static extern RecorderErrorCode CreateVideo(IntPtr cameraHandle, out RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_prepare")]
- internal static extern RecorderError Prepare(IntPtr handle);
+ internal static extern RecorderErrorCode Prepare(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_unprepare")]
- internal static extern RecorderError Unprepare(IntPtr handle);
+ internal static extern RecorderErrorCode Unprepare(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_start")]
- internal static extern RecorderError Start(IntPtr handle);
+ internal static extern RecorderErrorCode Start(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_pause")]
- internal static extern RecorderError Pause(IntPtr handle);
+ internal static extern RecorderErrorCode Pause(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_commit")]
- internal static extern RecorderError Commit(IntPtr handle);
+ internal static extern RecorderErrorCode Commit(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_cancel")]
- internal static extern RecorderError Cancel(IntPtr handle);
+ internal static extern RecorderErrorCode Cancel(RecorderHandle handle);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_get_state")]
- internal static extern RecorderError GetState(IntPtr handle, out RecorderState state);
+ internal static extern RecorderErrorCode GetState(RecorderHandle handle, out RecorderState state);
[DllImport(Libraries.Recorder, EntryPoint = "recorder_set_sound_stream_info")]
- internal static extern RecorderError SetAudioStreamPolicy(IntPtr handle, AudioStreamPolicyHandle streamInfoHandle);
+ internal static extern RecorderErrorCode SetAudioStreamPolicy(RecorderHandle handle, AudioStreamPolicyHandle streamInfoHandle);
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_error_cb")]
- internal static extern RecorderError SetErrorCallback(IntPtr handle, RecorderErrorCallback callback, IntPtr userData);
-
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_error_cb")]
- internal static extern RecorderError UnsetErrorCallback(IntPtr handle);
-
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_interrupted_cb")]
- internal static extern RecorderError SetInterruptedCallback(IntPtr handle, InterruptedCallback callback, IntPtr userData);
-
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_interrupted_cb")]
- internal static extern RecorderError UnsetInterruptedCallback(IntPtr handle);
-
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_state_changed_cb")]
- internal static extern RecorderError SetStateChangedCallback(IntPtr handle, StatechangedCallback callback, IntPtr userData);
-
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_state_changed_cb")]
- internal static extern RecorderError UnsetStateChangedCallback(IntPtr handle);
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_get_device_state")]
+ internal static extern RecorderErrorCode GetDeviceState(RecorderType type, out RecorderDeviceState state);
+ }
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_recording_status_cb")]
- internal static extern RecorderError SetRecordingProgressCallback(IntPtr handle, RecordingProgressCallback callback, IntPtr userData);
+ internal class RecorderHandle : SafeHandle
+ {
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_destroy")]
+ private static extern RecorderErrorCode Destroy(IntPtr handle);
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_recording_status_cb")]
- internal static extern RecorderError UnsetRecordingProgressCallback(IntPtr handle);
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_cancel")]
+ private static extern RecorderErrorCode Cancel(IntPtr handle);
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_audio_stream_cb")]
- internal static extern RecorderError SetAudioStreamCallback(IntPtr handle, AudioStreamCallback callback, IntPtr userData);
+ [DllImport(Libraries.Recorder, EntryPoint = "recorder_unprepare")]
+ private static extern RecorderErrorCode Unprepare(IntPtr handle);
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_audio_stream_cb")]
- internal static extern RecorderError UnsetAudioStreamCallback(IntPtr handle);
+ protected RecorderHandle() : base(IntPtr.Zero, true)
+ {
+ }
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_recording_limit_reached_cb")]
- internal static extern RecorderError SetLimitReachedCallback(IntPtr handle, RecordingLimitReachedCallback callback, IntPtr userData);
+ public override bool IsInvalid => handle == IntPtr.Zero;
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_recording_limit_reached_cb")]
- internal static extern RecorderError UnsetLimitReachedCallback(IntPtr handle);
+ protected override bool ReleaseHandle()
+ {
+ Cancel(handle).Ignore(RecorderErrorCode.InvalidState).ThrowIfError("Failed to cancel");
+ Unprepare(handle).Ignore(RecorderErrorCode.InvalidState).ThrowIfError("Failed to unprepare");
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_set_muxed_stream_cb")]
- internal static extern RecorderError SetMuxedStreamCallback(IntPtr handle, MuxedStreamCallback callback, IntPtr userData);
+ var ret = Destroy(handle);
+ if (ret != RecorderErrorCode.None)
+ {
+ Tizen.Log.Debug(GetType().FullName, $"Failed to release native RecorderHandle.");
- [DllImport(Libraries.Recorder, EntryPoint = "recorder_unset_muxed_stream_cb")]
- internal static extern RecorderError UnsetMuxedStreamCallback(IntPtr handle);
+ return false;
+ }
+ return true;
+ }
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Native = Interop.Recorder;
+using NativeHandle = Interop.RecorderHandle;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Provides the ability to control audio recording.
+ /// </summary>
+ public class AudioRecorder : Recorder
+ {
+ private static NativeHandle CreateHandle()
+ {
+ Native.Create(out var handle).ThrowIfError("Failed to create Audio recorder");
+
+ return handle;
+ }
+
+ private static void ThrowIfCodecAndFormatNotValid(RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat)
+ {
+ if (audioCodec == RecorderAudioCodec.None)
+ {
+ throw new ArgumentOutOfRangeException(nameof(audioCodec),
+ "RecorderAudioCodec.None is only available with VideoRecorder.");
+ }
+
+ audioCodec.ThrowIfFormatNotSupported(fileFormat);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AudioRecorder"/> class with the specified audio codec and file format.
+ /// </summary>
+ /// <param name="audioCodec">The codec for audio encoding.</param>
+ /// <param name="fileFormat">The format of result file.</param>
+ /// <feature>http://tizen.org/feature/microphone</feature>
+ /// <exception cref="InvalidOperationException">An internal error occurred.</exception>
+ /// <exception cref="NotSupportedException">
+ /// A required feature is not supported.\n
+ /// -or-\n
+ /// <paramref name="audioCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified audio codec.
+ /// </exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="audioCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// <paramref name="audioCodec"/> is <see cref="RecorderAudioCodec.None"/>
+ /// </exception>
+ /// <seealso cref="Recorder.GetSupportedAudioCodecs"/>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderAudioCodec)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderAudioCodec, RecorderFileFormat)"/>
+ public AudioRecorder(RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat) : base(CreateHandle())
+ {
+ SetFormatAndCodec(audioCodec, fileFormat);
+ }
+
+ /// <summary>
+ /// Sets the audio codec and the file format for recording.
+ /// </summary>
+ /// <param name="audioCodec">The codec for audio encoding.</param>
+ /// <param name="fileFormat">The format of result file.</param>
+ /// <exception cref="NotSupportedException">
+ /// <paramref name="audioCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified audio codec.
+ /// </exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="audioCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// <paramref name="audioCodec"/> is <see cref="RecorderAudioCodec.None"/>
+ /// </exception>
+ /// <seealso cref="Recorder.GetSupportedAudioCodecs"/>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderAudioCodec)"/>
+ /// <seealso cref="Recorder.Start(string)"/>
+ public void SetFormatAndCodec(RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat)
+ {
+ ThrowIfCodecAndFormatNotValid(audioCodec, fileFormat);
+
+ AudioCodec = audioCodec;
+ FileFormat = fileFormat;
+ }
+ }
+}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Tizen.Multimedia
-{
- /// <summary>
- /// An extended EventArgs class containing details of audio stream.
- /// </summary>
- public class AudioStreamDeliveredEventArgs : EventArgs
- {
- internal AudioStreamDeliveredEventArgs(IntPtr stream, int streamSize, AudioSampleType type, int channel, uint recordingTime)
- {
- Stream = new byte[streamSize];
- Marshal.Copy(stream, Stream, 0, streamSize);
- StreamLength = streamSize;
- Type = type;
- Channel = channel;
- RecordingTime = recordingTime;
- }
-
- /// <summary>
- /// The audio stream data.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public byte[] Stream { get; }
-
- /// <summary>
- /// The length of audio stream data.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public int StreamLength { get; }
-
- /// <summary>
- /// The audio format type.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public AudioSampleType Type { get; }
-
- /// <summary>
- /// The number of channels.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public int Channel { get; }
-
- /// <summary>
- /// The recording time of the stream buffer in milliseconds.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public uint RecordingTime { get; }
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Provides data for the <see cref="Recorder.AudioStreamStoring"/> event.
+ /// </summary>
+ public class AudioStreamStoringEventArgs : EventArgs
+ {
+ internal AudioStreamStoringEventArgs(IMediaBuffer stream, AudioSampleType type, int channel,
+ uint recordingTime)
+ {
+ Stream = stream;
+ Type = type;
+ Channels = channel;
+ Timestamp = recordingTime;
+ }
+
+ /// <summary>
+ /// Gets the audio stream buffer.
+ /// </summary>
+ /// <remarks>
+ /// If the stream is modified in the event handler, the modified data will be stored.
+ /// \n
+ /// The buffer is only valid in the event.\n
+ /// Any attempt to access to this buffer after the event ends will throw an exception.
+ /// </remarks>
+ public IMediaBuffer Stream { get; }
+
+ /// <summary>
+ /// Gets the audio format type.
+ /// </summary>
+ public AudioSampleType Type { get; }
+
+ /// <summary>
+ /// Gets the number of channels.
+ /// </summary>
+ public int Channels { get; }
+
+ /// <summary>
+ /// Gets the timestamp(PTS) of stream buffer in milliseconds.
+ /// </summary>
+ public long Timestamp { get; }
+ }
+}
*/
using System;
-using System.Runtime.InteropServices;
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended EventArgs class containing details of muxed stream(Audio + Video).
+ /// Provides data for the <see cref="Recorder.MuxedStreamDelivered"/> event.
/// </summary>
public class MuxedStreamDeliveredEventArgs : EventArgs
{
- internal MuxedStreamDeliveredEventArgs(IntPtr stream, int streamLength, ulong offset)
+ internal MuxedStreamDeliveredEventArgs(IMediaBuffer stream, ulong offset)
{
- Stream = new byte[streamLength];
- Marshal.Copy(stream, Stream, 0, streamLength);
- StreamLength = streamLength;
- Offset = offset;
+ Stream = stream;
+ Offset = (long)offset;
}
/// <summary>
- /// The muexed stream data.
+ /// Gets the stream buffer that will be recordered.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public byte[] Stream { get; }
+ /// <remarks>
+ /// This buffer is read-only and only valid in the event.\n
+ /// Any attempt to access to this buffer after the event ends will throw an exception.
+ /// </remarks>
+ public IMediaBuffer Stream { get; }
/// <summary>
- /// The length of muxed stream data.
+ /// The file offset where the buffer will be written.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public int StreamLength { get; }
-
- /// <summary>
- /// The offset of the stream data.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public ulong Offset { get; }
+ public long Offset { get; }
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Native = Interop.Recorder;
+using NativeHandle = Interop.RecorderHandle;
+
+namespace Tizen.Multimedia
+{
+ internal class Capabilities
+ {
+ public IEnumerable<RecorderFileFormat> SupportedFileFormats { get; }
+ public IEnumerable<RecorderAudioCodec> SupportedAudioCodecs { get; }
+ public IEnumerable<RecorderVideoCodec> SupportedVideoCodecs { get; }
+
+ private RecorderErrorCode GetAudioEncoders(NativeHandle handle, List<RecorderAudioCodec> result) =>
+ Native.GetAudioEncoders(handle, (codec, _) => { result.Add(codec); return true; });
+
+ private RecorderErrorCode GetFileFormats(NativeHandle handle, List<RecorderFileFormat> result) =>
+ Native.GetFileFormats(handle, (format, _) => { result.Add(format); return true; });
+
+ private RecorderErrorCode GetVideoEncoders(NativeHandle handle, List<RecorderVideoCodec> result) =>
+ Native.GetVideoEncoders(handle, (codec, _) => { result.Add(codec); return true; });
+
+ private static IEnumerable<T> Load<T>(NativeHandle handle, Func<NativeHandle, List<T>, RecorderErrorCode> loadFunc)
+ {
+ var result = new List<T>();
+
+ var ret = loadFunc(handle, result);
+
+ if (ret == RecorderErrorCode.NotSupported)
+ {
+ return null;
+ }
+
+ ret.ThrowIfError("Failed to load the capabilities");
+
+ return result.AsReadOnly();
+ }
+
+ internal Capabilities(NativeHandle handle)
+ {
+ SupportedVideoCodecs = Load<RecorderVideoCodec>(handle, GetVideoEncoders);
+
+ SupportedAudioCodecs = Load<RecorderAudioCodec>(handle, GetAudioEncoders);
+ SupportedFileFormats = Load<RecorderFileFormat>(handle, GetFileFormats);
+ }
+ }
+
+ public partial class Recorder
+ {
+ internal static Lazy<Capabilities> Capabilities { get; } = new Lazy<Capabilities>(LoadCapabilities);
+
+ private static Capabilities LoadCapabilities()
+ {
+ Native.Create(out var handle).ThrowIfError("Failed to load the capabilities"); ;
+ using (handle)
+ {
+ return new Capabilities(handle);
+ }
+ }
+
+ /// <summary>
+ /// Gets the file formats that the current device supports.
+ /// </summary>
+ public static IEnumerable<RecorderFileFormat> GetSupportedFileFormats() => Capabilities.Value.SupportedFileFormats;
+
+ /// <summary>
+ /// Gets the audio encoders that the current device supports.
+ /// </summary>
+ public static IEnumerable<RecorderAudioCodec> GetSupportedAudioCodecs() => Capabilities.Value.SupportedAudioCodecs;
+
+ internal static void ValidateFileFormat(RecorderFileFormat format)
+ {
+ if (GetSupportedFileFormats().Contains(format) == false)
+ {
+ throw new NotSupportedException($"{format.ToString()} is not supported.");
+ }
+ }
+
+ internal static void ValidateAudioCodec(RecorderAudioCodec codec)
+ {
+ if (GetSupportedAudioCodecs().Contains(codec) == false)
+ {
+ throw new NotSupportedException($"{codec.ToString()} is not supported.");
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Linq;
+using Native = Interop.Recorder;
+
+namespace Tizen.Multimedia
+{
+ public partial class Recorder
+ {
+ /// <summary>
+ /// Occurs when an error occurs during recorder operation.
+ /// </summary>
+ public event EventHandler<RecordingErrorOccurredEventArgs> ErrorOccurred;
+ private Native.RecorderErrorCallback _errorOccurredCallback;
+
+ /// <summary>
+ /// Occurs after interrupt handling is completed.
+ /// </summary>
+ public event EventHandler<RecorderInterruptedEventArgs> Interrupted;
+ private Native.InterruptedCallback _interruptedCallback;
+
+ /// <summary>
+ /// This event occurs when recorder state is changed.
+ /// </summary>
+ public event EventHandler<RecorderStateChangedEventArgs> StateChanged;
+ private Native.StatechangedCallback _stateChangedCallback;
+
+ /// <summary>
+ /// Occurs when recording information changes.
+ /// </summary>
+ public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged;
+ private Native.RecordingProgressCallback _recordingProgressCallback;
+
+ //TODO need to test dispose while event handler is running.
+ /// <summary>
+ /// Occurs when audio stream data is being delivered.
+ /// </summary>
+ /// <remarks>
+ /// Do not call <see cref="Commit"/> and <see cref="Cancel"/> in this event.
+ /// </remarks>
+ public event EventHandler<AudioStreamStoringEventArgs> AudioStreamStoring;
+ private Native.AudioStreamCallback _audioStreamCallback;
+
+ /// <summary>
+ /// Occurs when recording limit is reached.
+ /// </summary>
+ /// <remarks>
+ /// After this event is raised, recording data is discarded and not written in the recording file.
+ /// </remarks>
+ public event EventHandler<RecordingLimitReachedEventArgs> RecordingLimitReached;
+ private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
+
+ /// <summary>
+ /// Occurs when muxed stream data is being delivered.
+ /// </summary>
+ public event EventHandler<MuxedStreamDeliveredEventArgs> MuxedStreamDelivered;
+ private Native.MuxedStreamCallback _muxedStreamCallback;
+
+ private void RegisterEvents()
+ {
+ RegisterErrorCallback();
+ RegisterInterruptedEvent();
+ RegisterStateChangedEvent();
+ RegisterRecordingProgressEvent();
+ RegisterAudioStreamDeliveredEvent();
+ RegisterRecordingLimitReachedEvent();
+ RegisterMuxedStreamEvent();
+ RegisterInterruptingEvent();
+ }
+
+ private void RegisterErrorCallback()
+ {
+ _errorOccurredCallback = (error, state, _) =>
+ {
+ ErrorOccurred?.Invoke(this, new RecordingErrorOccurredEventArgs(error, state));
+ };
+
+ Native.SetErrorCallback(_handle, _errorOccurredCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize ErrorOccurred event");
+ }
+
+ private void RegisterInterruptedEvent()
+ {
+ _interruptedCallback = (policy, previousState, currentState, _) =>
+ {
+ Interrupted?.Invoke(this, new RecorderInterruptedEventArgs(policy, previousState, currentState));
+ };
+ Native.SetInterruptedCallback(_handle, _interruptedCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize Interrupted event");
+ }
+
+ private void RegisterStateChangedEvent()
+ {
+ _stateChangedCallback = (RecorderState previous, RecorderState current, bool byPolicy, IntPtr userData) =>
+ {
+ SetState(current);
+ StateChanged?.Invoke(this, new RecorderStateChangedEventArgs(previous, current, byPolicy));
+ };
+
+ Native.SetStateChangedCallback(_handle, _stateChangedCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize StateChanged event");
+ }
+
+ private void RegisterRecordingProgressEvent()
+ {
+ _recordingProgressCallback = (ulong elapsedTime, ulong fileSize, IntPtr userData) =>
+ {
+ RecordingStatusChanged?.Invoke(this, new RecordingStatusChangedEventArgs((long)elapsedTime, (long)fileSize));
+ };
+
+ Native.SetRecordingProgressCallback(_handle, _recordingProgressCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize RecordingStatusChanged event");
+ }
+
+ private void RegisterAudioStreamDeliveredEvent()
+ {
+ _audioStreamCallback = (stream, streamSize, type, channel, recordingTime, _) =>
+ {
+ var handler = AudioStreamStoring;
+ if (handler != null)
+ {
+ _isInAudioStreamStoring.Value = true;
+
+ using (var buffer = new ScopedMediaBuffer(stream, streamSize))
+ {
+ handler.Invoke(this,
+ new AudioStreamStoringEventArgs(buffer, type, channel, recordingTime));
+ }
+ }
+ };
+
+ Native.SetAudioStreamCallback(_handle, _audioStreamCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize AudioStreamStoring event");
+ }
+
+ private void RegisterRecordingLimitReachedEvent()
+ {
+ _recordingLimitReachedCallback = (RecordingLimitType type, IntPtr userData) =>
+ {
+ RecordingLimitReached?.Invoke(this, new RecordingLimitReachedEventArgs(type));
+ };
+
+ Native.SetLimitReachedCallback(_handle, _recordingLimitReachedCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize RecordingLimitReached event");
+ }
+
+ private void RegisterMuxedStreamEvent()
+ {
+ _muxedStreamCallback = (IntPtr stream, int streamSize, ulong offset, IntPtr userData) =>
+ {
+ using (var buffer = new ScopedMediaBuffer(stream, streamSize, true))
+ {
+ MuxedStreamDelivered?.Invoke(this, new MuxedStreamDeliveredEventArgs(buffer, offset));
+ }
+ };
+
+ Native.SetMuxedStreamCallback(_handle, _muxedStreamCallback, IntPtr.Zero).
+ ThrowIfError("Failed to initialize MuxedStreamDelivered event");
+ }
+
+ /// <summary>
+ /// Occurs before interrupt handling is started.
+ /// </summary>
+ public event EventHandler<RecorderInterruptingEventArgs> Interrupting;
+ private Native.InterruptStartedCallback _interruptingCallback;
+
+ private void RegisterInterruptingEvent()
+ {
+ _interruptingCallback = (policy, state, _) =>
+ {
+ Interrupting?.Invoke(this, new RecorderInterruptingEventArgs(policy, state));
+ };
+
+ Native.SetInterruptStartedCallback(_handle, _interruptingCallback).
+ ThrowIfError("Failed to initialize Interrupting event");
+ }
+
+ #region DeviceStateChanged
+
+ private static object _deviceStateChangedLock = new object();
+ private static EventHandler<RecorderDeviceStateChangedEventArgs> _deviceStateChanged;
+ private static Native.DeviceStateChangedCallback _deviceStateChangedCallback;
+ private static int _deviceStateChangedId;
+
+ /// <summary>
+ /// Occurs when a recorder device state changes.
+ /// </summary>
+ public static event EventHandler<RecorderDeviceStateChangedEventArgs> DeviceStateChanged
+ {
+ add
+ {
+ if (value == null)
+ {
+ return;
+ }
+
+ lock (_deviceStateChangedLock)
+ {
+ if (_deviceStateChanged == null)
+ {
+ RegisterDeviceStateChangedEvent();
+ }
+
+ _deviceStateChanged += value;
+ }
+ }
+ remove
+ {
+ if (value == null)
+ {
+ return;
+ }
+
+ lock (_deviceStateChangedLock)
+ {
+ if (_deviceStateChanged == value)
+ {
+ UnregisterDeviceStateChangedEvent();
+ }
+
+ _deviceStateChanged -= value;
+ }
+ }
+ }
+
+ private static void RegisterDeviceStateChangedEvent()
+ {
+ _deviceStateChangedCallback = (type, state, _) =>
+ {
+ _deviceStateChanged?.Invoke(null, new RecorderDeviceStateChangedEventArgs(type, state));
+ };
+
+ Native.AddDeviceStateChangedCallback(_deviceStateChangedCallback, IntPtr.Zero, out _deviceStateChangedId).
+ ThrowIfError("Failed to add the event handler.");
+ }
+
+ private static void UnregisterDeviceStateChangedEvent()
+ {
+ Native.RemoveDeviceStateChangedCallback(_deviceStateChangedId).
+ ThrowIfError("Failed to remove the event handler.");
+
+ _deviceStateChangedCallback = null;
+ }
+ #endregion
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using Native = Interop.Recorder;
+
+namespace Tizen.Multimedia
+{
+ public partial class Recorder
+ {
+ private RecorderAudioCodec _audioCodec;
+
+ /// <summary>
+ /// Gets the audio codec for encoding an audio stream.
+ /// </summary>
+ /// <seealso cref="GetSupportedAudioCodecs"/>
+ public RecorderAudioCodec AudioCodec
+ {
+ get => _audioCodec;
+ internal set
+ {
+ Debug.Assert(Enum.IsDefined(typeof(RecorderAudioCodec), value));
+
+ if (this is AudioRecorder || value != RecorderAudioCodec.None)
+ {
+ ValidateAudioCodec(value);
+ }
+
+ Native.SetAudioEncoder(Handle, value).ThrowIfError("Failed to set audio encoder.");
+
+ _audioCodec = value;
+ }
+ }
+
+ private RecorderFileFormat _fileFormat;
+
+ /// <summary>
+ /// Gets the file format of the recording result.
+ /// </summary>
+ /// <seealso cref="GetSupportedFileFormats"/>
+ public RecorderFileFormat FileFormat
+ {
+ get => _fileFormat;
+ internal set
+ {
+ Debug.Assert(Enum.IsDefined(typeof(RecorderFileFormat), value));
+
+ ValidateFileFormat(value);
+
+ Native.SetFileFormat(Handle, value).ThrowIfError("Failed to set file format.");
+
+ _fileFormat = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the number of audio channel.
+ /// </summary>
+ /// <remarks>
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <value>
+ /// For mono recording, set channel to 1.
+ /// For stereo recording, set channel to 2.
+ /// </value>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public int AudioChannels
+ {
+ get
+ {
+ Native.GetAudioChannel(Handle, out var val).ThrowIfError("Failed to get audio channel.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Audio channels can't be less than or equal to zero.");
+ }
+
+ Native.SetAudioChannel(Handle, value).ThrowIfError("Failed to set audio channel");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the audio device for recording.
+ /// </summary>
+ /// <remarks>
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <value>A <see cref="RecorderAudioDevice"/> that specifies the type of audio device.</value>
+ /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public RecorderAudioDevice AudioDevice
+ {
+ get
+ {
+ Native.GetAudioDevice(Handle, out var val).ThrowIfError("Failed to get the audio device.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ ValidationUtil.ValidateEnum(typeof(RecorderAudioDevice), value, nameof(value));
+
+ Native.SetAudioDevice(Handle, value).ThrowIfError("Failed to set the audio device.");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the sampling rate of an audio stream in hertz.
+ /// </summary>
+ /// <remarks>
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public int AudioSampleRate
+ {
+ get
+ {
+ Native.GetAudioSampleRate(Handle, out var val).
+ ThrowIfError("Failed to get audio sample rate.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Sample rate can't be less than or equal to zero.");
+ }
+
+ Native.SetAudioSampleRate(Handle, value).
+ ThrowIfError("Failed to set audio sample rate.");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the bitrate of an audio encoder in bits per second.
+ /// </summary>
+ /// <remarks>
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public int AudioBitRate
+ {
+ get
+ {
+ Native.GetAudioEncoderBitrate(Handle, out var val).ThrowIfError("Failed to get audio bitrate.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Bit rate can't be less than or equal to zero.");
+ }
+
+ Native.SetAudioEncoderBitrate(Handle, value).
+ ThrowIfError("Failed to set audio bitrate");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the maximum size of a recording file.
+ /// </summary>
+ /// <value>
+ /// The maximum size of a recording file in kilobytes, or 0 for unlimited size.
+ /// </value>
+ /// <remarks>
+ /// After reaching the limitation, the data which is being recorded will
+ /// be discarded and not written to the file.\n
+ /// \n
+ /// To set, the recorder must be in the<see cref="RecorderState.Idle"/> or <see cref= "RecorderState.Ready" /> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public int SizeLimit
+ {
+ get
+ {
+ int val = 0;
+
+ Native.GetSizeLimit(Handle, out val).
+ ThrowIfError("Failed to get size limit.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Size limit can't be less than zero.");
+ }
+
+ Native.SetSizeLimit(Handle, value).ThrowIfError("Failed to set size limit");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the time limit of recording.
+ /// </summary>
+ /// <value>
+ /// The time of recording in seconds, or 0 for unlimited time.
+ /// </value>
+ /// <remarks>
+ /// After reaching the limitation, the data which is being recorded will
+ /// be discarded and not written to the file.\n
+ /// \n
+ /// To set, the recorder must be in the<see cref="RecorderState.Idle"/> or <see cref= "RecorderState.Ready" /> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public int TimeLimit
+ {
+ get
+ {
+ Native.GetTimeLimit(Handle, out var val).
+ ThrowIfError("Failed to get time limit.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Time limit can't be less than zero.");
+ }
+
+ Native.SetTimeLimit(Handle, value).ThrowIfError("Failed to set time limit.");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the mute state of a recorder.
+ /// </summary>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public bool Muted
+ {
+ get => Native.GetMute(Handle);
+
+ set => Native.SetMute(Handle, value).ThrowIfError("Failed to set mute");
+ }
+ }
+}
\ No newline at end of file
using System;
using System.Diagnostics;
using System.Linq;
+using System.Threading;
using Native = Interop.Recorder;
+using NativeHandle = Interop.RecorderHandle;
namespace Tizen.Multimedia
{
- static internal class RecorderLog
- {
- internal const string Tag = "Tizen.Multimedia.Recorder";
- }
-
/// <summary>
- /// The recorder class provides methods to create audio/video recorder,
- /// to start, stop and save the recorded content. It also provides methods
- /// to get/set various attributes and capabilities of recorder.
+ /// Recorder is a base class for audio and video recorders that
+ /// provides the ability to control the recording of a multimedia content.\n
+ /// \n
+ /// Simple audio and audio/video are supported.
/// </summary>
- public class Recorder : IDisposable
+ public abstract partial class Recorder : IDisposable
{
- private IntPtr _handle = IntPtr.Zero;
- private bool _disposed = false;
- private RecorderState _state = RecorderState.None;
+ private readonly NativeHandle _handle;
+ private RecorderState _state;
+ private ThreadLocal<bool> _isInAudioStreamStoring = new ThreadLocal<bool>();
- /// <summary>
- /// Audio recorder constructor.
- /// </summary>
- public Recorder()
+ internal Recorder(NativeHandle handle)
{
- RecorderErrorFactory.ThrowIfError(Native.Create(out _handle),
- "Failed to create Audio recorder");
+ _handle = handle;
- Feature = new RecorderFeatures(this);
- Setting = new RecorderSettings(this);
-
- RegisterCallbacks();
+ try
+ {
+ RegisterEvents();
- SetState(RecorderState.Created);
+ SetState(State);
+ }
+ catch (Exception)
+ {
+ _handle.Dispose();
+ throw;
+ }
}
- /// <summary>
- /// Video recorder constructor.
- /// </summary>
- /// <param name="camera">
- /// The camera object.
- /// </param>
- public Recorder(Camera camera)
+ internal NativeHandle Handle
{
- RecorderErrorFactory.ThrowIfError(Native.CreateVideo(camera.Handle, out _handle),
- "Failed to create Video recorder.");
-
- Feature = new RecorderFeatures(this);
- Setting = new RecorderSettings(this);
-
- RegisterCallbacks();
+ get
+ {
+ if (_disposed)
+ {
+ throw new ObjectDisposedException(nameof(Recorder));
+ }
- SetState(RecorderState.Created);
+ return _handle;
+ }
}
+ #region Dispose support
+ private bool _disposed;
+
/// <summary>
- /// Recorder destructor.
+ /// Releases the unmanaged resources used by the Recorder.
/// </summary>
- ~Recorder()
- {
- Dispose (false);
- }
-
- internal IntPtr GetHandle()
+ public void Dispose()
{
- ValidateNotDisposed();
- return _handle;
+ Dispose(true);
}
- #region Dispose support
/// <summary>
- /// Releases the unmanaged resources used by the Recorder.
+ /// Releases the resources used by the Recorder.
/// </summary>
- /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
+ /// <param name="disposing">
+ /// true to release both managed and unmanaged resources; false to release only unmanaged resources.
+ /// </param>
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
- if (disposing)
- {
- // to be used if there are any other disposable objects
- }
- if (_handle != IntPtr.Zero)
+ if (_handle != null)
{
- Native.Destroy(_handle);
- _handle = IntPtr.Zero;
+ _handle.Dispose();
}
- _disposed = true;
- }
- }
-
- /// <summary>
- /// Releases all resources used by the Recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- internal void ValidateNotDisposed()
- {
- if (_disposed)
- {
- throw new ObjectDisposedException(nameof(Recorder));
+ _disposed = true;
}
}
#endregion Dispose support
- #region Check recorder state
+ #region State validation
internal void ValidateState(params RecorderState[] required)
{
- ValidateNotDisposed();
-
Debug.Assert(required.Length > 0);
var curState = _state;
if (!required.Contains(curState))
{
- throw new InvalidOperationException($"The recorder is not in a valid state. " +
+ throw new InvalidOperationException("The recorder is not in a valid state. " +
$"Current State : { curState }, Valid State : { string.Join(", ", required) }.");
}
}
- internal void SetState(RecorderState state)
+ private void SetState(RecorderState state)
{
_state = state;
}
- #endregion Check recorder state
-
- #region EventHandlers
- /// <summary>
- /// Event that occurs when an error occurs during recorder operation.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<RecordingErrorOccurredEventArgs> ErrorOccurred;
- private Native.RecorderErrorCallback _errorOccuredCallback;
-
- /// <summary>
- /// Event that occurs when recorder is interrupted.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<RecorderInterruptedEventArgs> Interrupted;
- private Native.InterruptedCallback _interruptedCallback;
-
- /// <summary>
- /// This event occurs when recorder state is changed.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<RecorderStateChangedEventArgs> StateChanged;
- private Native.StatechangedCallback _stateChangedCallback;
-
- /// <summary>
- /// Event that occurs when recording information changes.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<RecordingProgressEventArgs> RecordingProgress;
- private Native.RecordingProgressCallback _recordingProgressCallback;
-
- /// <summary>
- /// Event that occurs when audio stream data is being delivered.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<AudioStreamDeliveredEventArgs> AudioStreamDelivered;
- private Native.AudioStreamCallback _audioStreamCallback;
-
- /// <summary>
- /// Event that occurs when recording limit is reached.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<RecordingLimitReachedEventArgs> RecordingLimitReached;
- private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
-
- /// <summary>
- /// Event that occurs when muxed stream data is being delivered.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public event EventHandler<MuxedStreamDeliveredEventArgs> MuxedStreamDelivered;
- private Native.MuxedStreamCallback _muxedStreamCallback;
- #endregion EventHandlers
+ #endregion
#region Properties
- /// <summary>
- /// Gets the various recorder features.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderFeatures Feature { get; }
/// <summary>
- /// Get/Set the various recorder settings.
+ /// Gets the current state of the recorder.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderSettings Setting { get; }
-
- /// <summary>
- /// The current state of the recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
/// <value>A <see cref="RecorderState"/> that specifies the state of recorder.</value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
public RecorderState State
{
get
{
- ValidateNotDisposed();
-
- RecorderState val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetState(_handle, out val),
- "Failed to get recorder state.");
+ Native.GetState(Handle, out var val).ThrowIfError("Failed to get recorder state.");
return val;
}
#region Methods
/// <summary>
/// Prepare the media recorder for recording.
- /// The recorder must be in the <see cref="RecorderState.Created"/> state.
- /// After this method is finished without any exception,
- /// The state of recorder will be changed to <see cref="RecorderState.Ready"/> state.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
/// <remarks>
- /// Before calling the function, it is required to set AudioEncoder,
- /// videoencoder and fileformat properties of recorder.
+ /// The recorder should be in the <see cref="RecorderState.Idle"/> state.\n
+ /// The state of the recorder will be the <see cref="RecorderState.Ready"/> after this.\n
+ /// It has no effect if the current state is the <see cref="RecorderState.Ready"/>.
/// </remarks>
- /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
public void Prepare()
{
- ValidateState(RecorderState.Created);
+ if (_state == RecorderState.Ready)
+ {
+ return;
+ }
+
+ ValidateState(RecorderState.Idle);
- RecorderErrorFactory.ThrowIfError(Native.Prepare(_handle),
- "Failed to prepare media recorder for recording");
+ Native.Prepare(Handle).ThrowIfError("Failed to prepare media recorder");
SetState(RecorderState.Ready);
}
+ private void ThrowIfAccessedInAudioStreamStoring()
+ {
+ if (_isInAudioStreamStoring.Value)
+ {
+ throw new InvalidOperationException("The method can't be called in the AudioStreamStoring event");
+ }
+ }
+
/// <summary>
/// Resets the media recorder.
- /// The recorder must be in the <see cref="RecorderState.Ready"/> state.
- /// After this method is finished without any exception,
- /// The state of recorder will be changed to <see cref="RecorderState.Created"/> state.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+ /// <remarks>
+ /// The recorder should be in the <see cref="RecorderState.Ready"/> state.
+ /// The state of recorder will be <see cref="RecorderState.Idle"/> after this.
+ /// It has no effect if the current state is the <see cref="RecorderState.Idle"/>.
+ /// </remarks>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
public void Unprepare()
{
+ ThrowIfAccessedInAudioStreamStoring();
+
+ if (_state == RecorderState.Idle)
+ {
+ return;
+ }
+
ValidateState(RecorderState.Ready);
- RecorderErrorFactory.ThrowIfError(Native.Unprepare(_handle),
- "Failed to reset the media recorder");
+ Native.Unprepare(Handle).ThrowIfError("Failed to reset the media recorder");
- SetState(RecorderState.Created);
+ SetState(RecorderState.Idle);
}
/// <summary>
/// Starts the recording.
+ /// </summary>
+ /// <remarks>
/// The recorder must be in the <see cref="RecorderState.Ready"/> state.
- /// After this method is finished without any exception,
- /// The state of recorder will be changed to <see cref="RecorderState.Recording"/> state.
+ /// The state of recorder will be <see cref="RecorderState.Recording"/> after this. \n
+ /// \n
+ /// If the specified path exists, the file is removed automatically and updated by new one.\n
+ /// The mediastorage privilege(http://tizen.org/privilege/mediastorage) is required if the path is relevant to media storage.\n
+ /// The externalstorage privilege(http://tizen.org/privilege/externalstorage) is required if the path is relevant to external storage.\n
+ /// \n
+ /// In the video recorder, some preview format does not support record mode.
+ /// You should use default preview format or <see cref="CameraPixelFormat.Nv12"/> in the record mode.
+ /// </remarks>
+ /// <param name="savePath">The file path for recording result.</param>
+ /// <privilege>http://tizen.org/privilege/recorder</privilege>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// The preview format of the camera is not supported.
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ /// <exception cref="ArgumentNullException"><paramref name="savePath"/> is null.</exception>
+ /// <exception cref="ArgumentException"><paramref name="savePath"/> is a zero-length string, contains only white space.</exception>
+ /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege.</exception>
+ /// <seealso cref="Commit"/>
+ /// <seealso cref="Cancel"/>
+ public void Start(string savePath)
+ {
+ ValidateState(RecorderState.Ready);
+
+ if (savePath == null)
+ {
+ throw new ArgumentNullException(nameof(savePath));
+ }
+
+ if (string.IsNullOrWhiteSpace(savePath))
+ {
+ throw new ArgumentException($"{nameof(savePath)} is an empty string.", nameof(savePath));
+ }
+
+ Native.SetFileName(Handle, savePath).ThrowIfError("Failed to set save path.");
+
+ Native.Start(Handle).ThrowIfError("Failed to start the media recorder");
+
+ SetState(RecorderState.Recording);
+ }
+
+ /// <summary>
+ /// Resumes the recording.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
/// <remarks>
- /// If file path has been set to an existing file, this file is removed automatically and updated by new one.
- /// In the video recorder, some preview format does not support record mode. It will return InvalidOperation error.
- /// You should use default preview format or CameraPixelFormatNv12 in the record mode.
- /// The filename should be set before this function is invoked.
+ /// The recorder should be in the <see cref="RecorderState.Paused"/> state.
+ /// The state of recorder will be <see cref="RecorderState.Recording"/> after this.
+ /// It has no effect if the current state is the <see cref="RecorderState.Recording"/>.
/// </remarks>
- /// <privilege>
- /// http://tizen.org/privilege/recorder
- /// </privilege>
- /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
- public void Start()
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public void Resume()
{
- ValidateState(RecorderState.Ready, RecorderState.Paused);
+ if (_state == RecorderState.Recording)
+ {
+ return;
+ }
+
+ ValidateState(RecorderState.Paused);
- RecorderErrorFactory.ThrowIfError(Native.Start(_handle),
- "Failed to start the media recorder");
+ Native.Start(Handle).ThrowIfError("Failed to resume the media recorder");
SetState(RecorderState.Recording);
}
/// <summary>
/// Pause the recording.
- /// The recorder must be in the <see cref="RecorderState.Recording"/> state.
- /// After this method is finished without any exception,
- /// The state of recorder will be changed to <see cref="RecorderState.Paused"/> state.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
/// <remarks>
- /// Recording can be resumed with Start().
+ /// The recorder should be in the <see cref="RecorderState.Recording"/> state.
+ /// The state of recorder will be <see cref="RecorderState.Paused"/> after this.
+ /// It has no effect if the current state is the <see cref="RecorderState.Paused"/>.
/// </remarks>
- /// <privilege>
- /// http://tizen.org/privilege/recorder
- /// </privilege>
- /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
public void Pause()
{
+ if (_state == RecorderState.Paused)
+ {
+ return;
+ }
+
ValidateState(RecorderState.Recording);
- RecorderErrorFactory.ThrowIfError(Native.Pause(_handle),
- "Failed to pause the media recorder");
+ Native.Pause(Handle).ThrowIfError("Failed to pause the media recorder");
SetState(RecorderState.Paused);
}
/// <summary>
/// Stops recording and saves the result.
- /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
- /// After this method is finished without any exception,
- /// The state of recorder will be changed to <see cref="RecorderState.Ready"/> state.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <privilege>
- /// http://tizen.org/privilege/recorder
- /// </privilege>
- /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
+ /// <remarks>
+ /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
+ /// The state of recorder will be <see cref="RecorderState.Ready"/> after the operation.
+ /// </remarks>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// The method is called in <see cref="AudioStreamStoring"/> event.
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
public void Commit()
{
+ ThrowIfAccessedInAudioStreamStoring();
+
ValidateState(RecorderState.Recording, RecorderState.Paused);
- RecorderErrorFactory.ThrowIfError(Native.Commit(_handle),
- "Failed to save the recorded content");
+ Native.Commit(Handle).ThrowIfError("Failed to save the recorded content");
SetState(RecorderState.Ready);
}
/// <summary>
- /// Cancels the recording.
+ /// Cancels the recording.\n
/// The recording data is discarded and not written in the recording file.
- /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
- /// After this method is finished without any exception,
- /// The state of recorder will be changed to <see cref="RecorderState.Ready"/> state.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <privilege>
- /// http://tizen.org/privilege/recorder
- /// </privilege>
- /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
+ /// <remarks>
+ /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
+ /// The state of recorder will be <see cref="RecorderState.Ready"/> after the operation.
+ /// </remarks>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// The method is called in <see cref="AudioStreamStoring"/> event.
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
public void Cancel()
{
+ ThrowIfAccessedInAudioStreamStoring();
+
ValidateState(RecorderState.Recording, RecorderState.Paused);
- RecorderErrorFactory.ThrowIfError(Native.Cancel(_handle),
- "Failed to cancel the recording");
+ Native.Cancel(Handle).ThrowIfError("Failed to cancel the recording");
SetState(RecorderState.Ready);
}
/// <summary>
- /// Sets the audio stream policy.
+ /// Apply the audio stream policy.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <param name="policy">Policy.</param>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public void SetAudioStreamPolicy(AudioStreamPolicy policy)
+ /// <remarks>
+ /// The recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <param name="policy">The policy to apply.</param>
+ /// <exception cref="ArgumentNullException"><paramref name="policy"/> is null.</exception>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// <paramref name="policy"/> is not supported for the recorder.
+ /// -or-\n
+ /// An internal error occurred.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">
+ /// The recorder already has been disposed of.\n
+ /// -or-\n
+ /// <paramref name="policy"/> already has been disposed of.
+ /// </exception>
+ public void ApplyAudioStreamPolicy(AudioStreamPolicy policy)
{
- ValidateNotDisposed();
-
- RecorderErrorFactory.ThrowIfError(Native.SetAudioStreamPolicy(_handle, policy.Handle),
- "Failed to set audio stream policy");
- }
- #endregion Methods
+ if (policy == null)
+ {
+ throw new ArgumentNullException(nameof(policy));
+ }
- #region Callback registrations
- private void RegisterCallbacks()
- {
- RegisterErrorCallback();
- RegisterInterruptedCallback();
- RegisterStateChangedCallback();
- RegisterRecordingProgressCallback();
- RegisterAudioStreamDeliveredCallback();
- RegisterRecordingLimitReachedEvent();
- RegisterMuxedStreamEvent();
- }
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
- private void RegisterErrorCallback()
- {
- _errorOccuredCallback = (RecorderErrorCode error, RecorderState current, IntPtr userData) =>
- {
- ErrorOccurred?.Invoke(this, new RecordingErrorOccurredEventArgs(error, current));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetErrorCallback(_handle, _errorOccuredCallback, IntPtr.Zero),
- "Setting Error callback failed");
+ Native.SetAudioStreamPolicy(Handle, policy.Handle).ThrowIfError("Failed to apply the audio stream policy.");
}
- private void RegisterInterruptedCallback()
+ /// <summary>
+ /// Returns the peak audio input level in dB since the last call to this method.
+ /// </summary>
+ /// <remarks>
+ /// 0dB indicates maximum input level, -300dB indicates minimum input level.\n
+ /// \n
+ /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
+ /// </remarks>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public double GetPeakAudioLevel()
{
- _interruptedCallback = (RecorderPolicy policy, RecorderState previous, RecorderState current, IntPtr userData) =>
- {
- Interrupted?.Invoke(this, new RecorderInterruptedEventArgs(policy, previous, current));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetInterruptedCallback(_handle, _interruptedCallback, IntPtr.Zero),
- "Setting Interrupted callback failed");
- }
+ ValidateState(RecorderState.Recording, RecorderState.Paused);
- private void RegisterStateChangedCallback()
- {
- _stateChangedCallback = (RecorderState previous, RecorderState current, bool byPolicy, IntPtr userData) =>
- {
- SetState(current);
- Log.Info(RecorderLog.Tag, "Recorder state changed " + previous.ToString() + " -> " + current.ToString());
- StateChanged?.Invoke(this, new RecorderStateChangedEventArgs(previous, current, byPolicy));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetStateChangedCallback(_handle, _stateChangedCallback, IntPtr.Zero),
- "Setting state changed callback failed");
- }
+ Native.GetAudioLevel(Handle, out var level).ThrowIfError("Failed to get audio level.");
- private void RegisterRecordingProgressCallback()
- {
- _recordingProgressCallback = (ulong elapsedTime, ulong fileSize, IntPtr userData) =>
- {
- RecordingProgress?.Invoke(this, new RecordingProgressEventArgs(elapsedTime, fileSize));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetRecordingProgressCallback(_handle, _recordingProgressCallback, IntPtr.Zero),
- "Setting status changed callback failed");
+ return level;
}
- private void RegisterAudioStreamDeliveredCallback()
+ /// <summary>
+ /// Returns the state of recorder device.
+ /// </summary>
+ /// <exception cref="ArgumentException"><paramref name="type"/> is invalid.</exception>
+ public static RecorderDeviceState GetDeviceState(RecorderType type)
{
- _audioStreamCallback = (IntPtr stream, int streamSize, AudioSampleType type, int channel, uint recordingTime, IntPtr userData) =>
- {
- AudioStreamDelivered?.Invoke(this, new AudioStreamDeliveredEventArgs(stream, streamSize, type, channel, recordingTime));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetAudioStreamCallback(_handle, _audioStreamCallback, IntPtr.Zero),
- "Setting audiostream callback failed");
- }
+ ValidationUtil.ValidateEnum(typeof(RecorderType), type, nameof(type));
- private void RegisterRecordingLimitReachedEvent()
- {
- _recordingLimitReachedCallback = (RecordingLimitType type, IntPtr userData) =>
- {
- RecordingLimitReached?.Invoke(this, new RecordingLimitReachedEventArgs(type));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetLimitReachedCallback(_handle, _recordingLimitReachedCallback, IntPtr.Zero),
- "Setting limit reached callback failed");
- }
+ Native.GetDeviceState(type, out var state).ThrowIfError("Failed to get device state");
- private void RegisterMuxedStreamEvent()
- {
- _muxedStreamCallback = (IntPtr stream, int streamSize, ulong offset, IntPtr userData) =>
- {
- MuxedStreamDelivered?.Invoke(this, new MuxedStreamDeliveredEventArgs(stream, streamSize, offset));
- };
- RecorderErrorFactory.ThrowIfError(Native.SetMuxedStreamCallback(_handle, _muxedStreamCallback, IntPtr.Zero),
- "Setting muxed stream callback failed");
+ return state;
}
- #endregion Callback registrations
+ #endregion
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// The exception that is thrown when a recorder device-related error occurs.
+ /// </summary>
+ public class RecorderDeviceException : Exception
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RecorderDeviceException"/> class.
+ /// </summary>
+ public RecorderDeviceException() : base()
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RecorderDeviceException"/> class with a specified error message.
+ /// </summary>
+ public RecorderDeviceException(string message) : base(message)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RecorderDeviceException"/> class with
+ /// a specified error message and inner exception.
+ /// </summary>
+ public RecorderDeviceException(string message, Exception innerException) : base(message, innerException)
+ {
+ }
+ }
+}
\ No newline at end of file
namespace Tizen.Multimedia
{
/// <summary>
- /// An extened EventArgs class which contain the details of current recording status.
+ /// Provides data for the <see cref="Recorder.DeviceStateChanged"/> event.
/// </summary>
- public class RecordingProgressEventArgs : EventArgs
+ public class RecorderDeviceStateChangedEventArgs : EventArgs
{
- public RecordingProgressEventArgs(ulong elapsedTime, ulong fileSize)
+ internal RecorderDeviceStateChangedEventArgs(RecorderType type, RecorderDeviceState state)
{
- ElapsedTime = elapsedTime;
- FileSize = fileSize;
+ Type = type;
+ DeviceState = state;
}
/// <summary>
- /// The time of recording in milliseconds.
+ /// Gets the recorder type.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public ulong ElapsedTime { get; }
+ public RecorderType Type { get; }
/// <summary>
- /// The size of the recording file in Kilobyte.
+ /// Gets the device state.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public ulong FileSize { get; }
+ public RecorderDeviceState DeviceState { get; }
}
}
* limitations under the License.
*/
-using System;
-
namespace Tizen.Multimedia
{
/// <summary>
- /// Enumeration for Audio Codec.
+ /// Specifies audio codecs for <see cref="Recorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
+ /// <seealso cref="Recorder.GetSupportedAudioCodecs"/>
public enum RecorderAudioCodec
{
/// <summary>
- /// Disable Audio track.
+ /// Disabled.
/// </summary>
- Disable = -1,
+ None = -1,
/// <summary>
/// AMR codec.
/// </summary>
- Amr = 0,
+ Amr,
/// <summary>
/// AAC codec.
/// </summary>
}
/// <summary>
- /// Enumeration for Audio capture devices.
+ /// Specifies audio capture devices for <see cref="Recorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
public enum RecorderAudioDevice
{
/// <summary>
}
/// <summary>
- /// Enumeration for the file container format.
+ /// Specifies container formats for <see cref="Recorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
public enum RecorderFileFormat
{
/// <summary>
}
/// <summary>
- /// Enumeration for the recorder policy.
+ /// Specifies recorder policies.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
+ /// <seealso cref="Recorder.StateChanged"/>
+ /// <seealso cref="Recorder.Interrupting"/>
+ /// <seealso cref="Recorder.Interrupted"/>
public enum RecorderPolicy
{
/// <summary>
- /// None.
- /// </summary>
- None = 0,
- /// <summary>
/// Security policy.
/// </summary>
Security = 4,
/// <summary>
/// Resource conflict policy.
/// </summary>
- ResourceConflict = 5
+ ResourceConflict
}
/// <summary>
- /// Enumeration for the recording limit.
+ /// Specifies types of the recording limit for <see cref="Recorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
+ /// <seealso cref="Recorder.SizeLimit"/>
+ /// <seealso cref="Recorder.TimeLimit"/>
+ /// <seealso cref="Recorder.RecordingLimitReached"/>
public enum RecordingLimitType
{
/// <summary>
}
/// <summary>
- /// Enumeration for recorder states.
+ /// Specifies states for <see cref="Recorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
public enum RecorderState
{
/// <summary>
- /// Recorder is not created.
- /// </summary>
- None,
- /// <summary>
/// Recorder is created, but not prepared.
/// </summary>
- Created,
+ Idle = 1,
/// <summary>
/// Recorder is ready to record. In case of video recorder,
/// preview display will be shown.
}
/// <summary>
- /// Enumeration for video codec.
+ /// Specifies video codecs for <see cref="VideoRecorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
+ /// <seealso cref="VideoRecorder.GetSupportedVideoCodecs"/>
public enum RecorderVideoCodec
{
/// <summary>
}
/// <summary>
- /// Enumeration for recorder failure error.
+ /// Specifies errors for <see cref="Recorder"/>.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public enum RecorderErrorCode
+ /// <seealso cref="Recorder.ErrorOccurred"/>
+ public enum RecorderError
{
/// <summary>
+ /// ESD situation.
+ /// </summary>
+ Esd = RecorderErrorCode.Esd,
+
+ /// <summary>
/// Device Error.
/// </summary>
- DeviceError = RecorderError.DeviceError,
+ DeviceError = RecorderErrorCode.DeviceError,
+
/// <summary>
/// Internal error.
/// </summary>
- InvalidOperation = RecorderError.InvalidOperation,
+ InternalError = RecorderErrorCode.InvalidOperation,
+
/// <summary>
/// Out of memory.
/// </summary>
- OutOfMemory = RecorderError.OutOfMemory
+ OutOfMemory = RecorderErrorCode.OutOfMemory,
+
+ /// <summary>
+ /// Out of storage or the storage has been removed while recording.
+ /// </summary>
+ OutOfStorage = RecorderErrorCode.OutOfStorage
+ }
+
+ /// <summary>
+ /// Specifies recorder types for <see cref="Recorder.DeviceStateChanged"/>.
+ /// </summary>
+ public enum RecorderType
+ {
+ /// <summary>
+ /// Audio recorder.
+ /// </summary>
+ Audio,
+
+ /// <summary>
+ /// Video recorder.
+ /// </summary>
+ Video
+ }
+
+ /// <summary>
+ /// Specifies recorder device states for <see cref="Recorder.DeviceStateChanged"/>.
+ /// </summary>
+ public enum RecorderDeviceState
+ {
+ /// <summary>
+ /// No recording in progress.
+ /// </summary>
+ Idle,
+
+ /// <summary>
+ /// Recording in progress.
+ /// </summary>
+ Recording,
+
+ /// <summary>
+ /// All recordings are paused.
+ /// </summary>
+ Paused
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using Tizen.Internals.Errors;
+
+namespace Tizen.Multimedia
+{
+ internal enum RecorderErrorCode
+ {
+ TizenErrorRecorder = -0x01950000,
+ RecorderErrorClass = TizenErrorRecorder | 0x10,
+ None = ErrorCode.None,
+ InvalidParameter = ErrorCode.InvalidParameter,
+ InvalidState = RecorderErrorClass | 0x02,
+ OutOfMemory = ErrorCode.OutOfMemory,
+ DeviceError = RecorderErrorClass | 0x04,
+ InvalidOperation = ErrorCode.InvalidOperation,
+ SecurityRestricted = RecorderErrorClass | 0x07,
+ Esd = RecorderErrorClass | 0x0a,
+ OutOfStorage = RecorderErrorClass | 0x0b,
+ PermissionDenied = ErrorCode.PermissionDenied,
+ NotSupported = ErrorCode.NotSupported,
+ ResourceConflict = RecorderErrorClass | 0x0c,
+ ServiceDisconnected = RecorderErrorClass | 0x0d
+ }
+
+ internal static class RecorderErrorCodeExtensions
+ {
+ internal static RecorderErrorCode Ignore(this RecorderErrorCode errorCode, RecorderErrorCode ignore)
+ {
+ return (ignore == errorCode) ? RecorderErrorCode.None : errorCode;
+ }
+
+ internal static void ThrowIfError(this RecorderErrorCode errorCode, string errorMessage)
+ {
+ if (errorCode == RecorderErrorCode.None)
+ {
+ return;
+ }
+
+ switch (errorCode)
+ {
+ case RecorderErrorCode.InvalidParameter:
+ throw new ArgumentException(errorMessage);
+
+ case RecorderErrorCode.OutOfMemory:
+ throw new OutOfMemoryException($"{errorMessage}.");
+
+ case RecorderErrorCode.DeviceError:
+ case RecorderErrorCode.Esd:
+ throw new RecorderDeviceException($"{errorMessage}; {errorCode.ToString()}.");
+
+ case RecorderErrorCode.SecurityRestricted:
+ throw new UnauthorizedAccessException($"The feature is currently disabled by the device policy; {errorCode.ToString()}.");
+
+ case RecorderErrorCode.PermissionDenied:
+ throw new UnauthorizedAccessException($"{errorMessage}; {errorCode.ToString()}.");
+
+ case RecorderErrorCode.NotSupported:
+ throw new NotSupportedException($"{errorMessage}.");
+
+ case RecorderErrorCode.InvalidState:
+ case RecorderErrorCode.InvalidOperation:
+ case RecorderErrorCode.ResourceConflict:
+ case RecorderErrorCode.ServiceDisconnected:
+ throw new InvalidOperationException($"{errorMessage}; {errorCode.ToString()}.");
+
+ case RecorderErrorCode.OutOfStorage:
+ throw new IOException($"{errorMessage}; Not enough disk space or specified path is not available to .");
+
+ default:
+ throw new Exception($"Unknown error : {errorCode.ToString()}.");
+ }
+ }
+ }
+}
+++ /dev/null
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Runtime.CompilerServices;
-using Tizen.Internals.Errors;
-
-namespace Tizen.Multimedia
-{
- internal enum RecorderError
- {
- TizenErrorRecorder = -0x01950000,
- RecorderErrorClass = TizenErrorRecorder | 0x10,
- None = ErrorCode.None,
- InvalidParameter = ErrorCode.InvalidParameter,
- InvalidState = RecorderErrorClass | 0x02,
- OutOfMemory = ErrorCode.OutOfMemory,
- DeviceError = RecorderErrorClass | 0x04,
- InvalidOperation = ErrorCode.InvalidOperation,
- SecurityRestricted = RecorderErrorClass | 0x07,
- Esd = RecorderErrorClass | 0x0a,
- OutOfStorage = RecorderErrorClass | 0x0b,
- PermissionDenied = ErrorCode.PermissionDenied,
- NotSupported = ErrorCode.NotSupported,
- ResourceConflict = RecorderErrorClass | 0x0c,
- ServiceDisconnected = RecorderErrorClass | 0x0d
- }
-
- internal static class RecorderErrorFactory
- {
- internal static void ThrowIfError(RecorderError errorCode, string errorMessage = null,
- [CallerMemberName] string caller = null, [CallerLineNumber] int line = 0)
- {
- if (errorCode == RecorderError.None)
- {
- return;
- }
-
- Log.Info(RecorderLog.Tag, "errorCode : " + errorCode.ToString() + ", Caller : " + caller + ", line " + line.ToString());
-
- switch (errorCode)
- {
- case RecorderError.InvalidParameter:
- throw new ArgumentException(errorMessage);
-
- case RecorderError.OutOfMemory:
- throw new OutOfMemoryException(errorMessage);
-
- case RecorderError.DeviceError:
- case RecorderError.Esd:
- case RecorderError.SecurityRestricted:
- case RecorderError.PermissionDenied:
- throw new UnauthorizedAccessException(errorMessage);
-
- case RecorderError.NotSupported:
- throw new NotSupportedException(errorMessage);
-
- case RecorderError.InvalidState:
- case RecorderError.InvalidOperation:
- case RecorderError.ResourceConflict:
- case RecorderError.ServiceDisconnected:
- case RecorderError.OutOfStorage: //TODO need to alloc new proper exception class
- throw new InvalidOperationException(errorMessage);
-
- default:
- throw new Exception("Unknown error : " + errorCode.ToString());
- }
- }
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Provides extension methods for <see cref="Recorder"/>.
+ /// </summary>
+ public static class RecorderExtensions
+ {
+ /// <summary>
+ /// Returns supported file formats for a <see cref="RecorderVideoCodec"/>.
+ /// </summary>
+ /// <returns>An IEnumerable of <see cref="RecorderFileFormat"/> representing the supported file formats.</returns>
+ /// <param name="videoCodec">The <see cref="RecorderVideoCodec"/>.</param>
+ /// <exception cref="ArgumentException"><paramref name="videoCodec"/> is invalid.</exception>
+ public static IEnumerable<RecorderFileFormat> GetSupportedFileFormats(this RecorderVideoCodec videoCodec)
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderVideoCodec), videoCodec, nameof(videoCodec));
+
+ switch (videoCodec)
+ {
+ case RecorderVideoCodec.H263:
+ yield return RecorderFileFormat.ThreeGp;
+ break;
+
+ case RecorderVideoCodec.H264:
+ case RecorderVideoCodec.Mpeg4:
+ yield return RecorderFileFormat.ThreeGp;
+ yield return RecorderFileFormat.Mp4;
+ yield return RecorderFileFormat.M2ts;
+ break;
+
+ case RecorderVideoCodec.Theora:
+ yield return RecorderFileFormat.Ogg;
+ break;
+ }
+ }
+
+ /// <summary>
+ /// Returns supported file formats for a <see cref="RecorderAudioCodec"/>.
+ /// </summary>
+ /// <returns>An IEnumerable of <see cref="RecorderFileFormat"/> representing the supported file formats.</returns>
+ /// <param name="audioCodec">The <see cref="RecorderAudioCodec"/>.</param>
+ /// <exception cref="ArgumentException"><paramref name="audioCodec"/> is invalid.</exception>
+ public static IEnumerable<RecorderFileFormat> GetSupportedFileFormats(this RecorderAudioCodec audioCodec)
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderAudioCodec), audioCodec, nameof(audioCodec));
+
+ switch (audioCodec)
+ {
+ case RecorderAudioCodec.Amr:
+ yield return RecorderFileFormat.ThreeGp;
+ yield return RecorderFileFormat.Amr;
+ break;
+
+ case RecorderAudioCodec.Mp3:
+ yield return RecorderFileFormat.Mp4;
+ yield return RecorderFileFormat.M2ts;
+ break;
+
+ case RecorderAudioCodec.Aac:
+ yield return RecorderFileFormat.ThreeGp;
+ yield return RecorderFileFormat.Mp4;
+ yield return RecorderFileFormat.M2ts;
+ yield return RecorderFileFormat.Adts;
+ break;
+
+ case RecorderAudioCodec.Vorbis:
+ yield return RecorderFileFormat.Ogg;
+ break;
+
+ case RecorderAudioCodec.Pcm:
+ yield return RecorderFileFormat.Wav;
+ break;
+ }
+ }
+
+ internal static void ThrowIfFormatNotSupported(this RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat)
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderFileFormat), fileFormat, nameof(fileFormat));
+
+ if (audioCodec.GetSupportedFileFormats().Contains(fileFormat) == false)
+ {
+ throw new NotSupportedException($"{audioCodec} does not support {fileFormat}.");
+ }
+ }
+
+ internal static void ThrowIfFormatNotSupported(this RecorderVideoCodec videoCodec, RecorderFileFormat fileFormat)
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderFileFormat), fileFormat, nameof(fileFormat));
+
+ if (videoCodec.GetSupportedFileFormats().Contains(fileFormat) == false)
+ {
+ throw new NotSupportedException($"{videoCodec} does not support {fileFormat}.");
+ }
+ }
+ }
+}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Native = Interop.RecorderFeatures;
-
-namespace Tizen.Multimedia
-{
- /// <summary>
- /// The camera setting class provides methods/properties to get and
- /// set basic camera attributes.
- /// </summary>
- public class RecorderFeatures
- {
- internal readonly Recorder _recorder = null;
-
- private List<RecorderFileFormat> _fileFormats;
- private List<RecorderAudioCodec> _audioCodec;
- private List<RecorderVideoCodec> _videoCodec;
- private List<Size> _videoResolution;
-
- internal RecorderFeatures(Recorder recorder)
- {
- _recorder = recorder;
- }
-
- /// <summary>
- /// Retrieves all the file formats supported by the recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <returns>
- /// It returns a list containing all the supported <see cref="RecorderFileFormat"/>.
- /// </returns>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public IEnumerable<RecorderFileFormat> SupportedFileFormats
- {
- get
- {
- if (_fileFormats == null)
- {
- try
- {
- _fileFormats = new List<RecorderFileFormat>();
-
- Native.FileFormatCallback callback = (RecorderFileFormat format, IntPtr userData) =>
- {
- _fileFormats.Add(format);
- return true;
- };
- RecorderErrorFactory.ThrowIfError(Native.FileFormats(_recorder.GetHandle(), callback, IntPtr.Zero),
- "Failed to get the supported fileformats");
- }
- catch
- {
- _fileFormats = null;
- throw;
- }
- }
-
- return _fileFormats;
- }
- }
-
- /// <summary>
- /// Retrieves all the audio encoders supported by the recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <returns>
- /// It returns a list containing all the supported <see cref="RecorderAudioCodec"/>.
- /// </returns>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public IEnumerable<RecorderAudioCodec> SupportedAudioEncodings
- {
- get
- {
- if (_audioCodec == null)
- {
- try
- {
- _audioCodec = new List<RecorderAudioCodec>();
-
- Native.AudioEncoderCallback callback = (RecorderAudioCodec codec, IntPtr userData) =>
- {
- _audioCodec.Add(codec);
- return true;
- };
- RecorderErrorFactory.ThrowIfError(Native.AudioEncoders(_recorder.GetHandle(), callback, IntPtr.Zero),
- "Failed to get the supported audio encoders");
- }
- catch
- {
- _audioCodec = null;
- throw;
- }
- }
-
- return _audioCodec;
- }
- }
-
- /// <summary>
- /// Retrieves all the video encoders supported by the recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <returns>
- /// It returns a list containing all the supported <see cref="RecorderVideoCodec"/>.
- /// by recorder.
- /// </returns>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public IEnumerable<RecorderVideoCodec> SupportedVideoEncodings
- {
- get
- {
- if (_videoCodec == null)
- {
- try
- {
- _videoCodec = new List<RecorderVideoCodec>();
-
- Native.VideoEncoderCallback callback = (RecorderVideoCodec codec, IntPtr userData) =>
- {
- _videoCodec.Add(codec);
- return true;
- };
- RecorderErrorFactory.ThrowIfError(Native.VideoEncoders(_recorder.GetHandle(), callback, IntPtr.Zero),
- "Failed to get the supported video encoders");
- }
- catch
- {
- _videoCodec = null;
- throw;
- }
- }
-
- return _videoCodec;
- }
- }
-
- /// <summary>
- /// Retrieves all the video resolutions supported by the recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <returns>
- /// It returns videoresolution list containing the width and height of
- /// different resolutions supported by recorder.
- /// </returns>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public IEnumerable<Size> SupportedVideoResolutions
- {
- get
- {
- if (_videoResolution == null)
- {
- try
- {
- _videoResolution = new List<Size>();
-
- Native.VideoResolutionCallback callback = (int width, int height, IntPtr userData) =>
- {
- _videoResolution.Add(new Size(width, height));
- return true;
- };
- RecorderErrorFactory.ThrowIfError(Native.VideoResolution(_recorder.GetHandle(), callback, IntPtr.Zero),
- "Failed to get the supported video resolutions.");
- }
- catch
- {
- _videoResolution = null;
- throw;
- }
- }
-
- return _videoResolution;
- }
- }
- }
-}
\ No newline at end of file
*/
using System;
-using System.Collections.Generic;
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended Eventargs class which contains interrupted policy details, previous and current
- /// state of the recorder.
+ /// Provides data for the <see cref="Recorder.Interrupted"/> event.
/// </summary>
public class RecorderInterruptedEventArgs : EventArgs
{
internal RecorderInterruptedEventArgs(RecorderPolicy policy, RecorderState previous, RecorderState current)
{
- Policy = policy;
+ Reason = policy;
Previous = previous;
Current = current;
}
/// <summary>
- /// The policy that interrupted the recorder.
+ /// Gets the policy that interrupted the recorder.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderPolicy Policy { get; }
+ public RecorderPolicy Reason { get; }
/// <summary>
- /// The previous state of the recorder.
+ /// Gets the previous state of the recorder.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
public RecorderState Previous { get; }
/// <summary>
- /// The current state of the recorder.
+ /// Gets the current state of the recorder.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
public RecorderState Current { get; }
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Provides data for the <see cref="Recorder.Interrupting"/> event.
+ /// </summary>
+ public class RecorderInterruptingEventArgs : EventArgs
+ {
+ internal RecorderInterruptingEventArgs(RecorderPolicy policy, RecorderState state)
+ {
+ Reason = policy;
+ State = state;
+ }
+
+ /// <summary>
+ /// Gets the reason of the interrupt.
+ /// </summary>
+ public RecorderPolicy Reason { get; }
+
+ /// <summary>
+ /// Gets the previous state of the recorder.
+ /// </summary>
+ public RecorderState State { get; }
+ }
+}
+++ /dev/null
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using Tizen.Internals.Errors;
-using Native = Interop.RecorderSettings;
-
-namespace Tizen.Multimedia
-{
- /// <summary>
- /// The camera setting class provides methods/properties to get and
- /// set basic camera attributes.
- /// </summary>
- public class RecorderSettings
- {
- internal readonly Recorder _recorder = null;
-
- internal RecorderSettings(Recorder recorder)
- {
- _recorder = recorder;
- }
-
- /// <summary>
- /// The number of audio channel.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <value>
- /// For mono recording, set channel to 1.
- /// For stereo recording, set channel to 2.
- /// </value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public int AudioChannel
- {
- get
- {
- int val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetAudioChannel(_recorder.GetHandle(), out val),
- "Failed to get audio channel.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetAudioChannel(_recorder.GetHandle(), value),
- "Failed to set audio channel");
- }
- }
-
- /// <summary>
- /// The audio device for recording.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <value>A <see cref="RecorderAudioDevice"/> that specifies the type of audio device.</value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public RecorderAudioDevice AudioDevice
- {
- get
- {
- RecorderAudioDevice val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetAudioDevice(_recorder.GetHandle(), out val),
- "Failed to get audio device.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetAudioDevice(_recorder.GetHandle(), value),
- "Failed to set audio device.");
- }
- }
-
- /// <summary>
- /// Get the peak audio input level in dB
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <remarks>
- /// 0dB indicates maximum input level, -300dB indicates minimum input level.
- /// </remarks>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public double AudioLevel
- {
- get
- {
- double level = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetAudioLevel(_recorder.GetHandle(), out level),
- "Failed to get Audio level.");
-
- return level;
- }
- }
-
- /// <summary>
- /// The sampling rate of an audio stream in hertz.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public int AudioSampleRate
- {
- get
- {
- int val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetAudioSampleRate(_recorder.GetHandle(), out val),
- "Failed to get audio sample rate.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetAudioSampleRate(_recorder.GetHandle(), value),
- "Failed to set audio sample rate.");
- }
- }
-
- /// <summary>
- /// The bitrate of an audio encoder in bits per second.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public int AudioBitRate
- {
- get
- {
- int val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetAudioEncoderBitrate(_recorder.GetHandle(), out val),
- "Failed to get audio bitrate.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetAudioEncoderBitrate(_recorder.GetHandle(), value),
- "Failed to set audio bitrate");
- }
- }
-
- /// <summary>
- /// The bitrate of an video encoder in bits per second.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public int VideoBitRate
- {
- get
- {
- int val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetVideoEncoderBitrate(_recorder.GetHandle(), out val),
- "Failed to get video bitrate.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetVideoEncoderBitrate(_recorder.GetHandle(), value),
- "Failed to set video bitrate");
- }
- }
-
- /// <summary>
- /// The audio codec for encoding an audio stream.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <value>A <see cref="RecorderAudioCodec"/> that specifies the type of audio codec.</value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public RecorderAudioCodec AudioCodec
- {
- get
- {
- RecorderAudioCodec val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetAudioEncoder(_recorder.GetHandle(), out val),
- "Failed to get audio codec");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetAudioEncoder(_recorder.GetHandle(), value),
- "Failed to set audio codec");
- }
- }
-
- /// <summary>
- /// The video codec for encoding video stream.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <value>A <see cref="RecorderVideoCodec"/> that specifies the type of video codec.</value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public RecorderVideoCodec VideoCodec
- {
- get
- {
- RecorderVideoCodec val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetVideoEncoder(_recorder.GetHandle(), out val),
- "Failed to get video codec");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetVideoEncoder(_recorder.GetHandle(), value),
- "Failed to set video codec");
- }
- }
-
- /// <summary>
- /// The file format for recording media stream.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <value>A <see cref="RecorderFileFormat"/> that specifies the file format.</value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public RecorderFileFormat FileFormat
- {
- get
- {
- RecorderFileFormat val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetFileFormat(_recorder.GetHandle(), out val),
- "Failed to get file format.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetFileFormat(_recorder.GetHandle(), value),
- "Failed to set file format");
- }
- }
-
- /// <summary>
- /// The file path to record.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <remarks>
- /// If the same file already exists in the file system, then old file
- /// will be overwritten.
- /// </remarks>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public string FilePath
- {
- get
- {
- IntPtr val;
- RecorderError ret = Native.GetFileName(_recorder.GetHandle(), out val);
- if (ret != RecorderError.None)
- {
- Log.Error(RecorderLog.Tag, "Failed to get filepath, " + (RecorderError)ret);
- }
- string result = Marshal.PtrToStringAnsi(val);
- LibcSupport.Free(val);
- return result;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetFileName(_recorder.GetHandle(), value),
- "Failed to set filepath");
- }
- }
-
- /// <summary>
- /// The maximum size of a recording file in KB(kilobytes). If 0, means
- /// unlimited recording size.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <remarks>
- /// After reaching the limitation, the data which is being recorded will
- /// be discarded and not written to the file.
- /// The recorder state must be in 'Ready' or 'Created' state.
- /// </remarks>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public int SizeLimit
- {
- get
- {
- int val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetSizeLimit(_recorder.GetHandle(), out val),
- "Failed to get size limit.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetSizeLimit(_recorder.GetHandle(), value),
- "Failed to set size limit");
- }
- }
-
- /// <summary>
- /// The time limit of a recording file in Seconds. If 0, means unlimited recording
- /// time.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <remarks>
- /// After reaching the limitation, the data which is being recorded will
- /// be discarded and not written to the file.
- /// The recorder state must be in 'Ready' or 'Created' state.
- /// </remarks>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public int TimeLimit
- {
- get
- {
- int val = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetTimeLimit(_recorder.GetHandle(), out val),
- "Failed to get time limit.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetTimeLimit(_recorder.GetHandle(), value),
- "Failed to set time limit.");
- }
- }
-
- /// <summary>
- /// The mute state of a recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public bool Mute
- {
- get
- {
- return Native.GetMute(_recorder.GetHandle());
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetMute(_recorder.GetHandle(), value),
- "Failed to set mute");
- }
- }
-
- /// <summary>
- /// The video recording motion rate
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <remarks>
- /// The attribute is valid only in a video recorder.
- /// If the rate is in range of 0-1, video is recorded in a slow motion mode.
- /// If the rate is bigger than 1, video is recorded in a fast motion mode.
- /// </remarks>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public double MotionRate
- {
- get
- {
- double val = 0.0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetMotionRate(_recorder.GetHandle(), out val),
- "Failed to get video motion rate.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetMotionRate(_recorder.GetHandle(), value),
- "Failed to set video motion rate");
- }
- }
-
- /// <summary>
- /// The orientation in a video metadata tag.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <value>A <see cref="Rotation"/> that specifies the type of orientation.</value>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public Rotation OrientationTag
- {
- get
- {
- RecorderErrorFactory.ThrowIfError(Native.GetOrientationTag(_recorder.GetHandle(), out var val),
- "Failed to get recorder orientation.");
-
- return val;
- }
-
- set
- {
- RecorderErrorFactory.ThrowIfError(Native.SetOrientationTag(_recorder.GetHandle(), value),
- "Failed to set recorder orientation");
- }
- }
-
- /// <summary>
- /// Resolution of the video.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- /// <exception cref="ArgumentException">In case of invalid parameters</exception>
- /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
- public Size VideoResolution
- {
- get
- {
- int width = 0;
- int height = 0;
-
- RecorderErrorFactory.ThrowIfError(Native.GetVideoResolution(_recorder.GetHandle(), out width, out height),
- "Failed to get camera video resolution");
-
- return new Size(width, height);
- }
-
- set
- {
- Size res = value;
-
- RecorderErrorFactory.ThrowIfError(Native.SetVideoResolution(_recorder.GetHandle(), res.Width, res.Height),
- "Failed to set video resolution.");
- }
- }
- }
-}
\ No newline at end of file
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended EventArgs class which contains details about previous and current state
- /// of the recorder when its state is changed.
+ /// Provides data for the <see cref="Recorder.StateChanged"/> event.
/// </summary>
public class RecorderStateChangedEventArgs : EventArgs
{
internal RecorderStateChangedEventArgs(RecorderState previous, RecorderState current, bool byPolicy)
{
- Previous = previous;
- Current = current;
+ PreviousState = previous;
+ CurrentState = current;
IsStateChangedByPolicy = byPolicy;
}
/// <summary>
- /// Previous state of the recorder.
+ /// Gets the previous state of the recorder.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderState Previous { get; }
+ public RecorderState PreviousState { get; }
/// <summary>
- /// Current state of the recorder.
+ /// Gets the current state of the recorder.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderState Current { get; }
+ public RecorderState CurrentState { get; }
/// <summary>
- /// true if the state changed by policy such as Resource Conflict or Security, otherwise false
- /// in normal state change.
+ /// Gets the value indicating whether the state is changed by policy.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
+ /// <value>true if the state changed by policy such as resource conflict or security, otherwise false.</value>
public bool IsStateChangedByPolicy { get; }
}
}
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended EventArgs class which contains details about error status and
- /// state of the recorder when it failed.
+ /// Provides data for the <see cref="Recorder.ErrorOccurred"/> event.
/// </summary>
public class RecordingErrorOccurredEventArgs : EventArgs
{
- internal RecordingErrorOccurredEventArgs(RecorderErrorCode error, RecorderState state)
+ internal RecordingErrorOccurredEventArgs(RecorderError error, RecorderState state)
{
Error = error;
- State = state;
}
/// <summary>
- /// The error code.
+ /// Gets the error.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderErrorCode Error { get; }
-
- /// <summary>
- /// The state of the recorder.
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
- public RecorderState State { get; }
-
+ public RecorderError Error { get; }
}
}
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended EventArgs class containing details about the recording limit.
+ /// Provides data for the <see cref="Recorder.RecordingLimitReached"/> event.
/// </summary>
public class RecordingLimitReachedEventArgs : EventArgs
{
- internal RecordingLimitReachedEventArgs(RecordingLimitType type)
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RecordingLimitReachedEventArgs"/> class
+ /// with the specified type.
+ /// </summary>
+ /// <param name="type">The type of the limit.</param>
+ public RecordingLimitReachedEventArgs(RecordingLimitType type)
{
Type = type;
}
/// <summary>
- /// The limitation type.
+ /// Gets the type of the limit.
/// </summary>
- /// <since_tizen> 3 </since_tizen>
public RecordingLimitType Type { get; }
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Provides data for the <see cref="Recorder.RecordingStatusChanged"/> event.
+ /// </summary>
+ public class RecordingStatusChangedEventArgs : EventArgs
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RecordingStatusChangedEventArgs"/> class
+ /// with the specified elapsed time and file size.
+ /// </summary>
+ /// <param name="elapsedTime">The time of the recording in milliseconds.</param>
+ /// <param name="fileSize">The size of the recording in kilobytes.</param>
+ public RecordingStatusChangedEventArgs(long elapsedTime, long fileSize)
+ {
+ ElapsedTime = elapsedTime;
+ FileSize = fileSize;
+ }
+
+ /// <summary>
+ /// Gets the time of the recording in milliseconds.
+ /// </summary>
+ public long ElapsedTime { get; }
+
+ /// <summary>
+ /// Gets the size of the recording file in kilobytes.
+ /// </summary>
+ public long FileSize { get; }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using Native = Interop.Recorder;
+using NativeHandle = Interop.RecorderHandle;
+
+namespace Tizen.Multimedia
+{
+ public partial class VideoRecorder
+ {
+ private static IEnumerable<Size> _frontResolutions;
+ private static IEnumerable<Size> _rearResolutions;
+
+ private static IEnumerable<Size> GetVideoResolutions(NativeHandle handle)
+ {
+ var result = new List<Size>();
+
+ var ret = Native.GetVideoResolutions(handle, (w, h, _) => { result.Add(new Size(w, h)); return true; });
+
+ if (ret == RecorderErrorCode.NotSupported)
+ {
+ throw new NotSupportedException("Video recording is not supported.");
+ }
+
+ ret.ThrowIfError("Failed to load the resolutions");
+
+ return result.AsReadOnly();
+ }
+
+ private static IEnumerable<Size> LoadVideoResolutions(CameraDevice device)
+ {
+ using (var camera = new Camera(device))
+ {
+ Native.CreateVideo(camera.Handle, out var handle).ThrowIfError("Failed to get the resolutions");
+
+ using (handle)
+ {
+ return GetVideoResolutions(handle);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the video resolutions that the current device supports.
+ /// </summary>
+ /// <feature>http://tizen.org/feature/camera</feature>
+ /// <param name="device">The camera device to retrieve the supported resolutions</param>
+ /// <exception cref="NotSupportedException">A required feature is not supported.</exception>
+ /// <exception cref="ArgumentException"><paramref name="device"/> is invalid.</exception>
+ public static IEnumerable<Size> GetSupportedVideoResolutions(CameraDevice device)
+ {
+ ValidationUtil.ValidateEnum(typeof(CameraDevice), device, nameof(device));
+
+ if (device == CameraDevice.Front)
+ {
+ return _frontResolutions ?? (_frontResolutions = LoadVideoResolutions(CameraDevice.Front));
+ }
+
+ if (device == CameraDevice.Front)
+ {
+ return _rearResolutions ?? (_rearResolutions = LoadVideoResolutions(CameraDevice.Rear));
+ }
+
+ Debug.Fail($"No cache for {device}.");
+
+ return LoadVideoResolutions(device);
+ }
+
+ /// <summary>
+ /// Gets the video encoders that the current device supports.
+ /// </summary>
+ /// <feature>http://tizen.org/feature/camera</feature>
+ /// <exception cref="NotSupportedException">A required feature is not supported.</exception>
+ public static IEnumerable<RecorderVideoCodec> GetSupportedVideoCodecs()
+ => Capabilities.Value.SupportedVideoCodecs ?? throw new NotSupportedException("Video recording is not supported.");
+
+ internal static void ValidateVideoCodec(RecorderVideoCodec codec)
+ {
+ if (GetSupportedVideoCodecs().Contains(codec) == false)
+ {
+ throw new NotSupportedException($"{codec.ToString()} is not supported.");
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using Native = Interop.Recorder;
+using NativeHandle = Interop.RecorderHandle;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Provides the ability to control video recording.
+ /// </summary>
+ public partial class VideoRecorder : Recorder
+ {
+ private static NativeHandle CreateHandle(Camera camera)
+ {
+ if (camera == null)
+ {
+ throw new ArgumentNullException(nameof(camera));
+ }
+
+ Native.CreateVideo(camera.Handle, out var handle).
+ ThrowIfError("Failed to create video recorder.");
+
+ return handle;
+ }
+
+ private static void ThrowIfCodecAndFormatNotValid(RecorderVideoCodec videoCodec,
+ RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat)
+ {
+ videoCodec.ThrowIfFormatNotSupported(fileFormat);
+
+ if (audioCodec != RecorderAudioCodec.None)
+ {
+ audioCodec.ThrowIfFormatNotSupported(fileFormat);
+ }
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="VideoRecorder"/> class with the specified camera, video codec and file format.
+ /// </summary>
+ /// <remarks>
+ /// If the state of <see cref="Camera"/> is <see cref="CameraState.Created"/>,
+ /// the <see cref="CameraSettings.PreviewPixelFormat"/> will be changed to the recommended format for recording.\n
+ /// \n
+ /// The initial state of the Recorder will be <see cref="RecorderState.Ready"/>
+ /// if the state of <see cref="Camera"/> is <see cref="CameraState.Preview"/> or <see cref="CameraState.Captured"/>.
+ /// </remarks>
+ /// <param name="camera">The camera object.</param>
+ /// <param name="videoCodec">The codec for video encoding.</param>
+ /// <param name="fileFormat">The format of result file.</param>
+ /// <feature>http://tizen.org/feature/camera</feature>
+ /// <exception cref="InvalidOperationException">An internal error occurred.</exception>
+ /// <exception cref="NotSupportedException">
+ /// A required feature is not supported.\n
+ /// -or-\n
+ /// <paramref name="videoCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified video codec.
+ /// </exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="videoCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException"><paramref name="camera"/> has been disposed of.</exception>
+ /// <exception cref="ArgumentNullException"><paramref name="camera"/> is null.</exception>
+ /// <seealso cref="GetSupportedVideoCodecs"/>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderVideoCodec)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderVideoCodec, RecorderFileFormat)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderVideoCodec, RecorderAudioCodec, RecorderFileFormat)"/>
+ public VideoRecorder(Camera camera, RecorderVideoCodec videoCodec, RecorderFileFormat fileFormat) :
+ this(camera, videoCodec, RecorderAudioCodec.None, fileFormat)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="VideoRecorder"/> class with the specified camera, video codec,
+ /// audio codec and file format.
+ /// </summary>
+ /// <remarks>
+ /// If the state of <see cref="Camera"/> is <see cref="CameraState.Created"/>,
+ /// the <see cref="CameraSettings.PreviewPixelFormat"/> will be changed to the recommended format for recording.\n
+ /// \n
+ /// The initial state of the Recorder will be <see cref="RecorderState.Ready"/>
+ /// if the state of <see cref="Camera"/> is <see cref="CameraState.Preview"/> or <see cref="CameraState.Captured"/>.
+ /// </remarks>
+ /// <param name="camera">The camera object.</param>
+ /// <param name="videoCodec">The codec for video encoding.</param>
+ /// <param name="audioCodec">The codec for audio encoding.</param>
+ /// <param name="fileFormat">The format of result file.</param>
+ /// <feature>http://tizen.org/feature/camera</feature>
+ /// <exception cref="InvalidOperationException">An internal error occurred.</exception>
+ /// <exception cref="NotSupportedException">
+ /// A required feature is not supported.\n
+ /// -or-\n
+ /// <paramref name="videoCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="audioCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified video codec.
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified audio codec.
+ /// </exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="videoCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="audioCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException"><paramref name="camera"/> has been disposed of.</exception>
+ /// <exception cref="ArgumentNullException"><paramref name="camera"/> is null.</exception>
+ /// <seealso cref="Recorder.GetSupportedAudioCodecs"/>
+ /// <seealso cref="GetSupportedVideoCodecs"/>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderAudioCodec)"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderVideoCodec)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderVideoCodec, RecorderFileFormat)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderVideoCodec, RecorderAudioCodec, RecorderFileFormat)"/>
+ public VideoRecorder(Camera camera, RecorderVideoCodec videoCodec,
+ RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat) : base(CreateHandle(camera))
+ {
+ SetFormatAndCodec(videoCodec, RecorderAudioCodec.None, fileFormat);
+ }
+
+ /// <summary>
+ /// Sets the video codec and the file format for recording. Audio will not recorded.
+ /// </summary>
+ /// <param name="videoCodec">The codec for video encoding.</param>
+ /// <param name="fileFormat">The format of result file.</param>
+ /// <exception cref="NotSupportedException">
+ /// <paramref name="videoCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified video codec.
+ /// </exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="videoCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ /// <seealso cref="GetSupportedVideoCodecs"/>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderVideoCodec)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderVideoCodec, RecorderAudioCodec, RecorderFileFormat)"/>
+ /// <seealso cref="Recorder.Start(string)"/>
+ public void SetFormatAndCodec(RecorderVideoCodec videoCodec, RecorderFileFormat fileFormat)
+ {
+ SetFormatAndCodec(videoCodec, RecorderAudioCodec.None, fileFormat);
+ }
+
+ /// <summary>
+ /// Sets the video codec, audio codec and the file format for recording.
+ /// </summary>
+ /// <param name="videoCodec">The codec for video encoding.</param>
+ /// <param name="audioCodec">The codec for audio encoding.</param>
+ /// <param name="fileFormat">The format of result file.</param>
+ /// <exception cref="NotSupportedException">
+ /// <paramref name="videoCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="audioCodec"/> is not supported.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified video codec.
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not supported with the specified audio codec.
+ /// </exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="videoCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="audioCodec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ /// <seealso cref="Recorder.GetSupportedAudioCodecs"/>
+ /// <seealso cref="VideoRecorder.GetSupportedVideoCodecs"/>
+ /// <seealso cref="Recorder.GetSupportedFileFormats"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderAudioCodec)"/>
+ /// <seealso cref="RecorderExtensions.GetSupportedFileFormats(RecorderVideoCodec)"/>
+ /// <seealso cref="SetFormatAndCodec(RecorderVideoCodec, RecorderFileFormat)"/>
+ /// <seealso cref="Recorder.Start(string)"/>
+ public void SetFormatAndCodec(RecorderVideoCodec videoCodec, RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat)
+ {
+ ThrowIfCodecAndFormatNotValid(videoCodec, audioCodec, fileFormat);
+
+ VideoCodec = videoCodec;
+ AudioCodec = audioCodec;
+ FileFormat = fileFormat;
+ }
+
+ #region Properties
+
+ private RecorderVideoCodec _videoCodec;
+
+ /// <summary>
+ /// Gets the audio codec for encoding an audio stream.
+ /// </summary>
+ public RecorderVideoCodec VideoCodec
+ {
+ get => _videoCodec;
+ internal set
+ {
+ Debug.Assert(Enum.IsDefined(typeof(RecorderVideoCodec), value));
+
+ ValidateVideoCodec(value);
+
+ Native.SetVideoEncoder(Handle, value).ThrowIfError("Failed to set video codec.");
+
+ _videoCodec = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the video recording motion rate.
+ /// </summary>
+ /// <remarks>
+ /// The attribute is valid only in a video recorder.\n
+ /// If the rate is in range of 0-1, video is recorded in a slow motion mode.\n
+ /// If the rate is bigger than 1, video is recorded in a fast motion mode.\n
+ /// \n
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException">The <paramref name="value"/> is less than or equal to 0.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public double VideoMotionRate
+ {
+ get
+ {
+ Native.GetMotionRate(Handle, out var val).ThrowIfError("Failed to get video motion rate.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Video Motion rate can't be less than zero.");
+ }
+
+ Native.SetMotionRate(Handle, value).
+ ThrowIfError("Failed to set video motion rate");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the orientation in a video metadata tag.
+ /// </summary>
+ /// <value>A <see cref="Rotation"/> that specifies the type of orientation.</value>
+ /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public Rotation VideoOrientationTag
+ {
+ get
+ {
+ Native.GetOrientationTag(Handle, out var val).ThrowIfError("Failed to get recorder orientation.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidationUtil.ValidateEnum(typeof(Rotation), value, nameof(value));
+
+ Native.SetOrientationTag(Handle, value).
+ ThrowIfError("Failed to set recorder orientation");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the resolution of the video recording.
+ /// </summary>
+ /// <remarks>
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// Width or height of <paramref name="value"/> is less than or equal to zero.
+ /// </exception>
+ /// <exception cref="NotSupportedException"><paramref name="value"> is not supported.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ /// <seealso cref="Recorder.GetSupportedVideoResolutions(CameraDevice)"/>
+ public Size VideoResolution
+ {
+ get
+ {
+ Native.GetVideoResolution(Handle, out var width, out var height).
+ ThrowIfError("Failed to get camera video resolution");
+
+ return new Size(width, height);
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value.Width <= 0 || value.Height <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Resolution can't be less than or equal to zero.");
+ }
+
+ var ret = Native.SetVideoResolution(Handle, value.Width, value.Height);
+
+ if (ret == RecorderErrorCode.InvalidParameter)
+ {
+ throw new NotSupportedException($"Resolution({value.ToString()}) is not supported.");
+ }
+
+ ret.ThrowIfError("Failed to set video resolution.");
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the bitrate of an video encoder in bits per second.
+ /// </summary>
+ /// <remarks>
+ /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
+ public int VideoBitRate
+ {
+ get
+ {
+ Native.GetVideoEncoderBitrate(Handle, out var val).ThrowIfError("Failed to get video bitrate.");
+
+ return val;
+ }
+
+ set
+ {
+ ValidateState(RecorderState.Idle, RecorderState.Ready);
+
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Bit rate can't be less than or equal to zero.");
+ }
+
+ Native.SetVideoEncoderBitrate(Handle, value).
+ ThrowIfError("Failed to set video bitrate");
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
return Native.SetDisplay(Handle, (int)type, evasObject);
}
+
+ ScreenMirroringErrorCode IDisplayable<ScreenMirroringErrorCode>.ApplyEcoreWindow(IntPtr windowHandle)
+ {
+ throw new NotSupportedException("ScreenMirroring does not support NUI.Window display.");
+ }
#endregion
/// <summary>
/// <summary>
/// Occurred when recording is progressing for recording status.
/// </summary>
- private EventHandler<RecordingProgressEventArgs> _recordingStatusChanged;
+ private EventHandler<RecordingStatusChangedEventArgs> _recordingStatusChanged;
private Native.RecordingStatusCallback _recordingStatusCallback;
/// <summary>
/// Occurred when recording time or size reach limit.
/// <summary>
/// Event that occurs when recording status changed.
/// </summary>
- public event EventHandler<RecordingProgressEventArgs> RecordingStatusChanged
+ public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged
{
add
{
{
_recordingStatusCallback = (ulong elapsedTime, ulong fileSize, IntPtr userData) =>
{
- RecordingProgressEventArgs eventArgs = new RecordingProgressEventArgs(elapsedTime, fileSize);
+ RecordingStatusChangedEventArgs eventArgs = new RecordingStatusChangedEventArgs((long)elapsedTime, (long)fileSize);
_recordingStatusChanged?.Invoke(this, eventArgs);
};
int ret = Native.SetStatusChangedCallback(_handle, _recordingStatusCallback, IntPtr.Zero);
[DllImport(Libraries.MediaVision, EntryPoint = "mv_source_fill_by_buffer")]
internal static extern MediaVisionError FillBuffer(IntPtr source, byte[] buffer,
- int bufferSize, uint imageWidth, uint imageHeight, Colorspace colorspace);
+ int bufferSize, uint imageWidth, uint imageHeight, VisionColorSpace colorspace);
[DllImport(Libraries.MediaVision, EntryPoint = "mv_source_clear")]
internal static extern int Clear(IntPtr /* mv_source_h */ source);
internal static extern int GetWidth(IntPtr source, out uint imageWidth);
[DllImport(Libraries.MediaVision, EntryPoint = "mv_source_get_colorspace")]
- internal static extern int GetColorspace(IntPtr /* mv_source_h */ source, out Colorspace colorspace);
+ internal static extern int GetColorspace(IntPtr /* mv_source_h */ source, out VisionColorSpace colorspace);
}
/// <summary>
+++ /dev/null
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Tizen.Multimedia.Vision
-{
- /// <summary>
- /// Specifies colorspaces for MediaVision.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- public enum Colorspace
- {
- /// <summary>
- /// The colorspace type is invalid.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Invalid,
- /// <summary>
- /// The colorspace type is Y800.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Y800,
- /// <summary>
- /// The colorspace type is I420.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- I420,
- /// <summary>
- /// The colorspace type is NV12.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- NV12,
- /// <summary>
- /// The colorspace type is YV12.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- YV12,
- /// <summary>
- /// The colorspace type is NV21.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- NV21,
- /// <summary>
- /// The colorspace type is YUYV.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Yuyv,
- /// <summary>
- /// The colorspace type is UYVY.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Uyvy,
- /// <summary>
- /// The colorspace type is 422P.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Yuv422P,
- /// <summary>
- /// The colorspace type is RGB565.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Rgb565,
- /// <summary>
- /// The colorspace type is RGB888.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Rgb888,
- /// <summary>
- /// The colorspace type is RGBA.
- /// </summary>
- /// <since_tizen> 3</since_tizen>
- Rgba
- }
-}
using System;
using System.Diagnostics;
+using System.Linq;
+using System.Collections.Generic;
using InteropSource = Interop.MediaVision.MediaSource;
namespace Tizen.Multimedia.Vision
{
}
- private static void FillBuffer(IntPtr handle, byte[] buffer, uint width, uint height, Colorspace colorspace)
+ private static void FillBuffer(IntPtr handle, byte[] buffer, uint width, uint height, ColorSpace colorSpace)
{
Debug.Assert(handle != IntPtr.Zero);
throw new ArgumentException("Buffer.Length is zero.", nameof(buffer));
}
- if (colorspace == Colorspace.Invalid)
- {
- throw new ArgumentException($"color space must not be {Colorspace.Invalid}.", nameof(colorspace));
- }
-
- ValidationUtil.ValidateEnum(typeof(Colorspace), colorspace, nameof(colorspace));
+ ValidationUtil.ValidateEnum(typeof(ColorSpace), colorSpace, nameof(colorSpace));
- InteropSource.FillBuffer(handle, buffer, buffer.Length, width, height, colorspace).
+ InteropSource.FillBuffer(handle, buffer, buffer.Length, width, height, colorSpace.ToVisionColorSpace()).
Validate("Failed to fill buffer");
}
/// <summary>
- /// Initializes a new instance of the <see cref="MediaVisionSource"/> class based on the buffer and <see cref="Colorspace"/>.
+ /// Initializes a new instance of the <see cref="MediaVisionSource"/> class based on the buffer and <see cref="ColorSpace"/>.
/// </summary>
/// <param name="buffer">The buffer of image data.</param>
/// <param name="width">The width of image.</param>
/// <param name="height">The height of image.</param>
- /// <param name="colorspace">The image <see cref="Colorspace"/>.</param>
- /// <exception cref="NotSupportedException">The feature is not supported.</exception>
+ /// <param name="colorSpace">The image <see cref="ColorSpace"/>.</param>
+ /// <exception cref="NotSupportedException">
+ /// The feature is not supported.\n
+ /// -or-\n
+ /// <paramref name="colorSpace"/> is not supported.
+ /// </exception>
/// <exception cref="ArgumentNullException"><paramref name="buffer"/> is null.</exception>
/// <exception cref="ArgumentException">
/// <paramref name="buffer"/> has no element.(The length is zero.)\n
/// -or-\n
- /// <paramref name="colorspace"/> is invalid.
+ /// <paramref name="colorSpace"/> is invalid.
/// </exception>
/// <since_tizen> 3</since_tizen>
- public MediaVisionSource(byte[] buffer, uint width, uint height, Colorspace colorspace)
- : this(handle => FillBuffer(handle, buffer, width, height, colorspace))
+ public MediaVisionSource(byte[] buffer, uint width, uint height, ColorSpace colorSpace)
+ : this(handle => FillBuffer(handle, buffer, width, height, colorSpace))
{
}
}
/// <summary>
+ /// Gets MediaVision's supported ColorSpace state.
+ /// true if supported, otherwise false.
+ /// </summary>
+ public static bool IsSupportedColorSpace(ColorSpace colorSpace)
+ {
+ return SupportedColorSpaces.Contains(colorSpace);
+ }
+
+ /// <summary>
/// Gets height of the media source.
/// </summary>
/// <exception cref="ObjectDisposedException">The <see cref="MediaVisionSource"/> has already been disposed of.</exception>
}
/// <summary>
- /// Gets <see cref="Colorspace"/> of the media source.
+ /// Gets <see cref="ColorSpace"/> of the media source.
/// </summary>
/// <exception cref="ObjectDisposedException">The <see cref="MediaVisionSource"/> has already been disposed of.</exception>
/// <since_tizen> 3</since_tizen>
- public Colorspace Colorspace
+ public ColorSpace Colorspace
{
get
{
- Colorspace colorspace = Colorspace.Invalid;
- var ret = InteropSource.GetColorspace(Handle, out colorspace);
+ VisionColorSpace visionColorSpace;
+
+ var ret = InteropSource.GetColorspace(Handle, out visionColorSpace);
MultimediaDebug.AssertNoError(ret);
- return colorspace;
+ return visionColorSpace.ToCommonColorSpace();
}
}
/// <summary>
- /// Releases all resources used by the <see cref="MediaVisionSource"/> object.
+ /// Gets the supported colorspaces for <see cref="MediaVisionSource"/>.
/// </summary>
+ public static IEnumerable<ColorSpace> SupportedColorSpaces
+ {
+ get
+ {
+ foreach (VisionColorSpace value in Enum.GetValues(typeof(VisionColorSpace)))
+ {
+ yield return value.ToCommonColorSpace();
+ }
+ }
+ }
+
public void Dispose()
{
Dispose(true);
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+
+namespace Tizen.Multimedia.Vision
+{
+ /// <summary>
+ /// Specifies colorspaces for MediaVision.
+ /// </summary>
+ internal enum VisionColorSpace
+ {
+ /// <summary>
+ /// The colorspace type is Y800.
+ /// </summary>
+ Y800 = 1,
+ /// <summary>
+ /// The colorspace type is I420.
+ /// </summary>
+ I420,
+ /// <summary>
+ /// The colorspace type is NV12.
+ /// </summary>
+ NV12,
+ /// <summary>
+ /// The colorspace type is YV12.
+ /// </summary>
+ YV12,
+ /// <summary>
+ /// The colorspace type is NV21.
+ /// </summary>
+ NV21,
+ /// <summary>
+ /// The colorspace type is YUYV.
+ /// </summary>
+ Yuyv,
+ /// <summary>
+ /// The colorspace type is UYVY.
+ /// </summary>
+ Uyvy,
+ /// <summary>
+ /// The colorspace type is 422P.
+ /// </summary>
+ Yuv422P,
+ /// <summary>
+ /// The colorspace type is RGB565.
+ /// </summary>
+ Rgb565,
+ /// <summary>
+ /// The colorspace type is RGB888.
+ /// </summary>
+ Rgb888,
+ /// <summary>
+ /// The colorspace type is RGBA.
+ /// </summary>
+ Rgba
+ }
+
+ internal static class VisionColorSpaceExtensions
+ {
+ internal static ColorSpace ToCommonColorSpace(this VisionColorSpace value)
+ {
+ Debug.Assert(Enum.IsDefined(typeof(VisionColorSpace), value));
+
+ switch (value)
+ {
+ case VisionColorSpace.Y800: return ColorSpace.Y800;
+
+ case VisionColorSpace.I420: return ColorSpace.I420;
+
+ case VisionColorSpace.NV12: return ColorSpace.NV12;
+
+ case VisionColorSpace.YV12: return ColorSpace.YV12;
+
+ case VisionColorSpace.NV21: return ColorSpace.NV21;
+
+ case VisionColorSpace.Yuyv: return ColorSpace.Yuyv;
+
+ case VisionColorSpace.Uyvy: return ColorSpace.Uyvy;
+
+ case VisionColorSpace.Yuv422P: return ColorSpace.Yuv422P;
+
+ case VisionColorSpace.Rgb565: return ColorSpace.Rgb565;
+
+ case VisionColorSpace.Rgb888: return ColorSpace.Rgb888;
+
+ case VisionColorSpace.Rgba: return ColorSpace.Rgba8888;
+ }
+
+ throw new NotSupportedException("Implementation does not support the specified value." + value.ToString());
+ }
+ }
+
+ internal static class VisionColorSpaceSupport
+ {
+ internal static VisionColorSpace ToVisionColorSpace(this ColorSpace colorSpace)
+ {
+ ValidationUtil.ValidateEnum(typeof(ColorSpace), colorSpace, nameof(colorSpace));
+
+ switch (colorSpace)
+ {
+ case ColorSpace.Y800: return VisionColorSpace.Y800;
+
+ case ColorSpace.I420: return VisionColorSpace.I420;
+
+ case ColorSpace.NV12: return VisionColorSpace.NV12;
+
+ case ColorSpace.YV12: return VisionColorSpace.YV12;
+
+ case ColorSpace.NV21: return VisionColorSpace.NV21;
+
+ case ColorSpace.Yuyv: return VisionColorSpace.Yuyv;
+
+ case ColorSpace.Uyvy: return VisionColorSpace.Uyvy;
+
+ case ColorSpace.Yuv422P: return VisionColorSpace.Yuv422P;
+
+ case ColorSpace.Rgb565: return VisionColorSpace.Rgb565;
+
+ case ColorSpace.Rgb888: return VisionColorSpace.Rgb888;
+
+ case ColorSpace.Rgba8888: return VisionColorSpace.Rgba;
+ }
+
+ throw new NotSupportedException("Implementation does not support the specified value." + colorSpace.ToString());
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Represents a buffer that is dependent on the owner object.
+ /// </summary>
+ internal class DependentMediaBuffer : MediaBufferBase
+ {
+ private readonly IBufferOwner _owner;
+
+ internal DependentMediaBuffer(IBufferOwner owner, IntPtr dataHandle, int size)
+ : base(dataHandle, size)
+ {
+ Debug.Assert(owner != null, "Owner is null!");
+ Debug.Assert(!owner.IsDisposed, "Owner has been already disposed!");
+
+ _owner = owner;
+ }
+
+
+ internal override void ValidateBufferReadable()
+ {
+ _owner.ValidateBufferReadable(this);
+ }
+
+ internal override void ValidateBufferWritable()
+ {
+ _owner.ValidateBufferWritable(this);
+ }
+ }
+}
internal static class BufferOwnerExtensions
{
- internal static void ValidateBufferReadable(this IBufferOwner bufferOwner, IReadOnlyBuffer buffer)
+ internal static void ValidateBufferReadable(this IBufferOwner bufferOwner, IMediaBuffer buffer)
{
if (bufferOwner.IsDisposed)
{
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+namespace Tizen.Multimedia
+{
+ internal abstract class MediaBufferBase : IMediaBuffer
+ {
+ private readonly IntPtr _dataHandle;
+
+ public int Length { get; }
+
+ internal MediaBufferBase(IntPtr dataHandle, int size, bool isReadOnly)
+ {
+ Debug.Assert(dataHandle != IntPtr.Zero, "dataHandle is null!");
+ Debug.Assert(size >= 0, "size must not be negative!");
+
+ _dataHandle = dataHandle;
+ Length = size;
+ IsReadOnly = false;
+ }
+
+ internal MediaBufferBase(IntPtr dataHandle, int size) :
+ this(dataHandle, size, false)
+ {
+ }
+
+ internal IntPtr DataHandle => _dataHandle;
+
+ public bool IsReadOnly { get; }
+
+ /// <summary>
+ /// Validates the range
+ /// </summary>
+ /// <param name="offset"></param>
+ /// <param name="length"></param>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// offset + length is greater than <see cref="Length"/>.
+ /// <para>-or-</para>
+ /// offset or length is less than zero.
+ /// </exception>
+ private void ValidateRange(int offset, int length)
+ {
+ if (offset + length > Length)
+ {
+ throw new ArgumentOutOfRangeException($"{nameof(offset)}, {nameof(length)}",
+ "offset + length can't be greater than length of the buffer.");
+ }
+ if (length < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(length), length,
+ $"Length can't be less than zero.");
+ }
+ if (offset < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(offset), offset,
+ $"Offset can't be less than zero.");
+ }
+ }
+
+ public byte this[int index]
+ {
+ get
+ {
+ ThrowIfBufferIsNotReadable();
+
+ if (index < 0 || index >= Length)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index), index,
+ $"Valid index range is [0, { nameof(Length) }).");
+ }
+
+ return Marshal.ReadByte(DataHandle, index);
+ }
+ set
+ {
+ ThrowIfBufferIsNotWritable();
+
+ Marshal.WriteByte(DataHandle, index, value);
+ }
+ }
+
+ private void ThrowIfBufferIsNotReadable()
+ {
+ ValidateBufferReadable();
+ }
+
+ private void ThrowIfBufferIsNotWritable()
+ {
+ if (IsReadOnly)
+ {
+ throw new NotSupportedException("The buffer is read-only.");
+ }
+
+ ValidateBufferWritable();
+ }
+
+ internal abstract void ValidateBufferReadable();
+
+ internal abstract void ValidateBufferWritable();
+
+ public void CopyFrom(byte[] source, int startIndex, int length, int offset)
+ {
+ ThrowIfBufferIsNotReadable();
+
+ if (startIndex < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(startIndex), startIndex,
+ "startIndex can't be less than zero.");
+ }
+ if (startIndex + length > source.Length)
+ {
+ throw new ArgumentOutOfRangeException($"{nameof(startIndex)}, {nameof(length)}",
+ "startIndex + length can't be greater than source.Length.");
+ }
+
+ ValidateRange(offset, length);
+
+ Marshal.Copy(source, startIndex, IntPtr.Add(_dataHandle, offset), length);
+ }
+
+ public void CopyFrom(byte[] source, int startIndex, int length)
+ {
+ CopyFrom(source, startIndex, length, 0);
+ }
+
+ public void CopyTo(byte[] dest, int startIndex, int length, int offset)
+ {
+ ThrowIfBufferIsNotWritable();
+
+ if (startIndex < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(startIndex), startIndex,
+ "startIndex can't be less than zero.");
+ }
+ if (startIndex + length > dest.Length)
+ {
+ throw new ArgumentOutOfRangeException($"{nameof(startIndex)}, {nameof(length)}",
+ "startIndex + length can't be greater than source.Length.");
+ }
+
+ ValidateRange(offset, length);
+
+ Marshal.Copy(IntPtr.Add(_dataHandle, offset), dest, startIndex, length);
+ }
+
+ public void CopyTo(byte[] dest, int startIndex, int length)
+ {
+ CopyTo(dest, startIndex, length, 0);
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Represents a scoped buffer which lives shortly such as a callback.
+ /// </summary>
+ internal class ScopedMediaBuffer : MediaBufferBase, IDisposable
+ {
+ internal ScopedMediaBuffer(IntPtr dataHandle, int size, bool isReadOnly)
+ : base(dataHandle, size, isReadOnly)
+ {
+ }
+
+ internal ScopedMediaBuffer(IntPtr dataHandle, int size)
+ : this(dataHandle, size, false)
+ {
+ }
+
+ internal override void ValidateBufferReadable()
+ {
+ if (_disposed)
+ {
+ throw new InvalidOperationException("The buffer has already been invalidated.");
+ }
+ }
+
+ internal override void ValidateBufferWritable() => ValidateBufferReadable();
+
+ #region IDisposable Support
+ private bool _disposed = false;
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (_disposed == false)
+ {
+ _disposed = true;
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+ #endregion
+ }
+}
None,
}
- internal interface IDisplayable<ErrorType>
+ internal interface IDisplayable<TError>
{
- ErrorType ApplyEvasDisplay(DisplayType type, EvasObject evasObject);
+ TError ApplyEvasDisplay(DisplayType type, EvasObject evasObject);
+ TError ApplyEcoreWindow(IntPtr windowHandle);
}
- /// <summary>
- /// Provides a means to wrap various display types.
- /// </summary>
- /// <seealso cref="Player"/>
- /// <seealso cref="Camera"/>
- /// <seealso cref="ScreenMirroring"/>
- public class Display
+ internal interface IDisplaySetter
{
- private Display(DisplayType type, EvasObject target)
- {
- if (target == null)
- {
- throw new ArgumentNullException(nameof(target));
- }
+ TError SetDisplay<TError>(IDisplayable<TError> target);
+ }
+ internal class EvasDisplaySetter : IDisplaySetter
+ {
+ private readonly DisplayType _type;
+ private readonly EvasObject _target;
+
+ internal EvasDisplaySetter(DisplayType type, EvasObject target)
+ {
if (target == IntPtr.Zero)
{
throw new ArgumentException("The evas object is not realized.");
}
- Type = type;
- EvasObject = target;
+ _type = type;
+ _target = target;
}
+ public TError SetDisplay<TError>(IDisplayable<TError> target)
+ {
+ return target.ApplyEvasDisplay(_type, _target);
+ }
+ }
+
+ internal class EcoreDisplaySetter : IDisplaySetter
+ {
+ private readonly IntPtr _windowHandle;
+
+ internal EcoreDisplaySetter(IntPtr windowHandle)
+ {
+ _windowHandle = windowHandle;
+ }
+
+ public TError SetDisplay<TError>(IDisplayable<TError> target)
+ {
+ return target.ApplyEcoreWindow(_windowHandle);
+ }
+ }
+
+ /// <summary>
+ /// Provides a means to wrap various display types.
+ /// </summary>
+ /// <seealso cref="Player"/>
+ /// <seealso cref="Camera"/>
+ /// <seealso cref="Tizen.Multimedia.Remoting.ScreenMirroring"/>
+ public class Display
+ {
+ private readonly IDisplaySetter _setter;
+
/// <summary>
/// Initializes a new instance of the <see cref="Display"/> class with a <see cref="MediaView"/> class.
/// </summary>
+ /// <param name="mediaView">A <see cref="MediaView"/> to display.</param>
/// <feature>http://tizen.org/feature/multimedia.raw_video</feature>
/// <exception cref="NotSupportedException">The required feature is not supported.</exception>
- public Display(MediaView mediaView) : this(DisplayType.Surface, mediaView)
+ public Display(MediaView mediaView)
{
ValidationUtil.ValidateFeatureSupported(Features.RawVideo);
+
+ if (mediaView == null)
+ {
+ throw new ArgumentNullException(nameof(mediaView));
+ }
+
+ _setter = new EvasDisplaySetter(DisplayType.Surface, mediaView);
}
/// <summary>
/// Initializes a new instance of the <see cref="Display"/> class with a <see cref="Window"/> class.
/// </summary>
- public Display(Window window) : this(DisplayType.Overlay, window)
+ /// <param name="window">A <see cref="Window"/> to display.</param>
+ public Display(Window window)
+ {
+ if (window == null)
+ {
+ throw new ArgumentNullException(nameof(window));
+ }
+
+ _setter = new EvasDisplaySetter(DisplayType.Overlay, window);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Display"/> class with a <see cref="NUI.Window"/> class.
+ /// </summary>
+ /// <param name="window">A <see cref="NUI.Window"/> to display.</param>
+ /// <remarks>
+ /// The <see cref="NUI.Window.BackgroundColor"/> must be <see cref="NUI.Color.Transparent"/>
+ /// for the <see cref="Display"/> to be rendered correctly.
+ /// </remarks>
+ public Display(NUI.Window window)
{
+ if (window == null)
+ {
+ throw new ArgumentNullException(nameof(window));
+ }
+
+ _setter = new EcoreDisplaySetter(window.GetNativeWindowHandler());
}
private EvasObject EvasObject { get; }
_owner = newOwner;
}
- internal ErrorType ApplyTo<ErrorType>(IDisplayable<ErrorType> target)
+ internal TError ApplyTo<TError>(IDisplayable<TError> target)
{
- return target.ApplyEvasDisplay(Type, EvasObject);
+ return _setter.SetDisplay(target);
}
}
}
*/
using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
namespace Tizen.Multimedia
{
/// <summary>
- /// Provides functionality to read a media buffer.
+ /// Provides functionality to read and write a media buffer.
/// </summary>
- public interface IReadOnlyBuffer
+ public interface IMediaBuffer
{
/// <summary>
/// Gets or sets a value at the specified index.
get;
set;
}
+
/// <summary>
/// Gets the size of the buffer, in bytes.
/// </summary>
- int Length
- {
- get;
- }
+ int Length { get; }
+
+ /// <summary>
+ /// Gets the value indicating whether the <see cref="IMediaBuffer"/> is read-only.
+ /// </summary>
+ /// <value> true if the <see cref="IMediaBuffer"/> is read-only; otherwise, false.
+ bool IsReadOnly { get; }
/// <summary>
/// Copies data from a byte array to the buffer.
/// <exception cref="ArgumentOutOfRangeException">startIndex, offset or length is not valid.</exception>
/// <exception cref="ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>
void CopyTo(byte[] dest, int startIndex, int length, int offset);
- }
- /// <summary>
- /// Provides functionality to read and write a media buffer.
- /// </summary>
- public interface IMediaBuffer : IReadOnlyBuffer
- {
/// <summary>
/// Copies data from the buffer to a byte array.
/// </summary>
/// <exception cref="InvalidOperationException">The buffer is not available. i.e. not writable state.</exception>
void CopyFrom(byte[] source, int startIndex, int length, int offset);
}
-
- /// <summary>
- /// Represents a buffer for a <see cref="MediaPacket"/>.
- /// </summary>
- internal class DependentMediaBuffer : IMediaBuffer
- {
- private readonly IBufferOwner _owner;
- private readonly IntPtr _dataHandle;
-
- internal DependentMediaBuffer(IBufferOwner owner, IntPtr dataHandle, int size)
- {
- Debug.Assert(owner != null, "Owner is null!");
- Debug.Assert(!owner.IsDisposed, "Owner has been already disposed!");
- Debug.Assert(dataHandle != IntPtr.Zero, "dataHandle is null!");
- Debug.Assert(size >= 0, "size must not be negative!");
-
- _owner = owner;
- _dataHandle = dataHandle;
- Length = size;
- }
-
- public byte this[int index]
- {
- get
- {
- _owner.ValidateBufferReadable(this);
-
- if (index < 0 || index >= Length)
- {
- throw new ArgumentOutOfRangeException($"Valid index range is [0, { nameof(Length) }).");
- }
-
- return Marshal.ReadByte(_dataHandle, index);
- }
- set
- {
- _owner.ValidateBufferWritable(this);
-
- Marshal.WriteByte(_dataHandle, index, value);
- }
- }
-
- /// <summary>
- /// Validates the range
- /// </summary>
- /// <param name="offset"></param>
- /// <param name="length"></param>
- /// <exception cref="ArgumentOutOfRangeException">
- /// offset + length is greater than <see cref="Length"/>.\n
- /// -or-\n
- /// offset or length is less than zero.
- /// </exception>
- private void ValidateRange(int offset, int length)
- {
- if (offset + length > Length)
- {
- throw new ArgumentOutOfRangeException("offset + length can't be greater than length of the buffer.");
- }
- if (length < 0)
- {
- throw new ArgumentOutOfRangeException($"Length can't be less than zero : { length }.");
- }
- if (offset < 0)
- {
- throw new ArgumentOutOfRangeException($"Offset can't be less than zero : { offset }.");
- }
- }
-
- public void CopyFrom(byte[] source, int startIndex, int length, int offset)
- {
- _owner.ValidateBufferReadable(this);
-
- if (startIndex < 0)
- {
- throw new ArgumentOutOfRangeException("startIndex can't be less than zero.");
- }
- if (startIndex + length > source.Length)
- {
- throw new ArgumentOutOfRangeException("startIndex + length can't be greater than source.Length.");
- }
-
- ValidateRange(offset, length);
-
- Marshal.Copy(source, startIndex, IntPtr.Add(_dataHandle, offset), length);
- }
-
- public void CopyFrom(byte[] source, int startIndex, int length)
- {
- CopyFrom(source, startIndex, length, 0);
- }
-
- public void CopyTo(byte[] dest, int startIndex, int length, int offset)
- {
- _owner.ValidateBufferWritable(this);
-
- if (startIndex < 0)
- {
- throw new ArgumentOutOfRangeException("Start index can't be less than zero.");
- }
- if (startIndex + length > dest.Length)
- {
- throw new ArgumentOutOfRangeException("startIndex + length can't be greater than dest.Length.");
- }
-
- ValidateRange(offset, length);
-
- Marshal.Copy(IntPtr.Add(_dataHandle, offset), dest, startIndex, length);
- }
-
- public void CopyTo(byte[] dest, int startIndex, int length)
- {
- CopyTo(dest, startIndex, length, 0);
- }
-
- public int Length { get; }
- }
}
<ProjectReference Include="..\ElmSharp\ElmSharp.csproj" />
<ProjectReference Include="..\Tizen.Applications.Common\Tizen.Applications.Common.csproj" />
<ProjectReference Include="..\Tizen.System.Information\Tizen.System.Information.csproj" />
+ <ProjectReference Include="..\Tizen.NUI\Tizen.NUI.csproj" />
</ItemGroup>
</Project>
\ No newline at end of file
internal delegate void HidConnectionStateChangedCallback(int result, bool connected, string deviceAddress, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void ConnectionRequestedCallback(string deviceAddress, IntPtr userData);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void PushRequestedCallback(string file, long size, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void TransferProgressCallback(string file, long size, int percent, IntPtr userData);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void TransferFinishedCallback(int result, string file, long size, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void PushRespondedCallback(int result, string deviceAddress, IntPtr userData);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void PushProgressCallback(string file, long size, int percent, IntPtr userData);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void PushFinishedCallback(int result, string deviceAddress, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void TargetConnectionStateChangedCallback(bool connected, string deviceAddress, IntPtr userData);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void EqualizerStateChangedCallback(int equalizer, IntPtr userData);
[DllImport(Libraries.Bluetooth, EntryPoint = "bt_hid_host_disconnect")]
internal static extern int Disconnect(string deviceAddress);
+ // Bluetooth OPP
+ // Opp Server
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_initialize")]
+ internal static extern int InitializeOppServer(string deviceAddress, PushRequestedCallback pushRequestedCb, IntPtr userData);
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_deinitialize")]
+ internal static extern int DinitializeOppServer();
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_initialize_by_connection_request")]
+ internal static extern int InitializeOppServerCustom(string deviceAddress, ConnectionRequestedCallback connectionRequestedCb, IntPtr userData);
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_accept")]
+ internal static extern int OppServerAcceptPush(TransferProgressCallback transferProgressCb, TransferFinishedCallback transferFinishedCb, string name, IntPtr userData, out int transferId);
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_reject")]
+ internal static extern int OppServerRejectPush();
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_cancel_transfer")]
+ internal static extern int OppServerCancelTransfer(int transferId);
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_server_set_destination")]
+ internal static extern int OppServerSetDestinationPath(string path);
+
+ // Opp Client
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_client_initialize")]
+ internal static extern int InitializeOppClient();
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_client_dinitialize")]
+ internal static extern int DeinitializeOppClient();
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_client_add_file")]
+ internal static extern int OppClientAddFile(string filePath);
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_client_clear_files")]
+ internal static extern int OppClientClearFiles();
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_client_cancel_push")]
+ internal static extern int OppClientCancelPush();
+
+ [DllImport(Libraries.Bluetooth, EntryPoint = "bt_opp_client_push_files")]
+ internal static extern int OppClientPushFile(string filePath, PushRespondedCallback pushRespondedCb, PushProgressCallback pushProgressCb, PushFinishedCallback pushFinishedCb, IntPtr userData);
+
//Bluetooth Avrcp
[DllImport(Libraries.Bluetooth, EntryPoint = "bt_avrcp_target_initialize")]
internal static extern int InitializeAvrcp(TargetConnectionStateChangedCallback targetStateChangedCb, IntPtr userData);
internal static bool IsInitialize = false;
internal static bool IsAudioInitialize = false;
internal static bool IsHidInitialize = false;
+ internal static bool IsOppServerInitialized = false;
+ internal static bool IsOppClientInitialized = false;
}
internal partial class BluetoothAdapterImpl : IDisposable
profile = (hid as T);
}
+ else if (type.Equals("Tizen.Network.Bluetooth.BluetoothOppClient"))
+ {
+ BluetoothOppClient oppClient = new BluetoothOppClient();
+ profile = (oppClient as T);
+ }
+
if (profile != null)
{
profile.RemoteAddress = RemoteDeviceAddress;
namespace Tizen.Network.Bluetooth
{
+ /// <summary>
+ /// A class which is used to Throw the Bluetooth Error exceptions.
+ /// </summary>
static internal class BluetoothErrorFactory
{
+ /// <summary>
+ /// Exceptions for Bluetooth Errors.
+ /// </summary>
+ /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth Error happens.</exception>
static internal void ThrowBluetoothException(int exception)
{
BluetoothError error = (BluetoothError)exception;
/// </summary>
public bool Completed { get; }
}
+
+ /// <summary>
+ /// An extended EventArgs class which contains the connection state and address of the remote Bluetooth device.
+ /// </summary>
+ public class ConnectionRequestedEventArgs : EventArgs
+ {
+ private string _address;
+
+ internal ConnectionRequestedEventArgs(string address)
+ {
+ _address = address;
+ }
+
+ /// <summary>
+ /// The address.
+ /// </summary>
+ public string Address
+ {
+ get
+ {
+ return _address;
+ }
+ }
+ }
+
+ /// <summary>
+ /// An extended EventArgs class which contains the file transfer progress state, file transfer progress by percent.
+ /// </summary>
+ public class TransferProgressEventArgs : EventArgs
+ {
+ private string _file;
+ private long _size;
+ private int _percent;
+
+ internal TransferProgressEventArgs(string file, long size, int percent)
+ {
+ _file = file;
+ _size = size;
+ _percent = percent;
+ }
+
+ /// <summary>
+ /// The File name.
+ /// </summary>
+ public string File
+ {
+ get
+ {
+ return _file;
+ }
+ }
+
+ /// <summary>
+ /// The File size.
+ /// </summary>
+ public long Size
+ {
+ get
+ {
+ return _size;
+ }
+ }
+
+ /// <summary>
+ /// The File transfer percent.
+ /// </summary>
+ public int Percent
+ {
+ get
+ {
+ return _percent;
+ }
+ }
+ }
+
+ /// <summary>
+ /// An extended EventArgs class which contains the file transfer finished state and file state.
+ /// </summary>
+ public class TransferFinishedEventArgs : EventArgs
+ {
+ private string _file;
+ private long _size;
+ private int _result;
+
+ internal TransferFinishedEventArgs(int result, string file, long size)
+ {
+ _file = file;
+ _size = size;
+ _result = result;
+ }
+
+ /// <summary>
+ /// The File name.
+ /// </summary>
+ public string File
+ {
+ get
+ {
+ return _file;
+ }
+ }
+
+ /// <summary>
+ /// The File size.
+ /// </summary>
+ public long Size
+ {
+ get
+ {
+ return _size;
+ }
+ }
+
+ /// <summary>
+ /// The return value.
+ /// </summary>
+ public int Result
+ {
+ get
+ {
+ return _result;
+ }
+ }
+ }
+
+ /// <Summary>
+ /// An extended EventArgs class which contains the Push Request respond state
+ /// </Summary>
+
+ public class PushRespondedEventArgs : EventArgs
+ {
+ int _result;
+ string _address;
+
+ internal PushRespondedEventArgs(int result, string address)
+ {
+ _address = address;
+ _result = result;
+ }
+
+ /// <summary>
+ /// The return value.
+ /// </summary>
+ public int Result
+ {
+ get
+ {
+ return _result;
+ }
+ }
+
+ /// <summary>
+ /// The address.
+ /// </summary>
+ public string Address
+ {
+ get
+ {
+ return _address;
+ }
+ }
+ }
+
+ /// <summary>
+ /// An extended EventArgs class which contains the file push progress state, push progress by percent.
+ /// </summary>
+ public class PushProgressEventArgs : EventArgs
+ {
+ private string _file;
+ private long _size;
+ private int _percent;
+
+ internal PushProgressEventArgs(string file, long size, int percent)
+ {
+ _file = file;
+ _size = size;
+ _percent = percent;
+ }
+
+ /// <summary>
+ /// The File name.
+ /// </summary>
+ public string File
+ {
+ get
+ {
+ return _file;
+ }
+ }
+
+ /// <summary>
+ /// The File size.
+ /// </summary>
+ public long Size
+ {
+ get
+ {
+ return _size;
+ }
+ }
+
+ /// <summary>
+ /// The File transfer percent.
+ /// </summary>
+ public int Percent
+ {
+ get
+ {
+ return _percent;
+ }
+ }
+ }
+
+ /// <Summary>
+ /// An extended EventArgs class which contains the Push Request respond state
+ /// </Summary>
+
+ public class PushFinishedEventArgs : EventArgs
+ {
+ int _result;
+ string _address;
+
+ internal PushFinishedEventArgs(int result, string address)
+ {
+ _address = address;
+ _result = result;
+ }
+
+ /// <summary>
+ /// The return value.
+ /// </summary>
+ public int Result
+ {
+ get
+ {
+ return _result;
+ }
+ }
+
+ /// <summary>
+ /// The address.
+ /// </summary>
+ public string Address
+ {
+ get
+ {
+ return _address;
+ }
+ }
+ }
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+
+namespace Tizen.Network.Bluetooth
+{
+ /// <summary>
+ /// A class which is used to handle the connection and send and receive the object over Opp profile.
+ /// </summary>
+ /// <privilege> http://tizen.org/privilege/bluetooth </privilege>
+ public class BluetoothOppServer
+ {
+ private static BluetoothOppServerImpl _impl;
+ private static BluetoothOppServer _instance;
+
+ public BluetoothOppServer()
+ {
+ _impl = BluetoothOppServerImpl.Instance;
+ }
+
+ /// <summary>
+ /// (event) ConnectionRequested is called when OPP client requests for connection.
+ /// </summary>
+ public event EventHandler<ConnectionRequestedEventArgs> ConnectionRequested
+ {
+ add
+ {
+ _impl.ConnectionRequested += value;
+ }
+ remove
+ {
+ _impl.ConnectionRequested -= value;
+ }
+ }
+
+ /// <summary>
+ /// (event) TransferProgress is called when the file transfer state is changed.
+ /// </summary>
+ public event EventHandler<TransferProgressEventArgs> TransferProgress
+ {
+ add
+ {
+ _impl.TransferProgress += value;
+ }
+ remove
+ {
+ _impl.TransferProgress -= value;
+ }
+ }
+
+ /// <summary>
+ /// (event) TransferFinished is called when the file tranfser is completed.
+ /// </summary>
+ public event EventHandler<TransferFinishedEventArgs> TransferFinished
+ {
+ add
+ {
+ _impl.TransferFinished += value;
+ }
+ remove
+ {
+ _impl.TransferFinished -= value;
+ }
+ }
+ /// <summary>
+ /// Register the Opp Server with the Opp service.
+ /// </summary>
+ /// <remarks>
+ /// The device must be bonded with remote device by CreateBond().
+ /// If connection request is received from OPP Client, ConnectionRequested event will be invoked.
+ /// </remarks>
+ /// <param name="FilePath"> Path to store the files.</param>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public static BluetoothOppServer StartServer(string FilePath)
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ if (_instance == null)
+ {
+ BluetoothOppServer server = new BluetoothOppServer();
+ if (server != null)
+ _instance = server;
+ }
+ int ret = _impl.StartServer(FilePath);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Opp Start Server - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ return _instance;
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Stops the Opp Server.
+ /// </summary>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void StopServer()
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = _impl.StopServer();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Stop the Opp Server - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ else
+ {
+ if (_instance != null)
+ _instance = null;
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+
+ /// <summary>
+ /// Accept File Push request.
+ /// </summary>
+ /// <param name="FileName"> File name to accept.</param>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public int AcceptPush(string FileName)
+ {
+ int _transitionId = -1;
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = _impl.AcceptPush(FileName, out _transitionId);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Accept Push - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ return _transitionId;
+ }
+
+ /// <summary>
+ /// Reject File Push request.
+ /// </summary>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void RejectPush()
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = _impl.RejectPush();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Reject Push - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+
+ /// <summary>
+ /// Cancel the ongoing transfer session.
+ /// </summary>
+ /// <param name="TransferId"> tranfer ID.</param>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void CancelTransfer(int TransferId)
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = _impl.CancelTransferId(TransferId);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Cancel Transfer - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+
+ /// <summary>
+ /// Cancel the ongoing transfer session.
+ /// </summary>
+ /// <param name="FilePath"> Path to store the files.</param>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void SetDestinationPath(string FilePath)
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = _impl.SetDestinationPath(FilePath);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Set Destination Path - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+ }
+
+ /// <summary>
+ /// A class which is used to handle the connection and send and receive the object over Opp profile.
+ /// </summary>
+ /// <privilege> http://tizen.org/privilege/bluetooth </privilege>
+ public class BluetoothOppClient : BluetoothProfile
+ {
+ internal BluetoothOppClient()
+ {
+ }
+
+ /// <summary>
+ /// (event) PushResponded is called when remote OPP Server responds to a File push request.
+ /// </summary>
+ public event EventHandler<PushRespondedEventArgs> PushResponded
+ {
+ add
+ {
+ BluetoothOppClientImpl.Instance.PushResponded += value;
+ }
+ remove
+ {
+ BluetoothOppClientImpl.Instance.PushResponded -= value;
+ }
+ }
+
+ /// <summary>
+ /// (event) PushProgress is called when the file transfer state is changed.
+ /// </summary>
+ public event EventHandler<PushProgressEventArgs> PushProgress
+ {
+ add
+ {
+ BluetoothOppClientImpl.Instance.PushProgress += value;
+ }
+ remove
+ {
+ BluetoothOppClientImpl.Instance.PushProgress -= value;
+ }
+ }
+
+ /// <summary>
+ /// (event) PushFinished is called when the file tranfser is completed.
+ /// </summary>
+ public event EventHandler<PushFinishedEventArgs> PushFinished
+ {
+ add
+ {
+ BluetoothOppClientImpl.Instance.PushFinished += value;
+ }
+ remove
+ {
+ BluetoothOppClientImpl.Instance.PushFinished -= value;
+ }
+ }
+
+ /// <summary>
+ /// Add File path to be pushed.
+ /// </summary>
+ /// <param name="FilePath"> file for sending.</param>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void AddFile(string FilePath)
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = BluetoothOppClientImpl.Instance.AddFile(FilePath);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Set File Path - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+
+ /// <summary>
+ /// Clears all the File paths.
+ /// </summary>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void ClearFiles()
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = BluetoothOppClientImpl.Instance.ClearFile();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Clear the Files - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+
+ /// <summary>
+ /// Cancels the ongoing push session.
+ /// </summary>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void CancelPush()
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = BluetoothOppClientImpl.Instance.CancelPush();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Cancel Push Operation - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+
+ /// <summary>
+ /// Pushes the file set through AddFile.
+ /// </summary>
+ /// <param name="Destination"> destination device address.</param>
+ /// <feature>http://tizen.org/feature/network.bluetooth.opp</feature>
+ /// <exception cref="System.NotSupportedException">Thrown when the required feature is not Supported.</exception>
+ /// <exception cref="System.NotSupportedException">Thrown when the BT/BTLE is not Supported.</exception>
+ /// <exception cref="System.InvalidOperationException">Thrown when the BT/BTLE is not Enabled or Other Bluetooth Errors.</exception>
+ public void PushFile(string Destination)
+ {
+ if (BluetoothAdapter.IsBluetoothEnabled && Globals.IsInitialize)
+ {
+ int ret = BluetoothOppClientImpl.Instance.PushFile(Destination);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Cancel Push Operation - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ }
+ else
+ {
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
+ }
+ }
+ }
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Network.Bluetooth
+{
+ internal class BluetoothOppServerImpl
+ {
+ private event EventHandler<ConnectionRequestedEventArgs> _ConnectionRequested;
+ private Interop.Bluetooth.ConnectionRequestedCallback _ConnectionRequestedCallback;
+
+ private event EventHandler<TransferProgressEventArgs> _TransferProgress;
+ private Interop.Bluetooth.TransferProgressCallback _TransferProgressCallback;
+
+ private event EventHandler<TransferFinishedEventArgs> _TransferFinished;
+ private Interop.Bluetooth.TransferFinishedCallback _TransferFinishedCallback;
+
+ private static readonly BluetoothOppServerImpl _instance = new BluetoothOppServerImpl();
+
+ internal event EventHandler<ConnectionRequestedEventArgs> ConnectionRequested
+ {
+ add
+ {
+ _ConnectionRequested += value;
+ }
+ remove
+ {
+ //nothing to be done
+ }
+ }
+
+ internal event EventHandler<TransferProgressEventArgs> TransferProgress
+ {
+ add
+ {
+ _TransferProgress += value;
+ }
+ remove
+ {
+ //nothing to be done
+ }
+ }
+
+ internal event EventHandler<TransferFinishedEventArgs> TransferFinished
+ {
+ add
+ {
+ _TransferFinished += value;
+ }
+ remove
+ {
+ //nothing to be done
+ }
+ }
+
+ internal int StartServer(string filePath)
+ {
+ _ConnectionRequestedCallback = (string devAddress, IntPtr userData) =>
+ {
+ _ConnectionRequested?.Invoke(null, new ConnectionRequestedEventArgs(devAddress));
+ };
+
+ int ret = Interop.Bluetooth.InitializeOppServerCustom(filePath, _ConnectionRequestedCallback, IntPtr.Zero);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to start bluetooth opp server, Error - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ else
+ {
+ Globals.IsOppServerInitialized = true;
+ }
+ return ret;
+ }
+
+ internal int StopServer()
+ {
+ if (Globals.IsOppServerInitialized)
+ {
+ int ret = Interop.Bluetooth.DinitializeOppServer();
+ if (ret != (int)BluetoothError.None) {
+ Log.Error (Globals.LogTag, "Failed to stop bluetooth opp server, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int AcceptPush(string name, out int _transferId)
+ {
+ _transferId = -1;
+ if (Globals.IsOppServerInitialized)
+ {
+ _TransferProgressCallback = (string file, long size, int percent, IntPtr userData) =>
+ {
+ _TransferProgress?.Invoke(null, new TransferProgressEventArgs(file, size, percent));
+ };
+
+ _TransferFinishedCallback = (int result, string file, long size, IntPtr userData) =>
+ {
+ _TransferFinished?.Invoke(null, new TransferFinishedEventArgs(result, file, size));
+ };
+
+ int ret = Interop.Bluetooth.OppServerAcceptPush(_TransferProgressCallback, _TransferFinishedCallback, name, IntPtr.Zero, out _transferId);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to accept the push request, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int RejectPush()
+ {
+ if (Globals.IsOppServerInitialized)
+ {
+ int ret = Interop.Bluetooth.OppServerRejectPush();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to reject the push request, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int CancelTransferId(int TransferId)
+ {
+ if (Globals.IsOppServerInitialized)
+ {
+ int ret = Interop.Bluetooth.OppServerCancelTransfer(TransferId);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to cancel the transferid " + TransferId + " Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int SetDestinationPath(string path)
+ {
+ if (Globals.IsOppServerInitialized)
+ {
+ int ret = Interop.Bluetooth.OppServerSetDestinationPath(path);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Set the desitination path " + path + " Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal static BluetoothOppServerImpl Instance
+ {
+ get
+ {
+ return _instance;
+ }
+ }
+ }
+
+ internal class BluetoothOppClientImpl
+ {
+ private event EventHandler<PushRespondedEventArgs> _PushResponded;
+ private Interop.Bluetooth.PushRespondedCallback _PushRespondedCallback;
+
+ private event EventHandler<PushProgressEventArgs> _PushProgress;
+ private Interop.Bluetooth.PushProgressCallback _PushProgressCallback;
+
+ private event EventHandler<PushFinishedEventArgs> _PushFinished;
+ private Interop.Bluetooth.PushFinishedCallback _PushFinishedCallback;
+
+ private static readonly BluetoothOppClientImpl _instance = new BluetoothOppClientImpl();
+
+ internal event EventHandler<PushRespondedEventArgs> PushResponded
+ {
+ add
+ {
+ _PushResponded += value;
+ }
+ remove
+ {
+ //nothing to be done
+ }
+ }
+
+ internal event EventHandler<PushProgressEventArgs> PushProgress
+ {
+ add
+ {
+ _PushProgress += value;
+ }
+ remove
+ {
+ //nothing to be done
+ }
+ }
+
+ internal event EventHandler<PushFinishedEventArgs> PushFinished
+ {
+ add
+ {
+ _PushFinished += value;
+ }
+ remove
+ {
+ //nothing to be done
+ }
+ }
+
+ private BluetoothOppClientImpl()
+ {
+ Log.Info(Globals.LogTag, "Initializing OppClient");
+ initialize();
+ }
+
+ ~BluetoothOppClientImpl()
+ {
+ deinitialize();
+ }
+
+ internal int AddFile(string filePath)
+ {
+
+ if (Globals.IsOppClientInitialized)
+ {
+ int ret = Interop.Bluetooth.OppClientAddFile(filePath);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Add File, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int ClearFile()
+ {
+
+ if (Globals.IsOppClientInitialized)
+ {
+ int ret = Interop.Bluetooth.OppClientClearFiles();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Clear Files, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int CancelPush()
+ {
+
+ if (Globals.IsOppClientInitialized)
+ {
+ int ret = Interop.Bluetooth.OppClientCancelPush();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to Clear Files, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ internal int PushFile(string Destination)
+ {
+
+ if (Globals.IsOppClientInitialized)
+ {
+ _PushRespondedCallback = (int result, string address, IntPtr userData) =>
+ {
+ _PushResponded?.Invoke(null, new PushRespondedEventArgs(result, address));
+ };
+
+ _PushProgressCallback = (string file, long size, int percent, IntPtr userData) =>
+ {
+ _PushProgress?.Invoke(null, new PushProgressEventArgs(file, size, percent));
+ };
+
+ _PushFinishedCallback = (int result, string address, IntPtr userData) =>
+ {
+ _PushFinished?.Invoke(null, new PushFinishedEventArgs(result, address));
+ };
+
+ int ret = Interop.Bluetooth.OppClientPushFile(Destination, _PushRespondedCallback, _PushProgressCallback, _PushFinishedCallback, IntPtr.Zero);
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to push File, Error - " + (BluetoothError)ret);
+ }
+ return ret;
+ }
+ return (int)BluetoothError.NotInitialized;
+ }
+
+ private void initialize()
+ {
+ if (Globals.IsInitialize)
+ {
+
+ int ret = Interop.Bluetooth.InitializeOppClient();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to initialize bluetooth Opp Client, Error - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ else
+ {
+ Globals.IsOppClientInitialized = true;
+ }
+ }
+ else
+ {
+ Log.Error(Globals.LogTag, "Failed to initialize Opp Client, BT not initialized");
+ BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotInitialized);
+ }
+ }
+
+ private void deinitialize()
+ {
+ if (Globals.IsOppClientInitialized)
+ {
+ int ret = Interop.Bluetooth.DeinitializeOppClient();
+ if (ret != (int)BluetoothError.None)
+ {
+ Log.Error(Globals.LogTag, "Failed to deinitialize Opp Client, Error - " + (BluetoothError)ret);
+ BluetoothErrorFactory.ThrowBluetoothException(ret);
+ }
+ else
+ {
+ Globals.IsOppClientInitialized = false;
+ }
+ }
+ }
+
+ internal static BluetoothOppClientImpl Instance
+ {
+ get
+ {
+ return _instance;
+ }
+ }
+ }
+}
+
{
_peerFoundCallback = (int result, WiFiDirectDiscoveryState stateInfo, string address, IntPtr userData) =>
{
- if (_peerFound != null)
+ if (_peerFound != null && stateInfo == WiFiDirectDiscoveryState.Found)
{
WiFiDirectError error = (WiFiDirectError)result;
WiFiDirectDiscoveryState state = stateInfo;
namespace Tizen
{
/// <summary>
- /// Provides functions for writing trace message to the system trace buffer.
+ /// Provides functions for writing a trace message to the system trace buffer.
/// </summary>
public static class Tracer
{
/// <remarks>
/// The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.
/// </remarks>
- /// <param name="name">The name of event (optionally containing format specifiers)</param>
+ /// <param name="name">The name of an event (optionally containing format specifiers).</param>
/// <seealso cref="Tizen.Tracer.End()"/>
public static void Begin (String name)
{
}
/// <summary>
- /// Writes a trace event to indicate that the synchronous event has ended.
+ /// Writes a trace event to indicate that a synchronous event has ended.
/// </summary>
/// <remarks>
/// Tizen.Tracer.End() ends the most recently called Tizen.Tracer.Begin().
/// <remarks>
/// The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.
/// </remarks>
- /// <param name="cookie">An unique identifier for distinguishing simultaneous events</param>
- /// <param name="name">The name of event (optionally containing format specifiers)</param>
+ /// <param name="cookie">An unique identifier for distinguishing simultaneous events.</param>
+ /// <param name="name">The name of an event (optionally containing format specifiers).</param>
/// <seealso cref="Tizen.Tracer.AsyncEnd()"/>
public static void AsyncBegin (int cookie, String name)
{
}
/// <summary>
- /// Writes a trace event to indicate that the asynchronous event has ended.
+ /// Writes a trace event to indicate that an asynchronous event has ended.
/// </summary>
/// <remarks>
- /// Tizen.Tracer.AsyncEnd() ends matched Tizen.Tracer.AsyncBegin() which has same cookie and name.
+ /// Tizen.Tracer.AsyncEnd() ends matched Tizen.Tracer.AsyncBegin() which has the same cookie and name.
/// The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.
/// </remarks>
- /// <param name="cookie">An unique identifier for distinguishing simultaneous events</param>
- /// <param name="name">The name of event (optionally containing format specifiers)</param>
+ /// <param name="cookie">An unique identifier for distinguishing simultaneous events.</param>
+ /// <param name="name">The name of an event (optionally containing format specifiers).</param>
/// <seealso cref="Tizen.Tracer.AsyncBegin()"/>
public static void AsyncEnd (int cookie, String name)
{
}
/// <summary>
- /// Writes a trace event to track change of integer value.
+ /// Writes a trace event to track change of an integer value.
/// </summary>
/// <remarks>
/// The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.
/// </remarks>
- /// <param name="value">The integer variable to trace</param>
- /// <param name="name">The name of event (optionally containing format specifiers)</param>
+ /// <param name="value">The integer variable to trace.</param>
+ /// <param name="name">The name of an event (optionally containing format specifiers).</param>
public static void TraceValue (int value, String name)
{
Interop.Tracer.TraceValue (value, name);
internal static string ewk_view_title_get(IntPtr obj)
{
- IntPtr ptr = _ewk_view_url_get(obj);
+ IntPtr ptr = _ewk_view_title_get(obj);
return Marshal.PtrToStringAnsi(ptr);
}