Changeset 157835 in webkit


Ignore:
Timestamp:
Oct 22, 2013, 5:18:16 PM (12 years ago)
Author:
jer.noble@apple.com
Message:

[WTF] Add a multiplication operator (and a few others) to MediaTime
https://bugs.webkit.org/show_bug.cgi?id=123137

Reviewed by Eric Carlson.

Source/WTF:

Add a multiplication operator and an inequality operator to the
MediaTime class for use by MSE.

  • wtf/MediaTime.cpp:

(WTF::signum): Moved to top of file.
(WTF::MediaTime::operator*): Added.
(WTF::MediaTime::operator!=): Added.

  • wtf/MediaTime.h:

(WTF::operator*): Added non-class version of operator*.

Tools:

Add tests for new MediaTime operators.

  • TestWebKitAPI/Tests/WTF/MediaTime.cpp:

(TestWebKitAPI::TEST):

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r157717 r157835  
     12013-10-22  Jer Noble  <jer.noble@apple.com>
     2
     3        [WTF] Add a multiplication operator (and a few others) to MediaTime
     4        https://bugs.webkit.org/show_bug.cgi?id=123137
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add a multiplication operator and an inequality operator to the
     9        MediaTime class for use by MSE.
     10
     11        * wtf/MediaTime.cpp:
     12        (WTF::signum): Moved to top of file.
     13        (WTF::MediaTime::operator*): Added.
     14        (WTF::MediaTime::operator!=): Added.
     15        * wtf/MediaTime.h:
     16        (WTF::operator*): Added non-class version of operator*.
     17
    1182013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
    219
  • trunk/Source/WTF/wtf/MediaTime.cpp

    r143232 r157835  
    5555}
    5656
     57static int32_t signum(int64_t val)
     58{
     59    return (0 < val) - (val < 0);
     60}
     61
    5762const int32_t MediaTime::MaximumTimeScale = 0x7fffffffL;
    5863
     
    216221}
    217222
     223MediaTime MediaTime::operator*(int32_t rhs) const
     224{
     225    if (isInvalid())
     226        return invalidTime();
     227
     228    if (isIndefinite())
     229        return indefiniteTime();
     230
     231    if (!rhs)
     232        return zeroTime();
     233
     234    if (isPositiveInfinite()) {
     235        if (rhs > 0)
     236            return positiveInfiniteTime();
     237        return negativeInfiniteTime();
     238    }
     239
     240    if (isNegativeInfinite()) {
     241        if (rhs > 0)
     242            return negativeInfiniteTime();
     243        return positiveInfiniteTime();
     244    }
     245
     246    MediaTime a = *this;
     247
     248    while (!safeMultiply(a.m_timeValue, rhs, a.m_timeValue)) {
     249        if (a.m_timeScale == 1)
     250            return signum(a.m_timeValue) == signum(rhs) ? positiveInfiniteTime() : negativeInfiniteTime();
     251        a.setTimeScale(a.m_timeScale / 2);
     252    }
     253
     254    return a;
     255}
     256
    218257bool MediaTime::operator<(const MediaTime& rhs) const
    219258{
     
    224263{
    225264    return compare(rhs) == GreaterThan;
     265}
     266
     267bool MediaTime::operator!=(const MediaTime& rhs) const
     268{
     269    return compare(rhs) != EqualTo;
    226270}
    227271
     
    331375    m_timeValue = newWholePart + (remainder * timeScale) / m_timeScale;
    332376    m_timeScale = timeScale;
    333 }
    334 
    335 static int32_t signum(int64_t val)
    336 {
    337     return (0 < val) - (val < 0);
    338377}
    339378
  • trunk/Source/WTF/wtf/MediaTime.h

    r155251 r157835  
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
     28
     29#ifndef WTF_MediaTime_h
     30#define WTF_MediaTime_h
    2831
    2932#include <wtf/FastMalloc.h>
     
    5962
    6063    MediaTime& operator=(const MediaTime& rhs);
     64    MediaTime& operator+=(const MediaTime& rhs) { return *this = *this + rhs; }
     65    MediaTime& operator-=(const MediaTime& rhs) { return *this = *this - rhs; }
    6166    MediaTime operator+(const MediaTime& rhs) const;
    6267    MediaTime operator-(const MediaTime& rhs) const;
     68    MediaTime operator*(int32_t) const;
    6369    bool operator<(const MediaTime& rhs) const;
    6470    bool operator>(const MediaTime& rhs) const;
     71    bool operator!=(const MediaTime& rhs) const;
    6572    bool operator==(const MediaTime& rhs) const;
    6673    bool operator>=(const MediaTime& rhs) const;
     
    103110};
    104111
     112inline MediaTime operator*(int32_t lhs, const MediaTime& rhs) { return rhs.operator*(lhs); }
     113
    105114WTF_EXPORT_PRIVATE extern MediaTime abs(const MediaTime& rhs);
     115
    106116}
    107117
    108118using WTF::MediaTime;
    109119using WTF::abs;
     120
     121#endif
     122
  • trunk/Tools/ChangeLog

    r157831 r157835  
     12013-10-22  Jer Noble  <jer.noble@apple.com>
     2
     3        [WTF] Add a multiplication operator (and a few others) to MediaTime
     4        https://bugs.webkit.org/show_bug.cgi?id=123137
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add tests for new MediaTime operators.
     9
     10        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
     11        (TestWebKitAPI::TEST):
     12
    1132013-10-22  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WTF/MediaTime.cpp

    r125683 r157835  
    7272    EXPECT_EQ(MediaTime::negativeInfiniteTime() == MediaTime::negativeInfiniteTime(), true);
    7373    EXPECT_EQ(MediaTime::positiveInfiniteTime() == MediaTime::positiveInfiniteTime(), true);
     74    EXPECT_EQ(MediaTime::positiveInfiniteTime() != MediaTime::negativeInfiniteTime(), true);
    7475    EXPECT_EQ(MediaTime::invalidTime() == MediaTime::invalidTime(), true);
     76    EXPECT_EQ(MediaTime::invalidTime() != MediaTime::invalidTime(), false);
     77    EXPECT_EQ(MediaTime::invalidTime() != MediaTime::zeroTime(), true);
    7578    EXPECT_EQ(MediaTime::invalidTime() > MediaTime::negativeInfiniteTime(), true);
    7679    EXPECT_EQ(MediaTime::invalidTime() > MediaTime::positiveInfiniteTime(), true);
     
    7881    EXPECT_EQ(MediaTime::positiveInfiniteTime() < MediaTime::invalidTime(), true);
    7982    EXPECT_EQ(MediaTime::indefiniteTime() == MediaTime::indefiniteTime(), true);
     83    EXPECT_EQ(MediaTime::indefiniteTime() != MediaTime::indefiniteTime(), false);
     84    EXPECT_EQ(MediaTime::indefiniteTime() != MediaTime::zeroTime(), true);
    8085    EXPECT_EQ(MediaTime::indefiniteTime() > MediaTime::negativeInfiniteTime(), true);
    8186    EXPECT_EQ(MediaTime::indefiniteTime() < MediaTime::positiveInfiniteTime(), true);
     
    8691    EXPECT_EQ(MediaTime(1, 1) < MediaTime(2, 1), true);
    8792    EXPECT_EQ(MediaTime(2, 1) > MediaTime(1, 1), true);
     93    EXPECT_EQ(MediaTime(1, 1) != MediaTime(2, 1), true);
    8894    EXPECT_EQ(MediaTime(2, 1) == MediaTime(2, 1), true);
    8995    EXPECT_EQ(MediaTime(2, 1) == MediaTime(4, 2), true);
     
    122128    EXPECT_EQ(MediaTime(1, 2) - MediaTime(1, 3), MediaTime(1, 6));
    123129    EXPECT_EQ(MediaTime(2, numeric_limits<int32_t>::max()-1) - MediaTime(1, numeric_limits<int32_t>::max()-2), MediaTime(1, numeric_limits<int32_t>::max()));
     130
     131    // Multiplication Operators
     132    EXPECT_EQ(MediaTime::positiveInfiniteTime(), MediaTime::positiveInfiniteTime() * 2);
     133    EXPECT_EQ(MediaTime::negativeInfiniteTime(), MediaTime::negativeInfiniteTime() * 2);
     134    EXPECT_EQ(MediaTime::negativeInfiniteTime(), MediaTime::positiveInfiniteTime() * -2);
     135    EXPECT_EQ(MediaTime::positiveInfiniteTime(), MediaTime::negativeInfiniteTime() * -2);
     136    EXPECT_EQ(MediaTime::invalidTime(), MediaTime::invalidTime() * 2);
     137    EXPECT_EQ(MediaTime::invalidTime(), MediaTime::invalidTime() * -2);
     138    EXPECT_EQ(MediaTime::indefiniteTime(), MediaTime::indefiniteTime() * 2);
     139    EXPECT_EQ(MediaTime::indefiniteTime(), MediaTime::indefiniteTime() * -2);
     140    EXPECT_EQ(MediaTime(6, 1), MediaTime(3, 1) * 2);
     141    EXPECT_EQ(MediaTime(0, 1), MediaTime(0, 1) * 2);
     142    EXPECT_EQ(MediaTime(1L << 60, 1), MediaTime(1L << 60, 2) * 2);
     143    EXPECT_EQ(MediaTime::positiveInfiniteTime(), MediaTime(numeric_limits<int64_t>::max(), 1) * 2);
     144    EXPECT_EQ(MediaTime::positiveInfiniteTime(), MediaTime(numeric_limits<int64_t>::min(), 1) * -2);
     145    EXPECT_EQ(MediaTime::negativeInfiniteTime(), MediaTime(numeric_limits<int64_t>::max(), 1) * -2);
     146    EXPECT_EQ(MediaTime::negativeInfiniteTime(), MediaTime(numeric_limits<int64_t>::min(), 1) * 2);
    124147
    125148    // Constants
Note: See TracChangeset for help on using the changeset viewer.