2 * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 namespace Tizen.Multimedia.Remoting
23 /// Provides means to configure properties and handle events for <see cref="MediaPacketSource"/>.
25 /// <seealso cref="MediaPacketSource"/>
26 /// <since_tizen> 9 </since_tizen>
27 public class MediaPacketSourceConfiguration
29 private readonly MediaPacketSource _owner;
30 NativeWebRTC.MediaPacketBufferStatusCallback _mediaPacketBufferStatusChangedCallback;
32 internal MediaPacketSourceConfiguration(MediaPacketSource owner)
38 /// Occurs when the buffer underruns or overflows.
40 /// <remarks>The event handler will be executed on an internal thread.</remarks>
41 /// <since_tizen> 9 </since_tizen>
42 public event EventHandler<MediaPacketBufferStatusChangedEventArgs> BufferStatusChanged;
44 private IntPtr Handle => _owner.WebRtc.Handle;
46 private uint SourceId => _owner.SourceId.Value;
48 internal void OnWebRTCSet()
50 if (_mediaPacketBufferStatusChangedCallback == null)
52 RegisterBufferStatusChangedCallback();
56 internal void OnWebRTCUnset()
58 if (_mediaPacketBufferStatusChangedCallback != null)
60 UnregisterBufferStatusChangedCallback();
64 private void RegisterBufferStatusChangedCallback()
66 _mediaPacketBufferStatusChangedCallback = (sourceId_, state, _) =>
68 Log.Info(WebRTCLog.Tag, $"sourceId:{sourceId_}, state:{state}");
70 BufferStatusChanged?.Invoke(this, new MediaPacketBufferStatusChangedEventArgs(sourceId_, state));
73 NativeWebRTC.SetBufferStateChangedCb(Handle, SourceId, _mediaPacketBufferStatusChangedCallback, IntPtr.Zero).
74 ThrowIfFailed("Failed to set buffer status changed callback.");
77 private void UnregisterBufferStatusChangedCallback()
79 NativeWebRTC.UnsetBufferStateChangedCb(Handle, SourceId).
80 ThrowIfFailed("Failed to unset buffer status changed callback.");