2 * Copyright (C) 2012 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 class WTF_EXPORT_PRIVATE MediaTime {
40 HasBeenRounded = 1 << 1,
41 PositiveInfinite = 1 << 2,
42 NegativeInfinite = 1 << 3,
47 MediaTime(int64_t value, int32_t scale = DefaultTimeScale, uint32_t flags = Valid);
48 MediaTime(const MediaTime& rhs);
51 static MediaTime createWithFloat(float floatTime, int32_t timeScale = DefaultTimeScale);
52 static MediaTime createWithDouble(double doubleTime, int32_t timeScale = DefaultTimeScale);
54 float toFloat() const;
55 double toDouble() const;
57 MediaTime& operator=(const MediaTime& rhs);
58 MediaTime operator+(const MediaTime& rhs) const;
59 MediaTime operator-(const MediaTime& rhs) const;
60 bool operator<(const MediaTime& rhs) const;
61 bool operator>(const MediaTime& rhs) const;
62 bool operator==(const MediaTime& rhs) const;
63 bool operator>=(const MediaTime& rhs) const;
64 bool operator<=(const MediaTime& rhs) const;
72 ComparisonFlags compare(const MediaTime& rhs) const;
74 bool isValid() const { return m_timeFlags & Valid; }
75 bool isInvalid() const { return !isValid(); }
76 bool hasBeenRounded() const { return m_timeFlags & HasBeenRounded; }
77 bool isPositiveInfinite() const { return m_timeFlags & PositiveInfinite; }
78 bool isNegativeInfinite() const { return m_timeFlags & NegativeInfinite; }
79 bool isIndefinite() const { return m_timeFlags & Indefinite; }
81 static const MediaTime& zeroTime();
82 static const MediaTime& invalidTime();
83 static const MediaTime& positiveInfiniteTime();
84 static const MediaTime& negativeInfiniteTime();
85 static const MediaTime& indefiniteTime();
87 const int64_t& timeValue() const { return m_timeValue; }
88 const int32_t& timeScale() const { return m_timeScale; }
90 friend WTF_EXPORT_PRIVATE MediaTime abs(const MediaTime& rhs);
92 static const int32_t DefaultTimeScale = 6000;
93 static const int32_t MaximumTimeScale;
95 void setTimeScale(int32_t);
102 WTF_EXPORT_PRIVATE extern MediaTime abs(const MediaTime& rhs);
105 using WTF::MediaTime;