Merge remote-tracking branch 'github/master' into tizen
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.AudioIO / AudioIO / AudioIOUtil.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18 using System.Diagnostics;
19 using System.Linq;
20
21 namespace Tizen.Multimedia
22 {
23     internal static class AudioIOUtil
24     {
25         internal static void ThrowIfError(int errorCode, string msg = null)
26         {
27             if (errorCode >= 0)
28             {
29                 Log.Info(nameof(AudioIOUtil), "No error.");
30                 return;
31             }
32
33             AudioIOError code = (AudioIOError)errorCode;
34
35             msg = $"{(msg == null ? "" : msg + " : ")}{ code }";
36
37             switch (code)
38             {
39                 case AudioIOError.OutOfMemory:
40                     throw new OutOfMemoryException();
41
42                 case AudioIOError.InvalidParameter:
43                     throw new ArgumentException(msg);
44
45                 case AudioIOError.DevicePolicyRestriction:
46                 case AudioIOError.PermissionDenied:
47                     throw new UnauthorizedAccessException(msg);
48
49                 case AudioIOError.SoundPolicy:
50                     throw new AudioPolicyException(msg);
51
52                 case AudioIOError.NotSupportedType:
53                 case AudioIOError.NotSupported:
54                     throw new NotSupportedException(msg);
55
56                 case AudioIOError.DeviceNotOpened:
57                 case AudioIOError.DeviceNotClosed:
58                 case AudioIOError.InvalidBuffer:
59                 case AudioIOError.InvalidOperation:
60                 case AudioIOError.InvalidState:
61                 default:
62                     throw new InvalidOperationException(msg);
63             }
64         }
65
66         internal static void ValidateState(AudioIOState curState, params AudioIOState[] desiredStates)
67         {
68             Debug.Assert(desiredStates.Length > 0);
69
70             if (desiredStates.Contains(curState))
71             {
72                 return;
73             }
74
75             throw new InvalidOperationException($"The audio is not in a valid state. " +
76                 $"Current State : { curState }, Valid State : { string.Join(", ", desiredStates) }.");
77         }
78     }
79 }