public static bool OnFrameBoundary(double time, double frameRate)
 {
     return(TimeUtility.OnFrameBoundary(time, frameRate, Math.Max(time, 1.0) * frameRate * TimeUtility.kTimeEpsilon));
 }
 public static double ToExactFrames(double time, double frameRate)
 {
     TimeUtility.ValidateFrameRate(frameRate);
     return(time * frameRate);
 }
 public static double FromFrames(double frames, double frameRate)
 {
     TimeUtility.ValidateFrameRate(frameRate);
     return(frames / frameRate);
 }
        public static double ParseTimeCode(string timeCode, double frameRate, double defaultValue)
        {
            timeCode = TimeUtility.RemoveChar(timeCode, (char c) => char.IsWhiteSpace(c));
            string[] array = timeCode.Split(new char[]
            {
                ':'
            });
            double result;

            if (array.Length == 0 || array.Length > 4)
            {
                result = defaultValue;
            }
            else
            {
                int    num  = 0;
                int    num2 = 0;
                double num3 = 0.0;
                double num4 = 0.0;
                try
                {
                    string text = array[array.Length - 1];
                    if (Regex.Match(text, "^\\d+\\.\\d+$").Success)
                    {
                        num3 = double.Parse(text);
                        if (array.Length > 3)
                        {
                            return(defaultValue);
                        }
                        if (array.Length > 1)
                        {
                            num2 = int.Parse(array[array.Length - 2]);
                        }
                        if (array.Length > 2)
                        {
                            num = int.Parse(array[array.Length - 3]);
                        }
                    }
                    else
                    {
                        if (Regex.Match(text, "^\\d+\\[\\.\\d+\\]$").Success)
                        {
                            string s = TimeUtility.RemoveChar(text, (char c) => c == '[' || c == ']');
                            num4 = double.Parse(s);
                        }
                        else
                        {
                            if (!Regex.Match(text, "^\\d*$").Success)
                            {
                                return(defaultValue);
                            }
                            num4 = (double)int.Parse(text);
                        }
                        if (array.Length > 1)
                        {
                            num3 = (double)int.Parse(array[array.Length - 2]);
                        }
                        if (array.Length > 2)
                        {
                            num2 = int.Parse(array[array.Length - 3]);
                        }
                        if (array.Length > 3)
                        {
                            num = int.Parse(array[array.Length - 4]);
                        }
                    }
                }
                catch (FormatException)
                {
                    return(defaultValue);
                }
                result = num4 / frameRate + num3 + (double)(num2 * 60) + (double)(num * 3600);
            }
            return(result);
        }