[Multimedia-ScreenMirroring] Screen mirroring classes
authorGaurang Khanwalkar <g.khanwalkar@samsung.com>
Wed, 26 Oct 2016 07:38:44 +0000 (13:08 +0530)
committerGaurang Khanwalkar <g.khanwalkar@samsung.com>
Fri, 4 Nov 2016 10:25:19 +0000 (15:55 +0530)
Added new Screen Mirroring classes to Tizen.Multimedia
and modified Interop.Libraries.cs, Tizen.Multimedia.Net45.csproj and Tizen.Multimedia.csproj

Change-Id: I0a3798d9823a3617e957bd1eadfffb19d55e2a26
Signed-off-by: Gaurang Khanwalkar <g.khanwalkar@samsung.com>
src/Tizen.Multimedia/Interop/Interop.Libraries.cs
src/Tizen.Multimedia/Interop/Interop.ScreenMirroring.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/AudioInformation.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/ErrorOccurredEventArgs.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/ScreenMirroring.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/ScreenMirroringEnumerations.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/ScreenMirroringErrorFactory.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/StateChangedEventArgs.cs [new file with mode: 0755]
src/Tizen.Multimedia/ScreenMirroring/VideoInformation.cs [new file with mode: 0755]
src/Tizen.Multimedia/Tizen.Multimedia.Net45.csproj
src/Tizen.Multimedia/Tizen.Multimedia.csproj

index 861bb49..de88182 100755 (executable)
@@ -1,5 +1,18 @@
-
-using System;
+/*
+ * 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.
+ */
 
 internal static partial class Interop
 {
@@ -9,10 +22,13 @@ internal static partial class Interop
         public const string Recorder = "libcapi-media-recorder.so.0";
         public const string SoundManager = "libcapi-media-sound-manager.so.0";
         public const string AudioIO = "libcapi-media-audio-io.so.0";
+        public const string ScreenMirroring = "libcapi-screen-mirroring-io.so.0";
         public const string MetadataExtractor = "libcapi-media-metadata-extractor.so";
         public const string MediaController = "libcapi-media-controller.so.0";
         public const string MediaTool = "libcapi-media-tool.so.0";
         public const string MediaCodec = "libcapi-media-codec.so.0";
+        public const string MediaVision = "libcapi-media-vision.so.0";
         public const string Libc = "libc.so.6";
+        public const string Camera = "libcapi-media-camera.so.0";
     }
 }
diff --git a/src/Tizen.Multimedia/Interop/Interop.ScreenMirroring.cs b/src/Tizen.Multimedia/Interop/Interop.ScreenMirroring.cs
new file mode 100755 (executable)
index 0000000..87d862f
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * 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;
+
+internal static partial class Interop
+{
+    internal static partial class ScreenMirroring
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void StateErrorCallback(IntPtr userData, int state, int error);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_create")]
+        internal static extern int Create(out IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_set_state_changed_cb")]
+        internal static extern int SetStateErrorCb(IntPtr scmirroringSink, StateErrorCallback cb, IntPtr userData);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_set_ip_and_port")]
+        internal static extern int SetIpAndPort(IntPtr scmirroringSink, string ip, string port);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_set_display")]
+        internal static extern int SetDisplay(IntPtr scmirroringSink, int type, IntPtr display);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_set_resolution")]
+        internal static extern int SetResolution(IntPtr scmirroringSink, int resolution);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_prepare")]
+        internal static extern int Prepare(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_connect")]
+        internal static extern int ConnectAsync(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_start")]
+        internal static extern int StartAsync(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_pause")]
+        internal static extern int PauseAsync(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_resume")]
+        internal static extern int ResumeAsync(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_disconnect")]
+        internal static extern int Disconnect(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_unprepare")]
+        internal static extern int Unprepare(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_unset_state_changed_cb")]
+        internal static extern int UnsetStateErrorCb(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_destroy")]
+        internal static extern int Destroy(IntPtr scmirroringSink);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_video_codec")]
+        internal static extern int GetNegotiatedVideoCodec(ref IntPtr scmirroringSink, out int codec);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_video_resolution")]
+        internal static extern int GetNegotiatedVideoResolution(ref IntPtr scmirroringSink, out int width, out int height);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_video_frame_rate")]
+        internal static extern int GetNegotiatedVideoFrameRate(ref IntPtr scmirroringSink, out int frameRate);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_audio_codec")]
+        internal static extern int GetNegotiatedAudioCodec(ref IntPtr scmirroringSink, out int codec);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_audio_channel")]
+        internal static extern int GetNegotiatedAudioChannel(ref IntPtr scmirroringSink, out int channel);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_audio_sample_rate")]
+        internal static extern int GetNegotiatedAudioSampleRate(ref IntPtr scmirroringSink, out int sampleRate);
+
+        [DllImport(Libraries.ScreenMirroring, EntryPoint = "scmirroring_sink_get_negotiated_audio_bitwidth")]
+        internal static extern int GetNegotiatedAudioBitwidth(ref IntPtr scmirroringSink, out int bitwidth);
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia/ScreenMirroring/AudioInformation.cs b/src/Tizen.Multimedia/ScreenMirroring/AudioInformation.cs
new file mode 100755 (executable)
index 0000000..447febf
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * 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>
+    /// Audio Information
+    /// </summary>
+    /// <remarks>
+    /// This class provides properties and API that are required for setting
+    /// audio information of a player.
+    /// </remarks>
+    public class AudioInformation
+    {
+        internal IntPtr _handle;
+        private int _codec;
+        private int _channel;
+        private int _sampleRate;
+        private int _bitWidth;
+
+        internal AudioInformation()
+        {
+        }
+
+        /// <summary>
+        /// Get Audio Codec.
+        /// </summary>
+        /// <value> Audio Codec </value>
+        public AudioCodec Codec
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedAudioCodec(ref _handle, out _codec);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get audio codec" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get audio codec");
+                }
+
+                return (AudioCodec)_codec;
+            }
+        }
+
+        /// <summary>
+        /// Get audio channel.
+        /// </summary>
+        /// <value> AudioChannel </value>
+        public int Channel
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedAudioChannel(ref _handle, out _channel);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get audio channel" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get audio channel");
+                }
+
+                return _channel;
+            }
+        }
+
+        /// <summary>
+        /// Get audio sample rate.
+        /// </summary>
+        /// <value> AudioSampleRate </value>
+        public int SampleRate
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedAudioSampleRate(ref _handle, out _sampleRate);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get audio sample rate" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get audio sample rate");
+                }
+
+                return _sampleRate;
+            }
+        }
+
+        /// <summary>
+        /// Get audio bitwidth.
+        /// </summary>
+        /// <value> AudioBitwidth </value>
+        public int BitWidth
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedAudioBitwidth(ref _handle, out _bitWidth);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get audio bitwidth" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get audio bitwidth");
+                }
+
+                return _bitWidth;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia/ScreenMirroring/ErrorOccurredEventArgs.cs b/src/Tizen.Multimedia/ScreenMirroring/ErrorOccurredEventArgs.cs
new file mode 100755 (executable)
index 0000000..a24d9f2
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * 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>
+    /// ErrorOccurred event arguments
+    /// </summary>
+    /// <remarks>
+    /// ErrorOccurred event arguments
+    /// </remarks>
+    public class ErrorOccurredEventArgs : EventArgs
+    {
+        internal int _error;
+
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        /// <param name="error"> Error Occurred </param>
+        internal ErrorOccurredEventArgs(int error)
+        {
+            _error = error;
+        }
+
+        /// <summary>
+        /// Get the error code.
+        /// </summary>
+        /// <value> error code </value>
+        public SCMirroringError Error
+        {
+            get
+            {
+                return (SCMirroringError)_error;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia/ScreenMirroring/ScreenMirroring.cs b/src/Tizen.Multimedia/ScreenMirroring/ScreenMirroring.cs
new file mode 100755 (executable)
index 0000000..11b93b3
--- /dev/null
@@ -0,0 +1,540 @@
+/*
+ * 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.Threading.Tasks;
+using System.Runtime.InteropServices;
+
+namespace Tizen.Multimedia
+{
+    static internal class ScreenMirroringLog
+    {
+        internal const string LogTag = "Tizen.Multimedia.ScreenMirroring";
+    }
+
+    /// <summary>
+    /// Screen mirroring.
+    /// </summary>
+    public class ScreenMirroring : IDisposable
+    {
+        internal VideoInformation _videoInfo;
+        internal AudioInformation _audioInfo;
+        internal IntPtr _handle;
+        internal string _ip;
+        internal string _port;
+        internal SurfaceType _type;
+        internal MediaView _display;
+
+        private bool _disposed = false;
+        private EventHandler<StateChangedEventArgs> _stateChanged;
+        private Interop.ScreenMirroring.StateErrorCallback _stateErrorCallback;
+        private EventHandler<ErrorOccurredEventArgs> _errorOccurred;
+
+        /// <summary>
+        /// Initializes a new instance of the ScreenMirroring class with parameters Ip, Port, Surface type and Display handle.
+        /// Object should be created only when Ip and Port are available.
+        /// Create api will create a new handle with the given parameters.
+        /// </summary>
+        /// <param name="type">Type.</param>
+        /// <param name="display">Display.</param>
+        /// <param name="ip">Ip.</param>
+        /// <param name="port">Port.</param>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public ScreenMirroring(SurfaceType type, MediaView display, string ip, string port)
+        {
+            int ret = Interop.ScreenMirroring.Create(out _handle);
+            if (ret != (int)SCMirroringError.None)
+            {
+                ScreenMirroringErrorFactory.ThrowException(ret, "Failed to create Screen Mirroring Sink");
+            }
+
+            // initiate values
+            _ip = ip;
+            _port = port;
+            _type = type;
+            _display = display;
+
+            // Set ip and port
+            int ret1 = Interop.ScreenMirroring.SetIpAndPort(_handle, _ip, _port);
+            if (ret1 != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Set ip and port failed" + (SCMirroringError)ret1);
+                ScreenMirroringErrorFactory.ThrowException(ret, "set ip and port failed");
+            }
+
+            // Set display
+            int ret2 = Interop.ScreenMirroring.SetDisplay(_handle, (int)_type, _display);
+            if (ret2 != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Set display failed" + (SCMirroringError)ret2);
+                ScreenMirroringErrorFactory.ThrowException(ret, "set display failed");
+            }
+
+            // AudioInfo
+            _audioInfo = new AudioInformation();
+            _audioInfo._handle = _handle;
+            // VideoInfo
+            _videoInfo = new VideoInformation();
+            _videoInfo._handle = _handle;
+
+            Log.Debug(ScreenMirroringLog.LogTag, "screen mirroring sink created : " + _handle);
+        }
+
+        /// <summary>
+        /// Screen Mirroring destructor.
+        /// </summary>
+        ~ScreenMirroring()
+        {
+            Dispose(false);
+        }
+
+        /// <summary>
+        /// StateChanged event is raised when state change happens.
+        /// Must be called after Create() API.
+        /// </summary>
+        public event EventHandler<StateChangedEventArgs> StateChanged
+        {
+            add
+            {
+                if (_stateChanged == null)
+                {
+                    RegisterStateChangedEvent();
+                }
+
+                _stateChanged += value;
+            }
+
+            remove
+            {
+                _stateChanged -= value;
+                if (_stateChanged == null)
+                {
+                    UnregisterStateChangedEvent();
+                }
+            }
+        }
+
+        /// <summary>
+        /// ErrorOccurred event is raised when error is occured in screen mirroring sink.
+        /// Must be called after Create() API.
+        /// </summary>
+        public event EventHandler<ErrorOccurredEventArgs> ErrorOccurred
+        {
+            add
+            {
+                if (_errorOccurred == null)
+                {
+                    RegisterErrorOccurredEvent();
+                }
+
+                _errorOccurred += value;
+            }
+
+            remove
+            {
+                _errorOccurred -= value;
+                if (_errorOccurred == null)
+                {
+                    UnregisterErrorOccurredEvent();
+                }
+            }
+        }
+
+        /// <summary>
+        /// Sets the server ip and port.
+        /// This must be called before connect() and after create().
+        /// </summary>
+        /// <example> If only one handle is used for toggling between more than two source devices,
+        /// then this API ahould be used to assign the parameters to the handle.
+        /// </example>
+        /// <param name="ip">Ip.</param>
+        /// <param name="port">Port.</param>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public void SetIpAndPort(string ip, string port)
+        {
+            int ret = Interop.ScreenMirroring.SetIpAndPort(_handle, ip, port);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Set ip and port failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "set ip and port failed");
+            }
+        }
+
+        /// <summary>
+        /// Set Resolution.
+        /// valid state: NULL..
+        /// </summary>
+        /// <param name="resolution"> example: (R1920x1080P30 | R1280x720P30) </param>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public void SetResolution(int resolution)
+        {
+            int ret = Interop.ScreenMirroring.SetResolution(_handle, resolution);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Set resolution failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "set resolution failed");
+            }
+        }
+
+        /// <summary>
+        /// Sets the display.
+        /// This must be called before prepare() and after create().
+        /// </summary>
+        /// <example> If only one handle is used for toggling between more than two source devices,
+        /// then this API ahould be used to assign the parameters to the handle.
+        /// </example>
+        /// <param name="type">Type.</param>
+        /// <param name="display">Display.</param>
+        /// <remarks> Display Handle not clear </remarks>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public void SetDisplay(SurfaceType type, MediaView display)
+        {
+            int ret = Interop.ScreenMirroring.SetDisplay(_handle, (int)type, display);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Set display failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "set display failed");
+            }
+        }
+
+        /// <summary>
+        /// Prepare this instance.
+        /// This must be called after Create().
+        /// </summary>
+        public void Prepare()
+        {
+            int ret = Interop.ScreenMirroring.Prepare(_handle);
+            if (ret != (int)SCMirroringError.None)
+            {
+                ScreenMirroringErrorFactory.ThrowException(ret, "Failed to prepare sink for screen mirroring");
+            }
+        }
+
+        /// <summary>
+        /// Creates connection and prepare for receiving data from SCMIRRORING source.
+        /// This must be called after prepare().
+        /// </summary>
+        /// <remarks> It will not give the current state. Need to subscribe for event to get the current state </remarks>
+        /// <returns>bool value</returns>
+        /// <privilege>http://tizen.org/privilege/internet</privilege>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public Task<bool> ConnectAsync()
+        {
+            int ret = Interop.ScreenMirroring.ConnectAsync(_handle);
+            var task = new TaskCompletionSource<bool>();
+
+            Task.Factory.StartNew(() =>
+            {
+                if (ret == (int)SCMirroringError.None)
+                {
+                    task.SetResult(true);
+                }
+
+                else if (ret != (int)SCMirroringError.None)
+                {
+                    task.SetResult(false);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "Failed to connect the screen mirroring source");
+                }
+            });
+
+            return task.Task;
+        }
+
+        /// <summary>
+        /// Get AudioInfo.
+        /// This must be called after connectasync().
+        /// valid states: connected/playback/paused.
+        /// If audio file changes during playback again
+        /// then the current info should be retrieved from the audio information class.
+        /// </summary>
+        /// <value> AudioInfo object </value>
+        public AudioInformation AudioInfo
+        {
+            get
+            {
+                return _audioInfo;
+            }
+        }
+
+        /// <summary>
+        /// Get VideoInfo.
+        /// This must be called after connectasync().
+        /// valid states: connected/playback/paused.
+        /// If video file changes during playback again
+        /// then the current info should be retrieved from the video information class.
+        /// </summary>
+        /// <value> VideoInfo object </value>
+        public VideoInformation VideoInfo
+        {
+            get
+            {
+                return _videoInfo;
+            }
+        }
+
+        /// <summary>
+        /// Start receiving data from the SCMIRRORING source and display it(Mirror).
+        /// This must be called after connectasync().
+        ///  </summary>
+        /// <remarks> It will not give the current state. Need to subscribe for event to get the current state </remarks>
+        /// <returns>bool value<returns>
+        /// <privilege>http://tizen.org/privilege/internet</privilege>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public Task<bool> StartAsync()
+        {
+            int ret = Interop.ScreenMirroring.StartAsync(_handle);
+            var task = new TaskCompletionSource<bool>();
+
+            Task.Factory.StartNew(() =>
+            {
+                if (ret == (int)SCMirroringError.None)
+                {
+                    task.SetResult(true);
+                }
+
+                else if (ret != (int)SCMirroringError.None)
+                {
+                    task.SetResult(false);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "Failed to start the screen mirroring");
+                }
+            });
+
+            return task.Task;
+        }
+
+        /// <summary>
+        /// Pauses receiving data from the SCMIRRORING source.
+        /// This must be called after startasync().
+        /// </summary>
+        /// <remarks> It will not give the current state. Need to subscribe for event to get the current state </remarks>
+        /// <returns>bool value</returns>
+        /// <privilege>http://tizen.org/privilege/internet</privilege>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public Task<bool> PauseAsync()
+        {
+            int ret = Interop.ScreenMirroring.PauseAsync(_handle);
+            var task = new TaskCompletionSource<bool>();
+
+            Task.Factory.StartNew(() =>
+            {
+                if (ret == (int)SCMirroringError.None)
+                {
+                    task.SetResult(true);
+                }
+
+                else if (ret != (int)SCMirroringError.None)
+                {
+                    task.SetResult(false);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "Failed to pause the receiving data from screen mirroring source");
+                }
+            });
+
+            return task.Task;
+        }
+
+        /// <summary>
+        /// Resumes receiving data from the SCMIRRORING source.
+        /// This must be called after pauseasync().
+        /// </summary>
+        /// <remarks> It will not give the current state. Need to subscribe for event to get the current state </remarks>
+        /// <returns>bool value</returns>
+        /// <privilege>http://tizen.org/privilege/internet</privilege>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public Task<bool> ResumeAsync()
+        {
+            int ret = Interop.ScreenMirroring.ResumeAsync(_handle);
+            var task = new TaskCompletionSource<bool>();
+
+            Task.Factory.StartNew(() =>
+            {
+                if (ret == (int)SCMirroringError.None)
+                {
+                    task.SetResult(true);
+                }
+
+                else if (ret != (int)SCMirroringError.None)
+                {
+                    task.SetResult(false);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "Failed to resume the receiving data from screen mirroring source");
+                }
+            });
+
+            return task.Task;
+        }
+
+        /// <summary>
+        /// Disconnect this instance.
+        /// valid states: connected/playing/paused
+        /// </summary>
+        /// <privilege>http://tizen.org/privilege/internet</privilege>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public void Disconnect()
+        {
+            int ret = Interop.ScreenMirroring.Disconnect(_handle);
+            if (ret != (int)SCMirroringError.None)
+            {
+                ScreenMirroringErrorFactory.ThrowException(ret, "Failed to disconnect sink for screen mirroring");
+            }
+        }
+
+        /// <summary>
+        /// Unprepare this instance.
+        /// valid states: prepared/disconnected.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        public void Unprepare()
+        {
+            int ret = Interop.ScreenMirroring.Unprepare(_handle);
+            if (ret != (int)SCMirroringError.None)
+            {
+                ScreenMirroringErrorFactory.ThrowException(ret, "Failed to reset the screen mirroring sink");
+            }
+        }
+
+        /// <summary>
+        /// Releases all resource used by the <see cref="Tizen.Multimedia.ScreenMirroring"/> object.
+        /// </summary>
+        /// <remarks>Call <see cref="Dispose"/> when you are finished using the <see cref="Tizen.Multimedia.ScreenMirroring"/>.
+        /// The <see cref="Dispose"/> method leaves the <see cref="Tizen.Multimedia.ScreenMirroring"/> in an unusable
+        /// state. After calling <see cref="Dispose"/>, you must release all references to the
+        /// <see cref="Tizen.Multimedia.ScreenMirroring"/> so the garbage collector can reclaim the memory that the
+        /// <see cref="Tizen.Multimedia.ScreenMirroring"/> was occupying.</remarks>
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        /// <summary>
+        /// Dispose the specified handle.
+        /// </summary>
+        /// <param name="disposing">If set to <c>true</c> disposing.</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)
+                {
+                    Interop.ScreenMirroring.Destroy(_handle);
+                    _handle = IntPtr.Zero;
+                }
+
+                _disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Invoke the event for state or error.
+        /// </summary>
+        /// <param name="state"> state </param>
+        /// <param name="error"> error </param>
+        private void StateError(int state, int error)
+        {
+            ///if _stateChanged is subscribe, this will be invoke.
+            StateChangedEventArgs eventArgsState = new StateChangedEventArgs(state);
+            _stateChanged?.Invoke(this, eventArgsState);
+
+            ///if _errorOccurred is subscribe, this will be invoke.
+            ErrorOccurredEventArgs eventArgsError = new ErrorOccurredEventArgs(error);
+            _errorOccurred?.Invoke(this, eventArgsError);
+        }
+
+        /// <summary>
+        /// Registers the state changed event.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        private void RegisterStateChangedEvent()
+        {
+            _stateErrorCallback = (IntPtr userData, int state, int error) =>
+                {
+                    StateError(state, error);
+                };
+
+            int ret = Interop.ScreenMirroring.SetStateErrorCb(_handle, _stateErrorCallback, IntPtr.Zero);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Setting StateChanged callback failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "Setting StateChanged callback failed");
+            }
+        }
+
+        /// <summary>
+        /// Unregisters the state changed event.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        private void UnregisterStateChangedEvent()
+        {
+            int ret = Interop.ScreenMirroring.UnsetStateErrorCb(_handle);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Unsetting StateChnaged callback failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "Unsetting StateChanged callback failed");
+            }
+        }
+
+        /// <summary>
+        /// Registers the error occurred event.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        private void RegisterErrorOccurredEvent()
+        {
+            _stateErrorCallback = (IntPtr userData, int state, int error) =>
+                {
+                    StateError(state, error);
+                };
+
+            int ret = Interop.ScreenMirroring.SetStateErrorCb(_handle, _stateErrorCallback, IntPtr.Zero);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Setting ErrorOccurred callback failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "Setting ErrorOccurred callback failed");
+            }
+        }
+
+        /// <summary>
+        /// Unregisters the error occurred event.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when method fail due to an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when method fail due to an internal error</exception>
+        private void UnregisterErrorOccurredEvent()
+        {
+            int ret = Interop.ScreenMirroring.UnsetStateErrorCb(_handle);
+            if (ret != (int)SCMirroringError.None)
+            {
+                Log.Error(ScreenMirroringLog.LogTag, "Unsetting ErrorOccurred callback failed" + (SCMirroringError)ret);
+                ScreenMirroringErrorFactory.ThrowException(ret, "Unsetting ErrorOccurred callback failed");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia/ScreenMirroring/ScreenMirroringEnumerations.cs b/src/Tizen.Multimedia/ScreenMirroring/ScreenMirroringEnumerations.cs
new file mode 100755 (executable)
index 0000000..90d9ac4
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * 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
+{
+    /// <summary>
+    /// Enumeration for audio codec.
+    /// </summary>
+    public enum AudioCodec
+    {
+        /// <summary>
+        /// Screen mirroring is not negotiated yet
+        /// </summary>
+        None,
+        /// <summary>
+        /// AAC codec for audio
+        /// </summary>
+        Aac,
+        /// <summary>
+        /// AC3 codec for audio
+        /// </summary>
+        Ac3,
+        /// <summary>
+        /// LPCM codec for audio
+        /// </summary>
+        Lpcm
+    }
+    /// <summary>
+    /// Enumeration for video codec.
+    /// </summary>
+    public enum VideoCodec
+    {
+        /// <summary>
+        /// Screen mirroring is not negotiated yet
+        /// </summary>
+        None,
+        /// <summary>
+        /// H.264 codec for video
+        /// </summary>
+        H264
+    }
+    /// <summary>
+    /// Enumeration for display surface type.
+    /// </summary>
+    public enum SurfaceType
+    {
+        /// <summary>
+        /// Use overlay surface to display streaming multimedia data
+        /// </summary>
+        Overlay,
+        /// <summary>
+        /// Use Evas pixmap surface to display streaming multimedia data
+        /// </summary>
+        Evas
+    }
+
+    /// <summary>
+    /// Enumeration for screen mirroring resolution.
+    /// </summary>
+    public enum ResolutionType
+    {
+        /// <summary>
+        /// W-1920, H-1080, 30 fps
+        /// </summary>
+        R1920x1080P30 = (1 << 0),
+        /// <summary>
+        /// W-1280, H-720, 30 fps
+        /// </summary>
+        R1280x720P30 = (1 << 1),
+        /// <summary>
+        /// W-960, H-540, 30 fps
+        /// </summary>
+        R960x540P30 = (1 << 2),
+        /// <summary>
+        /// W-864, H-480, 30 fps
+        /// </summary>
+        R864x480P30 = (1 << 3),
+        /// <summary>
+        /// W-720, H-480, 60 fps
+        /// </summary>
+        R720x480P60 = (1 << 4),
+        /// <summary>
+        /// W-640, H-480, 60 fps
+        /// </summary>
+        R640x480P60 = (1 << 5),
+        /// <summary>
+        /// W-640, H-360, 30 fps
+        /// </summary>
+        R640x360P30 = (1 << 6)
+    }
+
+    /// <summary>
+    /// Enumeration for screen mirroring sink state
+    /// </summary>
+    public enum SCMirroringSinkState
+    {
+        /// <summary>
+        /// Screen mirroring is not created yet
+        /// </summary>
+        None,
+        /// <summary>
+        /// Screen mirroring is created, but not prepared yet
+        /// </summary>
+        Null,
+        /// <summary>
+        /// Screen mirroring is prepared to play media
+        /// </summary>
+        Prepared,
+        /// <summary>
+        /// Screen mirroring is connected
+        /// </summary>
+        Connected,
+        /// <summary>
+        /// Screen mirroring is now playing media
+        /// </summary>
+        Playing,
+        /// <summary>
+        /// Screen mirroring is paused while playing media
+        /// </summary>
+        Paused,
+        /// <summary>
+        /// Screen mirroring is disconnected
+        /// </summary>
+        Disconnected
+    }
+
+    /// <summary>
+    /// Enumeration for screen mirroring error.
+    /// </summary>
+    public enum SCMirroringError
+    {
+        /// <summary>
+        /// Successful
+        /// </summary>
+        None,
+        /// <summary>
+        /// Invalid parameter
+        /// </summary>
+        InvalidParameter,
+        /// <summary>
+        /// Out of memory
+        /// </summary>
+        OutOfMemory,
+        /// <summary>
+        /// Invalid operation
+        /// </summary>
+        InvalidOperation,
+        /// <summary>
+        /// Connection timeout
+        /// </summary>
+        ConnectionTimeOut,
+        /// <summary>
+        /// Permission denied
+        /// </summary>
+        PermissionDenied,
+        /// <summary>
+        /// Not supported
+        /// </summary>
+        NotSupported,
+        /// <summary>
+        /// Unknown error
+        /// </summary>
+        Unknown
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia/ScreenMirroring/ScreenMirroringErrorFactory.cs b/src/Tizen.Multimedia/ScreenMirroring/ScreenMirroringErrorFactory.cs
new file mode 100755 (executable)
index 0000000..85af382
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * 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
+{
+    public class ScreenMirroringErrorFactory
+    {
+        internal static void ThrowException(int errorCode, string errorMessage = null, string paramName = null)
+        {
+            SCMirroringError err = (SCMirroringError)errorCode;
+            if (string.IsNullOrEmpty(errorMessage))
+            {
+                errorMessage = err.ToString();
+            }
+
+            switch ((SCMirroringError)errorCode)
+            {
+                case SCMirroringError.InvalidParameter:
+                throw new ArgumentException(errorMessage, paramName);
+
+                case SCMirroringError.OutOfMemory:
+                case SCMirroringError.InvalidOperation:
+                case SCMirroringError.ConnectionTimeOut:
+                case SCMirroringError.PermissionDenied:
+                case SCMirroringError.NotSupported:
+                case SCMirroringError.Unknown:
+                throw new InvalidOperationException(errorMessage);
+            }
+        }
+    }
+}
+
diff --git a/src/Tizen.Multimedia/ScreenMirroring/StateChangedEventArgs.cs b/src/Tizen.Multimedia/ScreenMirroring/StateChangedEventArgs.cs
new file mode 100755 (executable)
index 0000000..fe4a2ff
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * 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>
+    /// StateChanged event arguments
+    /// </summary>
+    /// <remarks>
+    /// StateChanged event arguments
+    /// </remarks>
+    public class StateChangedEventArgs : EventArgs
+    {
+        internal int _state;
+
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        /// <param name="state"> State Changed </param>
+        internal StateChangedEventArgs(int state)
+        {
+            _state = state;
+        }
+
+        /// <summary>
+        /// Get the current state.
+        /// </summary>
+        /// <value> current state </value>
+        public SCMirroringSinkState State
+        {
+            get
+            {
+                return (SCMirroringSinkState)_state;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia/ScreenMirroring/VideoInformation.cs b/src/Tizen.Multimedia/ScreenMirroring/VideoInformation.cs
new file mode 100755 (executable)
index 0000000..d462cb7
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * 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>
+    /// Video Information
+    /// </summary>
+    /// <remarks>
+    /// This class provides properties and API that are required for setting
+    /// video information of a player.
+    /// </remarks>
+    public class VideoInformation
+    {
+        internal IntPtr _handle;
+        private int _codec;
+        private int _height;
+        private int _width;
+        private int _frameRate;
+
+        internal VideoInformation()
+        {
+        }
+
+        /// <summary>
+        /// Get video Codec.
+        /// </summary>
+        /// <value> Video Codec </value>
+        public VideoCodec Codec
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedVideoCodec(ref _handle, out _codec);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get video codec" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get video codec");
+                }
+
+                return (VideoCodec)_codec;
+            }
+        }
+
+        /// <summary>
+        /// Get height of video resolution.
+        /// </summary>
+        /// <value> Video Resolution Height </value>
+        public int Height
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedVideoResolution(ref _handle, out _width, out _height);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get height" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get video height");
+                }
+
+                return _height;
+            }
+        }
+
+        /// <summary>
+        /// Get width of video resolution.
+        /// </summary>
+        /// <value> Video Resolution Width </value>
+        public int Width
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedVideoResolution(ref _handle, out _width, out _height);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get width" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get video width");
+                }
+
+                return _width;
+            }
+        }
+
+        /// <summary>
+        /// Get width of video frame rate.
+        /// </summary>
+        /// <value> Video FrameRate </value>
+        public int FrameRate
+        {
+            get
+            {
+                int ret;
+                ret = Interop.ScreenMirroring.GetNegotiatedVideoFrameRate(ref _handle, out _frameRate);
+                if (ret != (int)SCMirroringError.None)
+                {
+                    Log.Error(ScreenMirroringLog.LogTag, "Failed to get frame rate" + (SCMirroringError)ret);
+                    ScreenMirroringErrorFactory.ThrowException(ret, "failed to get video frame rate");
+                }
+
+                return _frameRate;
+            }
+        }
+    }
+}
\ No newline at end of file
index bd71381..884e54c 100755 (executable)
     <Compile Include="AudioIO\AudioStateChangedEventArgs.cs" />
     <Compile Include="AudioIO\AudioStreamLengthChangedEventArgs.cs" />
     <Compile Include="AudioIO\BaseAudio.cs" />
+    <Compile Include="Camera\Area.cs" />
+    <Compile Include="Camera\Camera.cs" />
+    <Compile Include="Camera\CameraDisplay.cs" />
+    <Compile Include="Camera\CameraEnums.cs" />
+    <Compile Include="Camera\CameraErrorFactory.cs" />
+    <Compile Include="Camera\CameraErrorOccurredEventArgs.cs" />
+    <Compile Include="Camera\CameraFeature.cs" />
+    <Compile Include="Camera\CameraFocusChangedEventArgs.cs" />
+    <Compile Include="Camera\CameraInterruptedEventArgs.cs" />
+    <Compile Include="Camera\CameraResolution.cs" />
+    <Compile Include="Camera\CameraSetting.cs" />
+    <Compile Include="Camera\CameraStateChangedEventArgs.cs" />
+    <Compile Include="Camera\CapturingEventArgs.cs" />
+    <Compile Include="Camera\DoublePlaneData.cs" />
+    <Compile Include="Camera\EncodedPlaneData.cs" />
+    <Compile Include="Camera\FaceDetectedData.cs" />
+    <Compile Include="Camera\FaceDetectedEventArgs.cs" />
+    <Compile Include="Camera\HdrCaptureProgressEventArgs.cs" />
+    <Compile Include="Camera\ImageData.cs" />
+    <Compile Include="Camera\Location.cs" />
+    <Compile Include="Camera\MediaPacketPreviewEventArgs.cs" />
+    <Compile Include="Camera\PreviewData.cs" />
+    <Compile Include="Camera\PreviewEventArgs.cs" />
+    <Compile Include="Camera\Range.cs" />
+    <Compile Include="Camera\SinglePlaneData.cs" />
+    <Compile Include="Camera\TriplePlaneData.cs" />
     <Compile Include="Interop\Interop.AudioIO.cs" />
+    <Compile Include="Interop\Interop.Camera.cs" />
+    <Compile Include="Interop\Interop.CameraDisplay.cs" />
+    <Compile Include="Interop\Interop.CameraFeature.cs" />
+    <Compile Include="Interop\Interop.CameraSetting.cs" />
     <Compile Include="Interop\Interop.MediaCodec.cs" />
     <Compile Include="Interop\Interop.MediaTool.cs" />
     <Compile Include="Interop\Interop.EvasObject.cs" />
+    <Compile Include="Interop\Interop.MediaVision.BarCode.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Common.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Face.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Image.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Surveillance.cs" />
     <Compile Include="Interop\Interop.Player.cs" />
+       <Compile Include="MediaCodec\BufferStatusChangedEventArgs.cs" />
+    <Compile Include="MediaCodec\EosReachedEventArgs.cs" />
+    <Compile Include="MediaCodec\ErrorOccurredEventArgs.cs" />
+    <Compile Include="MediaCodec\InputProcessedEventArgs.cs" />
+    <Compile Include="MediaCodec\MediaCodec.cs" />
+    <Compile Include="MediaCodec\MediaCodecDebug.cs" />
+    <Compile Include="MediaCodec\MediaCodecError.cs" />
+    <Compile Include="MediaCodec\MediaCodecStatus.cs" />
+    <Compile Include="MediaCodec\MediaCodecType.cs" />
+    <Compile Include="MediaCodec\OutputAvailableEventArgs.cs" />
+    <Compile Include="MediaCodec\SupportedCodecType.cs" />
     <Compile Include="MediaTool\MediaFormat.cs" />
     <Compile Include="MediaTool\MediaFormatAacType.cs" />
     <Compile Include="MediaTool\MediaFormatMimeType.cs" />
     <Compile Include="MediaTool\MediaToolDebug.cs" />
     <Compile Include="MediaTool\NotEnoughMemoryException.cs" />
     <Compile Include="MediaView\MediaView.cs" />
+    <Compile Include="MediaVision\Barcode.cs" />
+    <Compile Include="MediaVision\BarcodeDetector.cs" />
+    <Compile Include="MediaVision\BarcodeDetectorEngineConfiguration.cs" />
+    <Compile Include="MediaVision\BarcodeGenerator.cs" />
+    <Compile Include="MediaVision\BarcodeGeneratorEngineConfiguration.cs" />
+    <Compile Include="MediaVision\BarcodeImageConfiguration.cs" />
+    <Compile Include="MediaVision\BarcodeImageFormat.cs" />
+    <Compile Include="MediaVision\BarcodeType.cs" />
+    <Compile Include="MediaVision\Colorspace.cs" />
+    <Compile Include="MediaVision\EngineConfiguration.cs" />
+    <Compile Include="MediaVision\ErrorCorrectionLevel.cs" />
+    <Compile Include="MediaVision\EyeCondition.cs" />
+    <Compile Include="MediaVision\FaceDetectionResult.cs" />
+    <Compile Include="MediaVision\FaceDetector.cs" />
+    <Compile Include="MediaVision\FaceEngineConfiguration.cs" />
+    <Compile Include="MediaVision\FaceRecognitionModel.cs" />
+    <Compile Include="MediaVision\FaceRecognitionModelType.cs" />
+    <Compile Include="MediaVision\FaceRecognitionResult.cs" />
+    <Compile Include="MediaVision\FaceRecognizer.cs" />
+    <Compile Include="MediaVision\FaceTracker.cs" />
+    <Compile Include="MediaVision\FaceTrackingModel.cs" />
+    <Compile Include="MediaVision\FaceTrackingResult.cs" />
+    <Compile Include="MediaVision\FacialExpression.cs" />
+    <Compile Include="MediaVision\Image.cs" />
+    <Compile Include="MediaVision\ImageEngineConfiguration.cs" />
+    <Compile Include="MediaVision\ImageRecognitionResult.cs" />
+    <Compile Include="MediaVision\ImageRecognizer.cs" />
+    <Compile Include="MediaVision\ImageTracker.cs" />
+    <Compile Include="MediaVision\ImageTrackingModel.cs" />
+    <Compile Include="MediaVision\MediaVisionErrorFactory.cs" />
+    <Compile Include="MediaVision\MediaVisionSource.cs" />
+    <Compile Include="MediaVision\MovementDetectedEventArgs.cs" />
+    <Compile Include="MediaVision\MovementDetectionEventTrigger.cs" />
+    <Compile Include="MediaVision\PersonAppearanceChangedEventArgs.cs" />
+    <Compile Include="MediaVision\PersonAppearanceEventTrigger.cs" />
+    <Compile Include="MediaVision\PersonRecognitionEventTrigger.cs" />
+    <Compile Include="MediaVision\PersonRecognitionResult.cs" />
+    <Compile Include="MediaVision\PersonRecognizedEventArgs.cs" />
+    <Compile Include="MediaVision\Point.cs" />
+    <Compile Include="MediaVision\QrConfiguration.cs" />
+    <Compile Include="MediaVision\QrMode.cs" />
+    <Compile Include="MediaVision\Quadrangle.cs" />
+    <Compile Include="MediaVision\Rectangle.cs" />
+    <Compile Include="MediaVision\SurveillanceEngineConfiguration.cs" />
+    <Compile Include="MediaVision\SurveillanceEventTrigger.cs" />
+    <Compile Include="MediaVision\TargetAttribute.cs" />
+    <Compile Include="MediaVision\TextAttribute.cs" />
     <Compile Include="Player\PlayerEnums.cs" />
     <Compile Include="Player\MediaStreamConfiguration.cs" />
     <Compile Include="Player\SubtitleTrack.cs" />
     <Compile Include="Interop\Interop.Libraries.cs" />
     <Compile Include="Player\PlayerErrorFactory.cs" />
     <Compile Include="Recorder\AudioStreamDeliveredEventArgs.cs" />
-    <Compile Include="Recorder\Camera.cs" />
     <Compile Include="Recorder\Recorder.cs" />
     <Compile Include="Recorder\RecorderEnums.cs" />
     <Compile Include="Recorder\RecorderErrorFactory.cs" />
     <Compile Include="Interop\Interop.Device.cs" />
     <Compile Include="Interop\Interop.StreamPolicy.cs" />
     <Compile Include="Interop\Interop.Volume.cs" />
+    <Compile Include="ScreenMirroring\AudioInformation.cs" />
+    <Compile Include="ScreenMirroring\ErrorOccurredEventArgs.cs" />
+    <Compile Include="ScreenMirroring\ScreenMirroring.cs" />
+    <Compile Include="ScreenMirroring\ScreenMirroringEnumerations.cs" />
+    <Compile Include="ScreenMirroring\StateChangedEventArgs.cs" />
+    <Compile Include="Interop\Interop.ScreenMirroring.cs" />
+    <Compile Include="ScreenMirroring\ScreenMirroringErrorFactory.cs" />
+    <Compile Include="ScreenMirroring\VideoInformation.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Tizen.Multimedia.nuspec" />
index a46db69..6b65b67 100755 (executable)
     <Compile Include="AudioIO\AudioStateChangedEventArgs.cs" />
     <Compile Include="AudioIO\AudioStreamLengthChangedEventArgs.cs" />
     <Compile Include="AudioIO\BaseAudio.cs" />
+    <Compile Include="Camera\Area.cs" />
+    <Compile Include="Camera\Camera.cs" />
+    <Compile Include="Camera\CameraDisplay.cs" />
+    <Compile Include="Camera\CameraEnums.cs" />
+    <Compile Include="Camera\CameraErrorFactory.cs" />
+    <Compile Include="Camera\CameraErrorOccurredEventArgs.cs" />
+    <Compile Include="Camera\CameraFeature.cs" />
+    <Compile Include="Camera\CameraFocusChangedEventArgs.cs" />
+    <Compile Include="Camera\CameraInterruptedEventArgs.cs" />
+    <Compile Include="Camera\CameraResolution.cs" />
+    <Compile Include="Camera\CameraSetting.cs" />
+    <Compile Include="Camera\CameraStateChangedEventArgs.cs" />
+    <Compile Include="Camera\CapturingEventArgs.cs" />
+    <Compile Include="Camera\DoublePlaneData.cs" />
+    <Compile Include="Camera\EncodedPlaneData.cs" />
+    <Compile Include="Camera\FaceDetectedData.cs" />
+    <Compile Include="Camera\FaceDetectedEventArgs.cs" />
+    <Compile Include="Camera\HdrCaptureProgressEventArgs.cs" />
+    <Compile Include="Camera\ImageData.cs" />
+    <Compile Include="Camera\Location.cs" />
+    <Compile Include="Camera\MediaPacketPreviewEventArgs.cs" />
+    <Compile Include="Camera\PreviewData.cs" />
+    <Compile Include="Camera\PreviewEventArgs.cs" />
+    <Compile Include="Camera\Range.cs" />
+    <Compile Include="Camera\SinglePlaneData.cs" />
+    <Compile Include="Camera\TriplePlaneData.cs" />
     <Compile Include="Interop\Interop.AudioIO.cs" />
+    <Compile Include="Interop\Interop.Camera.cs" />
+    <Compile Include="Interop\Interop.CameraDisplay.cs" />
+    <Compile Include="Interop\Interop.CameraFeature.cs" />
+    <Compile Include="Interop\Interop.CameraSetting.cs" />
     <Compile Include="Interop\Interop.MediaCodec.cs" />
     <Compile Include="Interop\Interop.MediaTool.cs" />
+    <Compile Include="Interop\Interop.MediaVision.BarCode.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Common.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Face.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Image.cs" />
+    <Compile Include="Interop\Interop.MediaVision.Surveillance.cs" />
     <Compile Include="Interop\Interop.Player.cs" />
     <Compile Include="Interop\Interop.MetadataExtractor.cs" />
+    <Compile Include="MediaCodec\BufferStatusChangedEventArgs.cs" />
+    <Compile Include="MediaCodec\EosReachedEventArgs.cs" />
+    <Compile Include="MediaCodec\ErrorOccurredEventArgs.cs" />
+    <Compile Include="MediaCodec\InputProcessedEventArgs.cs" />
+    <Compile Include="MediaCodec\MediaCodec.cs" />
+    <Compile Include="MediaCodec\MediaCodecDebug.cs" />
+    <Compile Include="MediaCodec\MediaCodecError.cs" />
+    <Compile Include="MediaCodec\MediaCodecStatus.cs" />
+    <Compile Include="MediaCodec\MediaCodecType.cs" />
+    <Compile Include="MediaCodec\OutputAvailableEventArgs.cs" />
+    <Compile Include="MediaCodec\SupportedCodecType.cs" />
     <Compile Include="MediaTool\MediaFormat.cs" />
     <Compile Include="MediaTool\MediaFormatAacType.cs" />
     <Compile Include="MediaTool\MediaFormatMimeType.cs" />
     <Compile Include="MediaTool\MediaPacketVideoPlane.cs" />
     <Compile Include="MediaTool\MediaToolDebug.cs" />
     <Compile Include="MediaTool\NotEnoughMemoryException.cs" />
+    <Compile Include="MediaVision\Barcode.cs" />
+    <Compile Include="MediaVision\BarcodeDetector.cs" />
+    <Compile Include="MediaVision\BarcodeDetectorEngineConfiguration.cs" />
+    <Compile Include="MediaVision\BarcodeGenerator.cs" />
+    <Compile Include="MediaVision\BarcodeGeneratorEngineConfiguration.cs" />
+    <Compile Include="MediaVision\BarcodeImageConfiguration.cs" />
+    <Compile Include="MediaVision\BarcodeImageFormat.cs" />
+    <Compile Include="MediaVision\BarcodeType.cs" />
+    <Compile Include="MediaVision\Colorspace.cs" />
+    <Compile Include="MediaVision\EngineConfiguration.cs" />
+    <Compile Include="MediaVision\ErrorCorrectionLevel.cs" />
+    <Compile Include="MediaVision\EyeCondition.cs" />
+    <Compile Include="MediaVision\FaceDetectionResult.cs" />
+    <Compile Include="MediaVision\FaceDetector.cs" />
+    <Compile Include="MediaVision\FaceEngineConfiguration.cs" />
+    <Compile Include="MediaVision\FaceRecognitionModel.cs" />
+    <Compile Include="MediaVision\FaceRecognitionModelType.cs" />
+    <Compile Include="MediaVision\FaceRecognitionResult.cs" />
+    <Compile Include="MediaVision\FaceRecognizer.cs" />
+    <Compile Include="MediaVision\FaceTracker.cs" />
+    <Compile Include="MediaVision\FaceTrackingModel.cs" />
+    <Compile Include="MediaVision\FaceTrackingResult.cs" />
+    <Compile Include="MediaVision\FacialExpression.cs" />
+    <Compile Include="MediaVision\Image.cs" />
+    <Compile Include="MediaVision\ImageEngineConfiguration.cs" />
+    <Compile Include="MediaVision\ImageRecognitionResult.cs" />
+    <Compile Include="MediaVision\ImageRecognizer.cs" />
+    <Compile Include="MediaVision\ImageTracker.cs" />
+    <Compile Include="MediaVision\ImageTrackingModel.cs" />
+    <Compile Include="MediaVision\MediaVisionErrorFactory.cs" />
+    <Compile Include="MediaVision\MediaVisionSource.cs" />
+    <Compile Include="MediaVision\MovementDetectedEventArgs.cs" />
+    <Compile Include="MediaVision\MovementDetectionEventTrigger.cs" />
+    <Compile Include="MediaVision\PersonAppearanceChangedEventArgs.cs" />
+    <Compile Include="MediaVision\PersonAppearanceEventTrigger.cs" />
+    <Compile Include="MediaVision\PersonRecognitionEventTrigger.cs" />
+    <Compile Include="MediaVision\PersonRecognitionResult.cs" />
+    <Compile Include="MediaVision\PersonRecognizedEventArgs.cs" />
+    <Compile Include="MediaVision\Point.cs" />
+    <Compile Include="MediaVision\QrConfiguration.cs" />
+    <Compile Include="MediaVision\QrMode.cs" />
+    <Compile Include="MediaVision\Quadrangle.cs" />
+    <Compile Include="MediaVision\Rectangle.cs" />
+    <Compile Include="MediaVision\SurveillanceEngineConfiguration.cs" />
+    <Compile Include="MediaVision\SurveillanceEventTrigger.cs" />
+    <Compile Include="MediaVision\TargetAttribute.cs" />
+    <Compile Include="MediaVision\TextAttribute.cs" />
     <Compile Include="MetadataExtractor\MetadataEnums.cs" />
     <Compile Include="MetadataExtractor\MetadataExtractorErrorFactory.cs" />
     <Compile Include="MetadataExtractor\Synclyrics.cs" />
     <Compile Include="Interop\Interop.Libraries.cs" />
     <Compile Include="Player\PlayerErrorFactory.cs" />
     <Compile Include="Recorder\AudioStreamDeliveredEventArgs.cs" />
-    <Compile Include="Recorder\Camera.cs" />
     <Compile Include="Recorder\Recorder.cs" />
     <Compile Include="Recorder\RecorderEnums.cs" />
     <Compile Include="Recorder\RecorderErrorFactory.cs" />
     <Compile Include="MediaController\Client.cs" />
     <Compile Include="MediaController\Server.cs" />
     <Compile Include="MediaController\CommandReplyEventArgs.cs" />
+    <Compile Include="ScreenMirroring\AudioInformation.cs" />
+    <Compile Include="ScreenMirroring\ErrorOccurredEventArgs.cs" />
+    <Compile Include="ScreenMirroring\ScreenMirroring.cs" />
+    <Compile Include="ScreenMirroring\ScreenMirroringEnumerations.cs" />
+    <Compile Include="ScreenMirroring\StateChangedEventArgs.cs" />
+    <Compile Include="ScreenMirroring\ScreenMirroringErrorFactory.cs" />
+    <Compile Include="ScreenMirroring\VideoInformation.cs" />
+    <Compile Include="Interop\Interop.ScreenMirroring.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Tizen.Multimedia.nuspec" />
     <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>
     <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>
   </PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>